diff --git a/.gitignore b/.gitignore index 41ec42389f..3dfb8a903a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ include/jquery-1.4.2.min.js *.version* favicon.* home.html +addon +*~ + diff --git a/LICENSE b/LICENSE index 33579fe080..3136dd4f81 100644 --- a/LICENSE +++ b/LICENSE @@ -1,25 +1,20 @@ -The Friendika project is distributed under the following license terms: +Copyright (c) 2010, 2011 the Friendika Project +All rights reserved. -* This software is provided for any use with no license terms or restrictions. - -No guarantee is provided. Use at your own risk. - -Components packaged with this software may fall under different license terms. - -cropper - BSD -TwitterOAuth - BSD -markdown - BSD -slinky - BSD -ajax-upload - MIT -simplepie - MIT -LightOpenID - MIT -HTML5 - MIT -jQuery - MIT -TinyMCE - LGPL -phpsec - LGPL -HTMLPurifer - LGPL -Facebook SDK - Apache - -Addons, plugins, and themes may also be provided under their own license terms. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README b/README deleted file mode 100644 index 598b6d2921..0000000000 --- a/README +++ /dev/null @@ -1,86 +0,0 @@ - - ************* - * Friendika * - ************* - - Friendika Communications Server - - http://project.friendika.com - - - Friendika is a web application for managing social communications. Some -would call it a "social network" or "distributed social network". We think -both terms have been over-used, and don't adequately describe Friendika's -capabilities - though Friendika can also fill those roles. - - At its essence, Friendika is a web application which can monitor various -information and social activity streams, and which also lets you participate -in online conversations with friends and associates, using a variety of network -protocols. These are combined into an overview of your various communications -and activities - regardless of network origin. - - Friendika also manages your personal profiles and photo albums and lets -you securely present each of these to specific audiences. Your communications -can be either open and public, or closed and private. You can easily create -"groups" of contacts with which you can partition your conversations into -private social circles, and which cannot be seen outside the circle. - - Friendika is decentralised. Any account on any Friendika server can connect -with any account on any other Friendika server. You can also connect to and -interact directly with friends on Facebook, Status.Net, and other federated -social web services (e.g. identi.ca, GNU-Social, etc.). - - Outgoing communications can be directed to Friendika, existing accounts on -Facebook and Twitter, federated social web providers - or even delivered to -email contacts. - - Incoming data streams aren't limited to traditional social networks. -They may include most any service which provides a syndication feed (both RSS -and Atom). This allows you to view communications from friends in other -diverse social networks - such as Diaspora, Google Buzz, and millions of -blogs, news services, and other websites. You can also import -contacts from (and write to) anybody that is accessible from your email -INBOX and view them in your social stream. Over time we will try to -build two-way bridges to other services so that you can freely -interact in both directions with anybody on an accessible network that -allows it. - - Communications between Friendika servers are private and encrypted, -using military grade encryption - and require mutual identity provenance -before any data is exchanged. These same crypto mechanisms provide remote -password-less authentication; allowing you to post to profiles and view private -photo collections on other servers - without encountering any login and/or -authorisation dialogues when visiting these sites. - - Friendika has no boundaries and no central ownership of the data generated -within the network. Anybody with a commodity PHP/MySQL web server or hosting -account can provide a server, and each individual server can then support -up to several thousand participating members - each with their own unique -communication and privacy needs. This allows Friendika to scale to global -levels and mimics the decentralised architecture of the web itself. - - If you are creating a website which requires social interaction, Friendika -can also take the place of blog software, forum software and feed readers, and -also provide individualised communications and content management - or -simply be used as an alternative to traditional "monolithic" social networks. - - Friendika is also free - in every sense of the word. - - Choose freedom - join us. - - Find out more about the project at http://project.friendika.com - - ******************* - Friendika Demo Site - ******************* - - http://demo.friendika.com - - ******************* - Friendika Downloads - ******************* - - http://github.com/friendika/friendika/tarball/master - - - diff --git a/addon/LICENSE b/addon/LICENSE deleted file mode 100644 index 02cff93203..0000000000 --- a/addon/LICENSE +++ /dev/null @@ -1,10 +0,0 @@ -Friendika addons/plugins license terms are under the control of the project -author or authors. - -Developers are free to set their own license terms on addons/plugins as -standalone works. These license terms apply only to the covered addon or -plugin. - -Addons/plugins may be licensed under copyleft or other license terms. Although -these projects may require Friendika to operate, no addon or plugin may -mandate any changes to the Friendika project license. diff --git a/addon/README b/addon/README deleted file mode 100644 index fb1c6340a5..0000000000 --- a/addon/README +++ /dev/null @@ -1,186 +0,0 @@ -Friendika Addon/Plugin development - -This is an early specification and hook details may be subject to change. - -Please see the sample addon 'randplace' for a working example of using these features. - - -You must register plugins with the system in the .htconfig.php file. - -$a->config['system']['addon'] = 'plugin1name, plugin2name, another_name'; - -Plugin names cannot contain spaces and are used as filenames. - - -Register your plugin hooks during installation. - - register_hook($hookname, $file, $function); - - $hookname is a string and corresponds to a known Friendika hook - $file is a pathname relative to the top-level Friendika directory. - This *should* be 'addon/plugin_name/plugin_name.php' in most cases. - $function is a string and is the name of the function which will be executed - when the hook is called. - - -Your hook functions will be called with at least one and possibly two arguments - - function myhook_function(&$a, &$b) { - - - } - -If you wish to make changes to the calling data, you must declare them as -reference variables (with '&') during function declaration. - -$a is the Friendika 'App' class - which contains a wealth of information -about the current state of Friendika, such as which module has been called, -configuration info, the page contents at the point the hook was invoked, profile -and user information, etc. It is recommeded you call this '$a' to match its usage -elsewhere. - -$b can be called anything you like. This is information which is specific to the hook -currently being processed, and generally contains information that is being immediately -processed or acted on that you can use, display, or alter. Remember to declare it with -'&' if you wish to alter it. - - -Current hooks: - -'authenticate' - called when a user attempts to login. - $b is an array - 'username' => the supplied username - 'password' => the supplied password - 'authenticated' => set this to non-zero to authenticate the user. - 'user_record' => successful authentication must also return a valid user record from the database - - -'logged_in' - called after a user has successfully logged in. - $b contains the $a->user array - - -'display_item' - called when formatting a post for display. - $b is an array - 'item' => The item (array) details pulled from the database - 'output' => the (string) HTML representation of this item prior to adding it - to the page - -'post_local' - called when a status post or comment is entered on the local system - $b is the item array of the information to be stored in the database - {Please note: body contents are bbcode - not HTML) - -'post_local_end' - called when a local status post or comment has been stored on the local system - $b is the item array of the information which has just been stored in the database - {Please note: body contents are bbcode - not HTML) - - -'post_remote' - called when receiving a post from another source. This may also be used - to post local activity or system generated messages. - $b is the item array of information to be stored in the database and the item - body is bbcode. - -'settings_form' - called when generating the HTML for the user Settings page - $b is the (string) HTML of the settings page before the final '' tag. - -'settings_post' - called when the Settings pages are submitted. - $b is the $_POST array - -'plugin_settings' - called when generating the HTML for the addon settings page - $b is the (string) HTML of the addon settings page before the final '' tag. - -'plugin_settings_post' - called when the Addon Settings pages are submitted. - $b is the $_POST array - -'profile_post' - called when posting a profile page. - $b is the $_POST array - -'profile_edit' - called prior to output of profile edit page - $b is array - 'profile' => profile (array) record from the database - 'entry' => the (string) HTML of the generated entry - -'profile_advanced' - called when the HTML is generated for the 'Advanced profile', - corresponding to the 'Profile' tab within a person's profile page. - $b is the (string) HTML representation of the generated profile - -'directory_item' - called from the Directory page when formatting an item for display - $b is an array - 'contact' => contact (array) record for the person from the database - 'entry' => the (string) HTML of the generated entry - -'profile_sidebar_enter' - called prior to generating the sidebar "short" profile for a page - $b is (array) the person's profile array - -'profile_sidebar' - called when generating the sidebar "short" profile for a page - $b is an array - 'profile' => profile (array) record for the person from the database - 'entry' => the (string) HTML of the generated entry - -'contact_block_end' - called when formatting the block of contacts/friends on a - profile sidebar has completed - $b is an array - 'contacts' => contact array of entries - 'output' => the (string) generated HTML of the contact block - -'bbcode' - called during conversion of bbcode to html - $b is (string) converted text - -'html2bbcode' - called during conversion of html to bbcode (e.g. remote message posting) - $b is (string) converted text - - -'page_header' - called after building the page navigation section - $b is (string) HTML of nav region - - -'personal_xrd' - called prior to output of personal XRD file. - $b is an array - 'user' => the user record for the person - 'xml' => the complete XML to be output - - -'home_content' - called prior to output home page content, shown to unlogged users - $b is (string) HTML of section region - -'contact_edit' - called when editing contact details on an individual from the Contacts page - $b is (array) - 'contact' => contact record (array) of target contact - 'output' => the (string) generated HTML of the contact edit page - -'contact_edit_post' - called when posting the contact edit page - $b is the $_POST array - -'init_1' - called just after DB has been opened and before session start - $b is not used or passed - -'page_end' - called after HTML content functions have completed - $b is (string) HTML of content div - -'jot_plugin' - add tools to jot toolbar - $b is (string) HTML for tool icon - - -*** = subject to change - - - - - -Not yet documented: - -'atom_feed' *** - -'atom_feed_end' *** - -'parse_atom' *** - -'atom_author' *** - -'atom_entry' *** - -'parse_link' *** - - - - - diff --git a/addon/calc/calc.php b/addon/calc/calc.php deleted file mode 100644 index 8c079dc7a5..0000000000 --- a/addon/calc/calc.php +++ /dev/null @@ -1,363 +0,0 @@ - - */ - - -function calc_install() { - register_hook('app_menu', 'addon/calc/calc.php', 'calc_app_menu'); -} - -function calc_uninstall() { - unregister_hook('app_menu', 'addon/calc/calc.php', 'calc_app_menu'); - -} - -function calc_app_menu($a,&$b) { - $b['app_menu'] .= '
Calculator
'; -} - - -function calc_module() {} - - - - -function calc_init($a) { - -$x = <<< EOT - - - -EOT; -$a->page['htmlhead'] .= $x; -} - -function calc_content($app) { - -$o = ''; - -$o .= <<< EOT - -

Calculator

-

- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - -
- -EOT; -return $o; - -} diff --git a/addon/convert/UnitConvertor.php b/addon/convert/UnitConvertor.php deleted file mode 100644 index d7933a8fb4..0000000000 --- a/addon/convert/UnitConvertor.php +++ /dev/null @@ -1,283 +0,0 @@ - | -// | Co-authored by : CVH, Chris Hansel | -// +----------------------------------------------------------------------+ -// -// $Id: UnitConvertor.php,v 1.00 2002/02/20 11:40:00 stasokhvat Exp $ - -/** -* UnitConvertor is able to convert between different units and currencies. -* -* @author Stanislav Okhvat -* @version $Id: UnitConvertor.php,v 1.00 2002/03/01 17:00:00 stasokhvat Exp $ -* @package UnitConvertor -* @access public -* @history 01.03.2002 Implemented the code for regular and offset-based -* conversions -* -* 13.12.2004 -* By Chris Hansel (CVH): changed getConvSpecs in order to have it look up -* intermediary conversions (also see comments in check_key). -* -* Intermediary conversions are useful when no conversion ratio is specified -* between two units when we calculate between the two. For example, we want -* to convert between Fahrenheit and Kelvin, and we have only -* specified how to convert Centigrade<->Fahrenheit and -* Centigrade<->Kelvin. While a direct (Fahrenheit->Kelvin) or -* reverse (Kelvin->Fahrenheit) lookups fail, looking for an intermediary -* unit linking the two (Centigrade) helps us do the conversion. -* -* 13.12.2004 -* Chris Hansel (CVH): $to_array argument of addConversion method can now -* contain units as 'unit1/unit2/unit3', when all units stand for the same -* thing. See examples in unitconv.php -*/ -class UnitConvertor -{ - /** - * Stores conversion ratios. - * - * @var array - * @access private - */ - var $conversion_table = array(); - - /** - * Decimal point character (default is "." - American - set in constructor). - * - * @var string - * @access private - */ - var $decimal_point; - - /** - * Thousands separator (default is "," - American - set in constructor). - * - * @var string - * @access private - */ - var $thousand_separator; - - /** - * For future use - * - * @var array - * @access private - */ - var $bases = array(); - - /** - * Constructor. Initializes the UnitConvertor object with the most important - * properties. - * - * @param string decimal point character - * @param string thousand separator character - * @return void - * @access public - */ - function UnitConvertor($dec_point = '.', $thousand_sep = ',') - { - $this->decimal_point = $dec_point; - $this->thousand_separator = $thousand_sep; - - } // end func UnitConvertor - - /** - * Adds a conversion ratio to the conversion table. - * - * @param string the name of unit from which to convert - * @param array array( - * "pound"=>array("ratio"=>'', "offset"=>'') - * ) - * "pound" - name of unit to set conversion ration to - * "ratio" - 'double' conversion ratio which, when - * multiplied by the number of $from_unit units produces - * the result - * "offset" - an offset from 0 which will be added to - * the result when converting (needed for temperature - * conversions and defaults to 0). - * @return boolean true if successful, false otherwise - * @access public - */ - function addConversion($from_unit, $to_array) - { - if (!isset($this->conversion_table[$from_unit])) { - while(list($key, $val) = each($to_array)) - { - if (strstr($key, '/')) - { - $to_units = explode('/', $key); - foreach ($to_units as $to_unit) - { - $this->bases[$from_unit][] = $to_unit; - - if (!is_array($val)) - { - $this->conversion_table[$from_unit."_".$to_unit] = array("ratio"=>$val, "offset"=>0); - } - else - { - $this->conversion_table[$from_unit."_".$to_unit] = - array( - "ratio"=>$val['ratio'], - "offset"=>(isset($val['offset']) ? $val['offset'] : 0) - ); - } - } - } - else - { - $this->bases[$from_unit][] = $key; - - if (!is_array($val)) - { - $this->conversion_table[$from_unit."_".$key] = array("ratio"=>$val, "offset"=>0); - } - else - { - $this->conversion_table[$from_unit."_".$key] = - array( - "ratio"=>$val['ratio'], - "offset"=>(isset($val['offset']) ? $val['offset'] : 0) - ); - } - } - } - return true; - } - return false; - - } // end func addConversion - - /** - * Converts from one unit to another using specified precision. - * - * @param double value to convert - * @param string name of the source unit from which to convert - * @param string name of the target unit to which we are converting - * @param integer double precision of the end result - * @return void - * @access public - */ - function convert($value, $from_unit, $to_unit, $precision) - { - if ($this->getConvSpecs($from_unit, $to_unit, $value, $converted )) - { - return number_format($converted , (int)$precision, $this->decimal_point, $this->thousand_separator); - } else { - return false; - } - } // end func - - /** - * CVH : changed this Function getConvSpecs in order to have it look up - * intermediary Conversions from the - * "base" unit being that one that has the highest hierarchical order in one - * "logical" Conversion_Array - * when taking $conv->addConversion('km', - * array('meter'=>1000, 'dmeter'=>10000, 'centimeter'=>100000, - * 'millimeter'=>1000000, 'mile'=>0.62137, 'naut.mile'=>0.53996, - * 'inch(es)/zoll'=>39370, 'ft/foot/feet'=>3280.8, 'yd/yard'=>1093.6)); - * "km" would be the logical base unit for all units of dinstance, thus, - * if the function fails to find a direct or reverse conversion in the table - * it is only logical to suspect that if there is a chance - * converting the value it only is via the "base" unit, and so - * there is not even a need for a recursive search keeping the perfomance - * acceptable and the ressource small... - * - * CVH check_key checks for a key in the Conversiontable and returns a value - */ - function check_key( $key) { - if ( array_key_exists ($key,$this->conversion_table)) { - if (! empty($this->conversion_table[$key])) { - return $this->conversion_table[$key]; - } - } - return false; - } - - /** - * Key function. Finds the conversion ratio and offset from one unit to another. - * - * @param string name of the source unit from which to convert - * @param string name of the target unit to which we are converting - * @param double conversion ratio found. Returned by reference. - * @param double offset which needs to be added (or subtracted, if negative) - * to the result to convert correctly. - * For temperature or some scientific conversions, - * i.e. Fahrenheit -> Celcius - * @return boolean true if ratio and offset are found for the supplied - * units, false otherwise - * @access private - */ - function getConvSpecs($from_unit, $to_unit, $value, &$converted) - { - $key = $from_unit."_".$to_unit; - $revkey = $to_unit."_".$from_unit; - $found = false; - if ($ct_arr = $this->check_key($key)) { - // Conversion Specs found directly - $ratio = (double)$ct_arr['ratio']; - $offset = $ct_arr['offset']; - $converted = (double)(($value * $ratio)+ $offset); - - return true; - } // not found in direct order, try reverse order - elseif ($ct_arr = $this->check_key($revkey)) { - $ratio = (double)(1/$ct_arr['ratio']); - $offset = -$ct_arr['offset']; - $converted = (double)(($value + $offset) * $ratio); - - return true; - } // not found test for intermediary conversion - else { - // return ratio = 1 if keyparts match - if ($key == $revkey) { - $ratio = 1; - $offset = 0; - $converted = $value; - return true; - } - // otherwise search intermediary - reset($this->conversion_table); - while (list($convk, $i1_value) = each($this->conversion_table)) { - // split the key into parts - $keyparts = preg_split("/_/",$convk); - // return ratio = 1 if keyparts match - - // Now test if either part matches the from or to unit - if ($keyparts[1] == $to_unit && ($i2_value = $this->check_key($keyparts[0]."_".$from_unit))) { - // an intermediary $keyparts[0] was found - // now let us put things together intermediary 1 and 2 - $converted = (double)(((($value - $i2_value['offset']) / $i2_value['ratio']) * $i1_value['ratio'])+ $i1_value['offset']); - - $found = true; - - } elseif ($keyparts[1] == $from_unit && ($i2_value = $this->check_key($keyparts[0]."_".$to_unit))) { - // an intermediary $keyparts[0] was found - // now let us put things together intermediary 2 and 1 - $converted = (double)(((($value - $i1_value['offset']) / $i1_value['ratio']) + $i2_value['offset']) * $i2_value['ratio']); - - $found = true; - } - } - return $found; - } - - } // end func getConvSpecs - -} // end class UnitConvertor -?> \ No newline at end of file diff --git a/addon/convert/convert.php b/addon/convert/convert.php deleted file mode 100644 index 7a4c90a530..0000000000 --- a/addon/convert/convert.php +++ /dev/null @@ -1,228 +0,0 @@ - - */ - -function convert_install() { - register_hook('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); -} - -function convert_uninstall() { - unregister_hook('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); -} - -function convert_app_menu($a,&$b) { - $b['app_menu'] .= ''; -} - - -function convert_module() {} - - - - - - - -function convert_content($app) { - -include("UnitConvertor.php"); - - class TP_Converter extends UnitConvertor { - function TP_Converter($lang = "en") - { - if ($lang != 'en' ) { - $dec_point = '.'; $thousand_sep = "'"; - } else { - $dec_point = '.'; $thousand_sep = ","; - } - - $this->UnitConvertor($dec_point , $thousand_sep ); - - } // end func UnitConvertor - - function find_base_unit($from,$to) { - while (list($skey,$sval) = each($this->bases)) { - if ($skey == $from || $to == $skey || in_array($to,$sval) || in_array($from,$sval)) { - return $skey; - } - } - return false; - } - - function getTable($value, $from_unit, $to_unit, $precision) { - - if ($base_unit = $this->find_base_unit($from_unit,$to_unit)) { - - // A baseunit was found now lets convert from -> $base_unit - - $cell ['value'] = $this->convert($value, $from_unit, $base_unit, $precision)." ".$base_unit; - $cell ['class'] = ($base_unit == $from_unit || $base_unit == $to_unit) ? "framedred": ""; - $cells[] = $cell; - // We now have the base unit and value now lets produce the table; - while (list($key,$val) = each($this->bases[$base_unit])) { - $cell ['value'] = $this->convert($value, $from_unit, $val, $precision)." ".$val; - $cell ['class'] = ($val == $from_unit || $val == $to_unit) ? "framedred": ""; - $cells[] = $cell; - } - - $cc = count($cells); - $string = ""; - $string .= ""; - $i=0; - foreach ($cells as $cell) { - if ($i==0) { - $string .= ""; - $i++; - } else { - $string .= ""; - } - } - $string .= "
$value $from_unit".$cell['value']."
".$cell['value']."
"; - return $string; - } - - } -} - - -$conv = new TP_Converter('en'); - - -$conversions = array( - 'Temperature'=>array('base' =>'Celsius', - 'conv'=>array( - 'Fahrenheit'=>array('ratio'=>1.8, 'offset'=>32), - 'Kelvin'=>array('ratio'=>1, 'offset'=>273), - 'Reaumur'=>0.8 - ) - ), - 'Weight' => array('base' =>'kg', - 'conv'=>array( - 'g'=>1000, - 'mg'=>1000000, - 't'=>0.001, - 'grain'=>15432, - 'oz'=>35.274, - 'lb'=>2.2046, - 'cwt(UK)' => 0.019684, - 'cwt(US)' => 0.022046, - 'ton (US)' => 0.0011023, - 'ton (UK)' => 0.0009842 - ) - ), - 'Distance' => array('base' =>'km', - 'conv'=>array( - 'm'=>1000, - 'dm'=>10000, - 'cm'=>100000, - 'mm'=>1000000, - 'mile'=>0.62137, - 'naut.mile'=>0.53996, - 'inch(es)'=>39370, - 'ft'=>3280.8, - 'yd'=>1093.6, - 'furlong'=>4.970969537898672, - 'fathom'=>546.8066491688539 - ) - ), - 'Area' => array('base' =>'km 2', - 'conv'=>array( - 'ha'=>100, - 'acre'=>247.105, - 'm 2'=>pow(1000,2), - 'dm 2'=>pow(10000,2), - 'cm 2'=>pow(100000,2), - 'mm 2'=>pow(1000000,2), - 'mile 2'=>pow(0.62137,2), - 'naut.miles 2'=>pow(0.53996,2), - 'in 2'=>pow(39370,2), - 'ft 2'=>pow(3280.8,2), - 'yd 2'=>pow(1093.6,2), - ) - ), - 'Volume' => array('base' =>'m 3', - 'conv'=>array( - 'in 3'=>61023.6, - 'ft 3'=>35.315, - 'cm 3'=>pow(10,6), - 'dm 3'=>1000, - 'litre'=>1000, - 'hl'=>10, - 'yd 3'=>1.30795, - 'gal(US)'=>264.172, - 'gal(UK)'=>219.969, - 'pint' => 2113.376, - 'quart' => 1056.688, - 'cup' => 4266.753, - 'fl oz' => 33814.02, - 'tablespoon' => 67628.04, - 'teaspoon' => 202884.1, - 'pt (UK)'=>1000/0.56826, - 'barrel petroleum'=>1000/158.99, - 'Register Tons'=>2.832, - 'Ocean Tons'=>1.1327 - ) - ), - 'Speed' =>array('base' =>'kmph', - 'conv'=>array( - 'mps'=>0.0001726031, - 'milesph'=>0.62137, - 'knots'=>0.53996, - 'mach STP'=>0.0008380431, - 'c (warp)'=>9.265669e-10 - ) - ) -); - - -while (list($key,$val) = each($conversions)) { - $conv->addConversion($val['base'], $val['conv']); - $list[$key][] = $val['base']; - while (list($ukey,$uval) = each($val['conv'])) { - $list[$key][] = $ukey; - } -} - - $o .= '

Unit Conversions

'; - - - if (isset($_POST['from_unit']) && isset($_POST['value'])) { - $_POST['value'] = $_POST['value'] + 0; - - - $o .= ($conv->getTable($_POST['value'], $_POST['from_unit'], $_POST['to_unit'], 5))."

"; - } else { - $o .= "

Select:

"; - } - - if(isset($_POST['value'])) - $value = $_POST['value']; - else - $value = ''; - - $o .= '
'; - $o .= ''; - $o .= ''; - - $o .= '
'; - - return $o; -} diff --git a/addon/facebook/README b/addon/facebook/README deleted file mode 100644 index 19c5948866..0000000000 --- a/addon/facebook/README +++ /dev/null @@ -1,35 +0,0 @@ -Installing the Friendika/Facebook connector - -1. register an API key for your site from developer.facebook.com - a. We'd be very happy if you include "Friendika" in the application name - to increase name recognition. The Friendika icons are also present - in the images directory and may be uploaded as a Facebook app icon. - Use images/friendika-16.jpg for the Icon and images/friendika-128.jpg for the Logo. - b. The url should be your site URL with a trailing slash. - You may use http://portal.friendika.com/privacy as the privacy policy - URL unless your site has different requirements, and - http://portal.friendika.com as the Terms of Service URL unless - you have different requirements. (Friendika is a software application - and does not require Terms of Service, though your installation of it might). - c. Set the following values in your .htconfig.php file - $a->config['facebook']['appid'] = 'xxxxxxxxxxx'; - $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx'; - Replace with the settings Facebook gives you. - d. Navigate to Set Web->Site URL & Domain -> Website Settings. Set Site URL - to yoursubdomain.yourdomain.com. Set Site Domain to your yourdomain.com. -2. Enable the facebook plugin by including it in .htconfig.php - e.g. - $a->config['system']['addon'] = 'plugin1,plugin2,facebook'; -3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page. - and click 'Install Facebook Connector'. -4. This will ask you to login to Facebook and grant permission to the - plugin to do its stuff. Allow it to do so. -5. You're done. To turn it off visit the Plugin Settings page again and - 'Remove Facebook posting'. - -Vidoes and embeds will not be posted if there is no other content. Links -and images will be converted to a format suitable for the Facebook API and -long posts truncated - with a link to view the full post. - -Facebook contacts will not be able to view private photos, as they are not able to -authenticate to your site to establish identity. We will address this -in a future release. diff --git a/addon/facebook/facebook.css b/addon/facebook/facebook.css deleted file mode 100644 index 0c164331e7..0000000000 --- a/addon/facebook/facebook.css +++ /dev/null @@ -1,13 +0,0 @@ - -#facebook-enable-wrapper { - margin-top: 20px; -} - -#facebook-disable-wrapper { - margin-top: 20px; -} - -#facebook-post-default-form input { - margin-top: 20px; - margin-right: 20px; -} \ No newline at end of file diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php deleted file mode 100644 index 33895f80d7..0000000000 --- a/addon/facebook/facebook.php +++ /dev/null @@ -1,1021 +0,0 @@ - - */ - -/** - * Installing the Friendika/Facebook connector - * - * 1. register an API key for your site from developer.facebook.com - * a. We'd be very happy if you include "Friendika" in the application name - * to increase name recognition. The Friendika icons are also present - * in the images directory and may be uploaded as a Facebook app icon. - * Use images/friendika-16.jpg for the Icon and images/friendika-128.jpg for the Logo. - * b. The url should be your site URL with a trailing slash. - * You may use http://portal.friendika.com/privacy as the privacy policy - * URL unless your site has different requirements, and - * http://portal.friendika.com as the Terms of Service URL unless - * you have different requirements. (Friendika is a software application - * and does not require Terms of Service, though your installation of it might). - * c. Set the following values in your .htconfig.php file - * $a->config['facebook']['appid'] = 'xxxxxxxxxxx'; - * $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx'; - * Replace with the settings Facebook gives you. - * d. Navigate to Set Web->Site URL & Domain -> Website Settings. Set - * Site URL to yoursubdomain.yourdomain.com. Set Site Domain to your - * yourdomain.com. - * 2. Enable the facebook plugin by including it in .htconfig.php - e.g. - * $a->config['system']['addon'] = 'plugin1,plugin2,facebook'; - * 3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page. - * and click 'Install Facebook Connector'. - * 4. This will ask you to login to Facebook and grant permission to the - * plugin to do its stuff. Allow it to do so. - * 5. You're done. To turn it off visit the Plugin Settings page again and - * 'Remove Facebook posting'. - * - * Vidoes and embeds will not be posted if there is no other content. Links - * and images will be converted to a format suitable for the Facebook API and - * long posts truncated - with a link to view the full post. - * - * Facebook contacts will not be able to view private photos, as they are not able to - * authenticate to your site to establish identity. We will address this - * in a future release. - */ - -define('FACEBOOK_MAXPOSTLEN', 420); - - -function facebook_install() { - register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); - register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); - register_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); - register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); - register_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); -} - - -function facebook_uninstall() { - unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); - unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); - unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); - unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); - unregister_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); -} - - -/* declare the facebook_module function so that /facebook url requests will land here */ - -function facebook_module() {} - - - -/* If a->argv[1] is a nickname, this is a callback from Facebook oauth requests. */ - -function facebook_init(&$a) { - - if($a->argc != 2) - return; - $nick = $a->argv[1]; - if(strlen($nick)) - $r = q("SELECT `uid` FROM `user` WHERE `nickname` = '%s' LIMIT 1", - dbesc($nick) - ); - if(! count($r)) - return; - - $uid = $r[0]['uid']; - $auth_code = (($_GET['code']) ? $_GET['code'] : ''); - $error = (($_GET['error_description']) ? $_GET['error_description'] : ''); - - - if($error) - logger('facebook_init: Error: ' . $error); - - if($auth_code && $uid) { - - $appid = get_config('facebook','appid'); - $appsecret = get_config('facebook', 'appsecret'); - - $x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id=' - . $appid . '&client_secret=' . $appsecret . '&redirect_uri=' - . urlencode($a->get_baseurl() . '/facebook/' . $nick) - . '&code=' . $auth_code); - - logger('facebook_init: returned access token: ' . $x, LOGGER_DATA); - - if(strpos($x,'access_token=') !== false) { - $token = str_replace('access_token=', '', $x); - if(strpos($token,'&') !== false) - $token = substr($token,0,strpos($token,'&')); - set_pconfig($uid,'facebook','access_token',$token); - set_pconfig($uid,'facebook','post','1'); - set_pconfig($uid,'facebook','no_linking',1); - fb_get_self($uid); - fb_get_friends($uid); - fb_consume_all($uid); - - } - - } - -} - - -function fb_get_self($uid) { - $access_token = get_pconfig($uid,'facebook','access_token'); - if(! $access_token) - return; - $s = fetch_url('https://graph.facebook.com/me/?access_token=' . $access_token); - if($s) { - $j = json_decode($s); - set_pconfig($uid,'facebook','self_id',(string) $j->id); - } -} - - - -function fb_get_friends($uid) { - - $access_token = get_pconfig($uid,'facebook','access_token'); - - $no_linking = get_pconfig($uid,'facebook','no_linking'); - if($no_linking) - return; - - if(! $access_token) - return; - $s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token); - if($s) { - logger('facebook: fb_get_friends: ' . $s, LOGGER_DATA); - $j = json_decode($s); - logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA); - if(! $j->data) - return; - foreach($j->data as $person) { - $s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token); - if($s) { - $jp = json_decode($s); - logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA); - - // always use numeric link for consistency - - $jp->link = 'http://facebook.com/profile.php?id=' . $person->id; - - // check if we already have a contact - - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1", - intval($uid), - dbesc($jp->link) - ); - - if(count($r)) { - - // check that we have all the photos, this has been known to fail on occasion - - if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) { - require_once("Photo.php"); - - $photos = import_profile_photo('https://graph.facebook.com/' . $jp->id . '/picture', $uid, $r[0]['id']); - - $r = q("UPDATE `contact` SET `photo` = '%s', - `thumb` = '%s', - `micro` = '%s', - `name-date` = '%s', - `uri-date` = '%s', - `avatar-date` = '%s' - WHERE `id` = %d LIMIT 1 - ", - dbesc($photos[0]), - dbesc($photos[1]), - dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($r[0]['id']) - ); - } - continue; - } - else { - - // create contact record - $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, - `name`, `nick`, `photo`, `network`, `rel`, `priority`, - `writable`, `blocked`, `readonly`, `pending` ) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ", - intval($uid), - dbesc(datetime_convert()), - dbesc($jp->link), - dbesc(''), - dbesc(''), - dbesc($jp->id), - dbesc('facebook ' . $jp->id), - dbesc($jp->name), - dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)), - dbesc('https://graph.facebook.com/' . $jp->id . '/picture'), - dbesc(NETWORK_FACEBOOK), - intval(CONTACT_IS_FRIEND), - intval(1), - intval(1) - ); - } - - $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1", - dbesc($jp->link), - intval($uid) - ); - - if(! count($r)) { - continue; - } - - $contact = $r[0]; - $contact_id = $r[0]['id']; - - require_once("Photo.php"); - - $photos = import_profile_photo($r[0]['photo'],$uid,$contact_id); - - $r = q("UPDATE `contact` SET `photo` = '%s', - `thumb` = '%s', - `micro` = '%s', - `name-date` = '%s', - `uri-date` = '%s', - `avatar-date` = '%s' - WHERE `id` = %d LIMIT 1 - ", - dbesc($photos[0]), - dbesc($photos[1]), - dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($contact_id) - ); - - } - } - } -} - -// This is the POST method to the facebook settings page -// Content is posted to Facebook in the function facebook_post_hook() - -function facebook_post(&$a) { - - $uid = local_user(); - if($uid){ - - $value = ((x($_POST,'post_by_default')) ? intval($_POST['post_by_default']) : 0); - set_pconfig($uid,'facebook','post_by_default', $value); - - $no_linking = get_pconfig($uid,'facebook','no_linking'); - - $linkvalue = ((x($_POST,'facebook_linking')) ? intval($_POST['facebook_linking']) : 0); - set_pconfig($uid,'facebook','no_linking', (($linkvalue) ? 0 : 1)); - - // FB linkage was allowed but has just been turned off - remove all FB contacts and posts - - if((! intval($no_linking)) && (! intval($linkvalue))) { - $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `network` = '%s' ", - intval($uid), - dbesc(NETWORK_FACEBOOK) - ); - if(count($r)) { - require_once('include/Contact.php'); - foreach($r as $rr) - contact_remove($rr['id']); - } - } - elseif(intval($no_linking) && intval($linkvalue)) { - // FB linkage is now allowed - import stuff. - fb_get_self($uid); - fb_get_friends($uid); - fb_consume_all($uid); - } - - info( t('Settings updated.') . EOL); - } - - return; -} - -// Facebook settings form - -function facebook_content(&$a) { - - if(! local_user()) { - notice( t('Permission denied.') . EOL); - return ''; - } - - if($a->argc > 1 && $a->argv[1] === 'remove') { - del_pconfig(local_user(),'facebook','post'); - info( t('Facebook disabled') . EOL); - } - - if($a->argc > 1 && $a->argv[1] === 'friends') { - fb_get_friends(local_user()); - info( t('Updating contacts') . EOL); - } - - - $fb_installed = get_pconfig(local_user(),'facebook','post'); - - $appid = get_config('facebook','appid'); - - if(! $appid) { - notice( t('Facebook API key is missing.') . EOL); - return ''; - } - - $a->page['htmlhead'] .= '' . "\r\n"; - - $o .= '

' . t('Facebook Connect') . '

'; - - if(! $fb_installed) { - $o .= ''; - } - - if($fb_installed) { - $o .= ''; - - $o .= '
'; - $o .= '
'; - $post_by_default = get_pconfig(local_user(),'facebook','post_by_default'); - $checked = (($post_by_default) ? ' checked="checked" ' : ''); - $o .= '' . ' ' . t('Post to Facebook by default') . EOL; - - $no_linking = get_pconfig(local_user(),'facebook','no_linking'); - $checked = (($no_linking) ? '' : ' checked="checked" '); - $o .= '' . ' ' . t('Link all your Facebook friends and conversations') . EOL ; - - $hidden = (($a->user['hidewall'] || get_config('system','block_public')) ? true : false); - if(! $hidden) { - $o .= EOL; - $o .= t('Warning: Your Facebook privacy settings can not be imported.') . EOL; - $o .= t('Linked Facebook items may be publicly visible, depending on your privacy settings for this website/account.') . EOL; - } - $o .= '
'; - } - - return $o; -} - - - -function facebook_cron($a,$b) { - - $last = get_config('facebook','last_poll'); - - $poll_interval = intval(get_config('facebook','poll_interval')); - if(! $poll_interval) - $poll_interval = 3600; - - if($last) { - $next = $last + $poll_interval; - if($next > time()) - return; - } - - logger('facebook_cron'); - - - // Find the FB users on this site and randomize in case one of them - // uses an obscene amount of memory. It may kill this queue run - // but hopefully we'll get a few others through on each run. - - $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'post' AND `v` = '1' ORDER BY RAND() "); - if(count($r)) { - foreach($r as $rr) { - if(get_pconfig($rr['uid'],'facebook','no_linking')) - continue; - // check for new friends once a day - $last_friend_check = get_pconfig($rr['uid'],'facebook','friend_check'); - if($last_friend_check) - $next_friend_check = $last_friend_check + 86400; - if($next_friend_check <= time()) { - fb_get_friends($rr['uid']); - set_pconfig($rr['uid'],'facebook','friend_check',time()); - } - fb_consume_all($rr['uid']); - } - } - - set_config('facebook','last_poll', time()); - -} - - - -function facebook_plugin_settings(&$a,&$b) { - - $b .= '
'; - $b .= '

' . t('Facebook') . '

'; - $b .= '' . t('Facebook Connector Settings') . '
'; - $b .= '
'; - -} - -function facebook_jot_nets(&$a,&$b) { - if(! local_user()) - return; - - $fb_post = get_pconfig(local_user(),'facebook','post'); - if(intval($fb_post) == 1) { - $fb_defpost = get_pconfig(local_user(),'facebook','post_by_default'); - $selected = ((intval($fb_defpost) == 1) ? ' checked="checked" ' : ''); - $b .= '
' - . t('Post to Facebook') . '
'; - } -} - - -function facebook_post_hook(&$a,&$b) { - - /** - * Post to Facebook stream - */ - - require_once('include/group.php'); - - logger('Facebook post'); - - $reply = false; - $likes = false; - - if((local_user()) && (local_user() == $b['uid'])) { - - // Facebook is not considered a private network - if($b['prvnets'] && $b['private']) - return; - - if($b['parent']) { - $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($b['parent']), - intval(local_user()) - ); - if(count($r) && substr($r[0]['uri'],0,4) === 'fb::') - $reply = substr($r[0]['uri'],4); - elseif(count($r) && substr($r[0]['extid'],0,4) === 'fb::') - $reply = substr($r[0]['extid'],4); - else - return; - logger('facebook reply id=' . $reply); - } - - if($b['private'] && $reply === false) { - $allow_people = expand_acl($b['allow_cid']); - $allow_groups = expand_groups(expand_acl($b['allow_gid'])); - $deny_people = expand_acl($b['deny_cid']); - $deny_groups = expand_groups(expand_acl($b['deny_gid'])); - - $recipients = array_unique(array_merge($allow_people,$allow_groups)); - $deny = array_unique(array_merge($deny_people,$deny_groups)); - - $allow_str = dbesc(implode(', ',$recipients)); - if($allow_str) { - $r = q("SELECT `notify` FROM `contact` WHERE `id` IN ( $allow_str ) AND `network` = 'face'"); - $allow_arr = array(); - if(count($r)) - foreach($r as $rr) - $allow_arr[] = $rr['notify']; - } - - $deny_str = dbesc(implode(', ',$deny)); - if($deny_str) { - $r = q("SELECT `notify` FROM `contact` WHERE `id` IN ( $deny_str ) AND `network` = 'face'"); - $deny_arr = array(); - if(count($r)) - foreach($r as $rr) - $deny_arr[] = $rr['notify']; - } - - if(count($deny_arr) && (! count($allow_arr))) { - - // One or more FB folks were denied access but nobody on FB was specifically allowed access. - // This might cause the post to be open to public on Facebook, but only to selected members - // on another network. Since this could potentially leak a post to somebody who was denied, - // we will skip posting it to Facebook with a slightly vague but relevant message that will - // hopefully lead somebody to this code comment for a better explanation of what went wrong. - - notice( t('Post to Facebook cancelled because of multi-network access permission conflict.') . EOL); - return; - } - - - // if it's a private message but no Facebook members are allowed or denied, skip Facebook post - - if((! count($allow_arr)) && (! count($deny_arr))) - return; - } - - if($b['verb'] == ACTIVITY_LIKE) - $likes = true; - - - $appid = get_config('facebook', 'appid' ); - $secret = get_config('facebook', 'appsecret' ); - - if($appid && $secret) { - - logger('facebook: have appid+secret'); - - $fb_post = intval(get_pconfig(local_user(),'facebook','post')); - $fb_enable = (($fb_post && x($_POST,'facebook_enable')) ? intval($_POST['facebook_enable']) : 0); - $fb_token = get_pconfig(local_user(),'facebook','access_token'); - - // if API is used, default to the chosen settings - if($_POST['api_source'] && intval(get_pconfig(local_user(),'facebook','post_by_default'))) - $fb_enable = 1; - - - - - logger('facebook: $fb_post: ' . $fb_post . ' $fb_enable: ' . $fb_enable . ' $fb_token: ' . $fb_token,LOGGER_DEBUG); - - // post to facebook if it's a public post and we've ticked the 'post to Facebook' box, - // or it's a private message with facebook participants - // or it's a reply or likes action to an existing facebook post - - if($fb_post && $fb_token && ($fb_enable || $b['private'] || $reply)) { - logger('facebook: able to post'); - require_once('library/facebook.php'); - require_once('include/bbcode.php'); - - $msg = $b['body']; - - logger('Facebook post: original msg=' . $msg, LOGGER_DATA); - - // make links readable before we strip the code - - // unless it's a dislike - just send the text as a comment - - if($b['verb'] == ACTIVITY_DISLIKE) - $msg = trim(strip_tags(bbcode($msg))); - - $search_str = $a->get_baseurl() . '/search'; - - if(preg_match("/\[url=(.*?)\](.*?)\[\/url\]/is",$msg,$matches)) { - - // don't use hashtags for message link - - if(strpos($matches[2],$search_str) === false) { - $link = $matches[1]; - if(substr($matches[2],0,5) != '[img]') - $linkname = $matches[2]; - } - } - - $msg = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/is",'$2 $1',$msg); - - if(preg_match("/\[img\](.*?)\[\/img\]/is",$msg,$matches)) - $image = $matches[1]; - - $msg = preg_replace("/\[img\](.*?)\[\/img\]/is", t('Image: ') . '$1', $msg); - - if((strpos($link,z_root()) !== false) && (! $image)) - $image = $a->get_baseurl() . '/images/friendika-64.jpg'; - - $msg = trim(strip_tags(bbcode($msg))); - $msg = html_entity_decode($msg,ENT_QUOTES,'UTF-8'); - - // add any attachments as text urls - - $arr = explode(',',$b['attach']); - - if(count($arr)) { - $msg .= "\n"; - foreach($arr as $r) { - $matches = false; - $cnt = preg_match('|\[attach\]href=\"(.*?)\" size=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches); - if($cnt) { - $msg .= $matches[1]; - } - } - } - - if (strlen($msg) > FACEBOOK_MAXPOSTLEN) { - $shortlink = ""; - require_once('library/slinky.php'); - - $display_url = $a->get_baseurl() . '/display/' . $a->user['nickname'] . '/' . $b['id']; - $slinky = new Slinky( $display_url ); - // setup a cascade of shortening services - // try to get a short link from these services - // in the order ur1.ca, trim, id.gd, tinyurl - $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) ); - $shortlink = $slinky->short(); - // the new message will be shortened such that "... $shortlink" - // will fit into the character limit - $msg = substr($msg, 0, FACEBOOK_MAXPOSTLEN - strlen($shortlink) - 4); - $msg .= '... ' . $shortlink; - } - if(! strlen($msg)) - return; - - logger('Facebook post: msg=' . $msg, LOGGER_DATA); - - if($likes) { - $postvars = array('access_token' => $fb_token); - } - else { - $postvars = array( - 'access_token' => $fb_token, - 'message' => $msg - ); - if(isset($image)) - $postvars['picture'] = $image; - if(isset($link)) - $postvars['link'] = $link; - if(isset($linkname)) - $postvars['name'] = $linkname; - } - - if(($b['private']) && (! $b['parent'])) { - $postvars['privacy'] = '{"value": "CUSTOM", "friends": "SOME_FRIENDS"'; - if(count($allow_arr)) - $postvars['privacy'] .= ',"allow": "' . implode(',',$allow_arr) . '"'; - if(count($deny_arr)) - $postvars['privacy'] .= ',"deny": "' . implode(',',$deny_arr) . '"'; - $postvars['privacy'] .= '}'; - - } - - if($reply) { - $url = 'https://graph.facebook.com/' . $reply . '/' . (($likes) ? 'likes' : 'comments'); - } - else { - $url = 'https://graph.facebook.com/me/feed'; - if($b['plink']) - $postvars['actions'] = '{"name": "' . t('View on Friendika') . '", "link": "' . $b['plink'] . '"}'; - } - - logger('facebook: post to ' . $url); - logger('facebook: postvars: ' . print_r($postvars,true)); - - // "test_mode" prevents anything from actually being posted. - // Otherwise, let's do it. - - if(! get_config('facebook','test_mode')) { - $x = post_url($url, $postvars); - - $retj = json_decode($x); - if($retj->id) { - q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d LIMIT 1", - dbesc('fb::' . $retj->id), - intval($b['id']) - ); - } - else { - if(! $likes) { - $s = serialize(array('url' => $url, 'item' => $b['id'], 'post' => $postvars)); - q("INSERT INTO `queue` ( `network`, `cid`, `created`, `last`, `content`) - VALUES ( '%s', %d, '%s', '%s', '%s') ", - dbesc(NETWORK_FACEBOOK), - intval($a->contact), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc($s) - ); - - notice( t('Facebook post failed. Queued for retry.') . EOL); - } - } - - logger('Facebook post returns: ' . $x, LOGGER_DEBUG); - } - } - } - } -} - - -function fb_queue_hook(&$a,&$b) { - - $qi = q("SELECT * FROM `queue` WHERE `network` = '%s'", - dbesc(NETWORK_FACEBOOK) - ); - if(! count($qi)) - return; - - require_once('include/queue_fn.php'); - - foreach($qi as $x) { - if($x['network'] !== NETWORK_FACEBOOK) - continue; - - logger('facebook_queue: run'); - - $r = q("SELECT `user`.* FROM `user` LEFT JOIN `contact` on `contact`.`uid` = `user`.`uid` - WHERE `contact`.`self` = 1 AND `contact`.`id` = %d LIMIT 1", - intval($x['cid']) - ); - if(! count($r)) - continue; - - $user = $r[0]; - - $appid = get_config('facebook', 'appid' ); - $secret = get_config('facebook', 'appsecret' ); - - if($appid && $secret) { - $fb_post = intval(get_pconfig($user['uid'],'facebook','post')); - $fb_token = get_pconfig($user['uid'],'facebook','access_token'); - - if($fb_post && $fb_token) { - logger('facebook_queue: able to post'); - require_once('library/facebook.php'); - - $z = unserialize($x['content']); - $item = $z['item']; - $j = post_url($z['url'],$z['post']); - - $retj = json_decode($j); - if($retj->id) { - q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d LIMIT 1", - dbesc('fb::' . $retj->id), - intval($item) - ); - logger('facebook_queue: success: ' . $j); - remove_queue_item($x['id']); - } - else { - logger('facebook_queue: failed: ' . $j); - update_queue_time($x['id']); - } - } - } - } -} - -function fb_consume_all($uid) { - - require_once('include/items.php'); - - $access_token = get_pconfig($uid,'facebook','access_token'); - if(! $access_token) - return; - - - $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token); - if($s) { - $j = json_decode($s); - logger('fb_consume_stream: wall: ' . print_r($j,true), LOGGER_DATA); - fb_consume_stream($uid,$j,true); - } - $s = fetch_url('https://graph.facebook.com/me/home?access_token=' . $access_token); - if($s) { - $j = json_decode($s); - logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA); - fb_consume_stream($uid,$j,false); - } - -} - -function fb_consume_stream($uid,$j,$wall = false) { - $a = get_app(); - - $no_linking = get_pconfig($uid,'facebook','no_linking'); - if($no_linking) - return; - - $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1", - intval($uid) - ); - - $user = q("SELECT `nickname`, `blockwall` FROM `user` WHERE `uid` = %d LIMIT 1", - intval($uid) - ); - if(count($user)) - $my_local_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname']; - - $self_id = get_pconfig($uid,'facebook','self_id'); - if(! count($j->data) || (! strlen($self_id))) - return; - - foreach($j->data as $entry) { - logger('fb_consume: entry: ' . print_r($entry,true), LOGGER_DATA); - $datarray = array(); - - $r = q("SELECT * FROM `item` WHERE ( `uri` = '%s' OR `extid` = '%s') AND `uid` = %d LIMIT 1", - dbesc('fb::' . $entry->id), - dbesc('fb::' . $entry->id), - intval($uid) - ); - if(count($r)) { - $post_exists = true; - $orig_post = $r[0]; - $top_item = $r[0]['id']; - } - else { - $post_exists = false; - $orig_post = null; - } - - if(! $orig_post) { - $datarray['gravity'] = 0; - $datarray['uid'] = $uid; - $datarray['wall'] = (($wall) ? 1 : 0); - $datarray['uri'] = $datarray['parent-uri'] = 'fb::' . $entry->id; - $from = $entry->from; - if($from->id == $self_id) - $datarray['contact-id'] = $self[0]['id']; - else { - $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1", - dbesc($from->id), - intval($uid) - ); - if(count($r)) - $datarray['contact-id'] = $r[0]['id']; - } - - // don't store post if we don't have a contact - - if(! x($datarray,'contact-id')) { - logger('no contact: post ignored'); - continue; - } - - $datarray['verb'] = ACTIVITY_POST; - if($wall) { - $datarray['owner-name'] = $self[0]['name']; - $datarray['owner-link'] = $self[0]['url']; - $datarray['owner-avatar'] = $self[0]['thumb']; - } - if(isset($entry->application) && isset($entry->application->name) && strlen($entry->application->name)) - $datarray['app'] = strip_tags($entry->application->name); - else - $datarray['app'] = 'facebook'; - $datarray['author-name'] = $from->name; - $datarray['author-link'] = 'http://facebook.com/profile.php?id=' . $from->id; - $datarray['author-avatar'] = 'https://graph.facebook.com/' . $from->id . '/picture'; - $datarray['plink'] = $datarray['author-link'] . '&v=wall&story_fbid=' . substr($entry->id,strpos($entry->id,'_') + 1); - - $datarray['body'] = $entry->message; - if($entry->picture) - $datarray['body'] .= "\n\n" . '[img]' . $entry->picture . '[/img]'; - if($entry->link) - $datarray['body'] .= "\n" . linkify($entry->link); - if($entry->name) - $datarray['body'] .= "\n" . $entry->name; - if($entry->caption) - $datarray['body'] .= "\n" . $entry->caption; - if($entry->description) - $datarray['body'] .= "\n" . $entry->description; - $datarray['created'] = datetime_convert('UTC','UTC',$entry->created_time); - $datarray['edited'] = datetime_convert('UTC','UTC',$entry->updated_time); - - // If the entry has a privacy policy, we cannot assume who can or cannot see it, - // as the identities are from a foreign system. Mark it as private to the owner. - - if($entry->privacy && $entry->privacy->value !== 'EVERYONE') { - $datarray['private'] = 1; - $datarray['allow_cid'] = '<' . $uid . '>'; - } - - $top_item = item_store($datarray); - $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($top_item), - intval($uid) - ); - if(count($r)) { - $orig_post = $r[0]; - logger('fb: new top level item posted'); - } - } - - if(isset($entry->likes) && isset($entry->likes->data)) - $likers = $entry->likes->data; - else - $likers = null; - - if(isset($entry->comments) && isset($entry->comments->data)) - $comments = $entry->comments->data; - else - $comments = null; - - if(is_array($likers)) { - foreach($likers as $likes) { - - if(! $orig_post) - continue; - - // If we posted the like locally, it will be found with our url, not the FB url. - - $second_url = (($likes->id == $self_id) ? $self[0]['url'] : 'http://facebook.com/profile.php?id=' . $likes->id); - - $r = q("SELECT * FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `verb` = '%s' - AND ( `author-link` = '%s' OR `author-link` = '%s' ) LIMIT 1", - dbesc($orig_post['uri']), - intval($uid), - dbesc(ACTIVITY_LIKE), - dbesc('http://facebook.com/profile.php?id=' . $likes->id), - dbesc($second_url) - ); - - if(count($r)) - continue; - - $likedata = array(); - $likedata['parent'] = $top_item; - $likedata['verb'] = ACTIVITY_LIKE; - $likedata['gravity'] = 3; - $likedata['uid'] = $uid; - $likedata['wall'] = (($wall) ? 1 : 0); - $likedata['uri'] = item_new_uri($a->get_baseurl(), $uid); - $likedata['parent-uri'] = $orig_post['uri']; - if($likes->id == $self_id) - $likedata['contact-id'] = $self[0]['id']; - else { - $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1", - dbesc($likes->id), - intval($uid) - ); - if(count($r)) - $likedata['contact-id'] = $r[0]['id']; - } - if(! x($likedata,'contact-id')) - $likedata['contact-id'] = $orig_post['contact-id']; - - $likedata['app'] = 'facebook'; - $likedata['verb'] = ACTIVITY_LIKE; - $likedata['author-name'] = $likes->name; - $likedata['author-link'] = 'http://facebook.com/profile.php?id=' . $likes->id; - $likedata['author-avatar'] = 'https://graph.facebook.com/' . $likes->id . '/picture'; - - $author = '[url=' . $likedata['author-link'] . ']' . $likedata['author-name'] . '[/url]'; - $objauthor = '[url=' . $orig_post['author-link'] . ']' . $orig_post['author-name'] . '[/url]'; - $post_type = t('status'); - $plink = '[url=' . $orig_post['plink'] . ']' . $post_type . '[/url]'; - $likedata['object-type'] = ACTIVITY_OBJ_NOTE; - - $likedata['body'] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink); - $likedata['object'] = '' . ACTIVITY_OBJ_NOTE . '1' . - '' . $orig_post['uri'] . '' . xmlify('') . '' . $orig_post['title'] . '' . $orig_post['body'] . ''; - - $item = item_store($likedata); - } - } - if(is_array($comments)) { - foreach($comments as $cmnt) { - - if(! $orig_post) - continue; - - $r = q("SELECT * FROM `item` WHERE `uid` = %d AND ( `uri` = '%s' OR `extid` = '%s' ) LIMIT 1", - intval($uid), - dbesc('fb::' . $cmnt->id), - dbesc('fb::' . $cmnt->id) - ); - if(count($r)) - continue; - - $cmntdata = array(); - $cmntdata['parent'] = $top_item; - $cmntdata['verb'] = ACTIVITY_POST; - $cmntdata['gravity'] = 6; - $cmntdata['uid'] = $uid; - $cmntdata['wall'] = (($wall) ? 1 : 0); - $cmntdata['uri'] = 'fb::' . $cmnt->id; - $cmntdata['parent-uri'] = $orig_post['uri']; - if($cmnt->from->id == $self_id) { - $cmntdata['contact-id'] = $self[0]['id']; - } - else { - $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d LIMIT 1", - dbesc($cmnt->from->id), - intval($uid) - ); - if(count($r)) { - $cmntdata['contact-id'] = $r[0]['id']; - if($r[0]['blocked'] || $r[0]['readonly']) - continue; - } - } - if(! x($cmntdata,'contact-id')) - $cmntdata['contact-id'] = $orig_post['contact-id']; - - $cmntdata['app'] = 'facebook'; - $cmntdata['created'] = datetime_convert('UTC','UTC',$cmnt->created_time); - $cmntdata['edited'] = datetime_convert('UTC','UTC',$cmnt->created_time); - $cmntdata['verb'] = ACTIVITY_POST; - $cmntdata['author-name'] = $cmnt->from->name; - $cmntdata['author-link'] = 'http://facebook.com/profile.php?id=' . $cmnt->from->id; - $cmntdata['author-avatar'] = 'https://graph.facebook.com/' . $cmnt->from->id . '/picture'; - $cmntdata['body'] = $cmnt->message; - $item = item_store($cmntdata); - } - } - } -} - diff --git a/addon/fortunate/fortunate.css b/addon/fortunate/fortunate.css deleted file mode 100644 index 61813b7d7e..0000000000 --- a/addon/fortunate/fortunate.css +++ /dev/null @@ -1,7 +0,0 @@ -.fortunate { - margin-top: 25px; - margin-left: 100px; - margin-bottom: 25px; - color: #000088; - font-size: 14px; -} \ No newline at end of file diff --git a/addon/fortunate/fortunate.php b/addon/fortunate/fortunate.php deleted file mode 100644 index 5a6302e58d..0000000000 --- a/addon/fortunate/fortunate.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - - -function fortunate_install() { - register_hook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); -} - -function fortunate_uninstall() { - unregister_hook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); -} - - -function fortunate_fetch($a,&$b) { - - $a->page['htmlhead'] .= '' . "\r\n"; - - $s = fetch_url('http://fortunemod.com/cookie.php?numlines=2&equal=1&rand=' . mt_rand()); - $b .= '
' . $s . '
'; -} - diff --git a/addon/impressum/README b/addon/impressum/README deleted file mode 100644 index 9a38c0becc..0000000000 --- a/addon/impressum/README +++ /dev/null @@ -1,27 +0,0 @@ -Impressum Plugin for Friendika - -Author: Tobias Diekershoff - tobias.diekershoff@gmx.net - -License: 3-clause BSD license (same as Friendika) - -About - This plugin adds an Impressum block to the /friendika page with informations - about the page operator/owner and how to countact you in case of any questions. - - In the notes and postal fields you can use HTML tags for formatting. - -Configuration: - For configuration you can set the following variables in the .htconfig file - * $a->config['impressum']['owner'] this is the Name of the Operator - * $a->config['impressum']['ownerprofile'] this is an optional Friendika account - where the above owner name will link to - * $a->config['impressum']['email'] a contact email address (optional) - will be displayed slightly obfuscated - as name(at)example(dot)com - * $a->config['impressum']['postal'] should contain a postal address where - you can be reached at (optional) - * $a->config['impressum']['notes'] additional informations that should - be displayed in the Impressum block - - diff --git a/addon/impressum/admin.tpl b/addon/impressum/admin.tpl deleted file mode 100644 index cfba8df76d..0000000000 --- a/addon/impressum/admin.tpl +++ /dev/null @@ -1,6 +0,0 @@ -{{ inc field_input.tpl with $field=$owner }}{{ endinc }} -{{ inc field_input.tpl with $field=$ownerprofile }}{{ endinc }} -{{ inc field_input.tpl with $field=$postal }}{{ endinc }} -{{ inc field_input.tpl with $field=$notes }}{{ endinc }} -{{ inc field_input.tpl with $field=$email }}{{ endinc }} -
diff --git a/addon/impressum/impressum.php b/addon/impressum/impressum.php deleted file mode 100644 index b760c7e0d9..0000000000 --- a/addon/impressum/impressum.php +++ /dev/null @@ -1,76 +0,0 @@ - - * License: 3-clause BSD license - */ - -function impressum_install() { - register_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); - logger("installed impressum plugin"); -} - -function impressum_uninstall() { - unregister_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); - logger("uninstalled impressum plugin"); -} -function obfuscate_email ($s) { - $s = str_replace('@','(at)',$s); - $s = str_replace('.','(dot)',$s); - return $s; -} -function impressum_show($a,&$b) { - $b .= '

'.t('Impressum').'

'; - $owner = get_config('impressum', 'owner'); - $owner_profile = get_config('impressum','ownerprofile'); - $postal = get_config('impressum', 'postal'); - $notes = get_config('impressum', 'notes'); - $email = obfuscate_email( get_config('impressum','email') ); - if (strlen($owner)) { - if (strlen($owner_profile)) { - $tmp = ''.$owner.''; - } else { - $tmp = $owner; - } - if (strlen($email)) { - $b .= '

'.t('Site Owner').': '. $tmp .'
'.t('Email Address').': '.$email.'

'; - } else { - $b .= '

'.t('Site Owner').': '. $tmp .'

'; - } - if (strlen($postal)) { - $b .= '

'.t('Postal Address').'
'. $postal .'

'; - } - if (strlen($notes)) { - $b .= '

'.$notes.'

'; - } - } else { - $b .= '

'.t('The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon.').'

'; - } -} - -function impressum_plugin_admin_post (&$a) { - $owner = ((x($_POST, 'owner')) ? notags(trim($_POST['owner'])) : ''); - $ownerprofile = ((x($_POST, 'ownerprofile')) ? notags(trim($_POST['ownerprofile'])) : ''); - $postal = ((x($_POST, 'postal')) ? (trim($_POST['postal'])) : ''); - $notes = ((x($_POST, 'notes')) ? (trim($_POST['notes'])) : ''); - $email = ((x($_POST, 'email')) ? notags(trim($_POST['email'])) : ''); - set_config('impressum','owner',$owner); - set_config('impressum','ownerprofile',$ownerprofile); - set_config('impressum','postal',$postal); - set_config('impressum','email',$email); - set_config('impressum','notes',$notes); - info( t('Settings updated.'). EOL ); -} -function impressum_plugin_admin (&$a, &$o) { - $t = file_get_contents( dirname(__file__). "/admin.tpl" ); - $o = replace_macros($t, array( - '$submit' => t('Submit'), - '$owner' => array('owner', t('Site Owner'), get_config('impressum','owner'), ''), - '$ownerprofile' => array('ownerprofile', t('Site Owners Profile'), get_config('impressum','ownerprofile'), ''), - '$postal' => array('postal', t('Postal Address'), get_config('impressum','postal'), ''), - '$notes' => array('notes', t('Notes'), get_config('impressum','notes'), ''), - '$email' => array('email', t('Email Address'), get_config('impressum','email'), ''), - )); -} diff --git a/addon/js_upload/file-uploader/client/demo.htm b/addon/js_upload/file-uploader/client/demo.htm deleted file mode 100644 index 2a0cd6d305..0000000000 --- a/addon/js_upload/file-uploader/client/demo.htm +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - -

Back to project page

- -

To upload a file, click on the button below. Drag-and-drop is supported in FF, Chrome.

-

Progress-bar is supported in FF3.6+, Chrome6+, Safari4+

- -
- -
- - - - - \ No newline at end of file diff --git a/addon/js_upload/file-uploader/client/do-nothing.htm b/addon/js_upload/file-uploader/client/do-nothing.htm deleted file mode 100644 index 0da19059da..0000000000 --- a/addon/js_upload/file-uploader/client/do-nothing.htm +++ /dev/null @@ -1 +0,0 @@ -{success:true} diff --git a/addon/js_upload/file-uploader/client/fileuploader.css b/addon/js_upload/file-uploader/client/fileuploader.css deleted file mode 100644 index 0e3f111a91..0000000000 --- a/addon/js_upload/file-uploader/client/fileuploader.css +++ /dev/null @@ -1,31 +0,0 @@ -.qq-uploader { position:relative; width: 100%;} - -.qq-upload-button { - display:block; /* or inline-block */ - width: 105px; padding: 7px 0; text-align:center; - background:#880000; border-bottom:1px solid #ddd;color:#fff; -} -.qq-upload-button-hover {background:#cc0000;} -.qq-upload-button-focus {outline:1px dotted black;} - -.qq-upload-drop-area { - position:absolute; top:0; left:0; width:100%; height:100%; min-height: 70px; z-index:2; - background:#FF9797; text-align:center; -} -.qq-upload-drop-area span { - display:block; position:absolute; top: 50%; width:100%; margin-top:-8px; font-size:16px; -} -.qq-upload-drop-area-active {background:#FF7171;} - -.qq-upload-list {margin:15px 35px; padding:0; list-style:disc;} -.qq-upload-list li { margin:0; padding:0; line-height:15px; font-size:12px;} -.qq-upload-file, .qq-upload-spinner, .qq-upload-size, .qq-upload-cancel, .qq-upload-failed-text { - margin-right: 7px; -} - -.qq-upload-file {} -.qq-upload-spinner {display:inline-block; background: url("loading.gif"); width:15px; height:15px; vertical-align:text-bottom;} -.qq-upload-size,.qq-upload-cancel {font-size:11px;} - -.qq-upload-failed-text {display:none;} -.qq-upload-fail .qq-upload-failed-text {display:inline;} \ No newline at end of file diff --git a/addon/js_upload/file-uploader/client/fileuploader.js b/addon/js_upload/file-uploader/client/fileuploader.js deleted file mode 100644 index 89c09ebf50..0000000000 --- a/addon/js_upload/file-uploader/client/fileuploader.js +++ /dev/null @@ -1,1247 +0,0 @@ -/** - * http://github.com/valums/file-uploader - * - * Multiple file upload component with progress-bar, drag-and-drop. - * © 2010 Andrew Valums ( andrew(at)valums.com ) - * - * Licensed under GNU GPL 2 or later, see license.txt. - */ - -// -// Helper functions -// - -var qq = qq || {}; - -/** - * Adds all missing properties from second obj to first obj - */ -qq.extend = function(first, second){ - for (var prop in second){ - first[prop] = second[prop]; - } -}; - -/** - * Searches for a given element in the array, returns -1 if it is not present. - * @param {Number} [from] The index at which to begin the search - */ -qq.indexOf = function(arr, elt, from){ - if (arr.indexOf) return arr.indexOf(elt, from); - - from = from || 0; - var len = arr.length; - - if (from < 0) from += len; - - for (; from < len; from++){ - if (from in arr && arr[from] === elt){ - return from; - } - } - return -1; -}; - -qq.getUniqueId = (function(){ - var id = 0; - return function(){ return id++; }; -})(); - -// -// Events - -qq.attach = function(element, type, fn){ - if (element.addEventListener){ - element.addEventListener(type, fn, false); - } else if (element.attachEvent){ - element.attachEvent('on' + type, fn); - } -}; -qq.detach = function(element, type, fn){ - if (element.removeEventListener){ - element.removeEventListener(type, fn, false); - } else if (element.attachEvent){ - element.detachEvent('on' + type, fn); - } -}; - -qq.preventDefault = function(e){ - if (e.preventDefault){ - e.preventDefault(); - } else{ - e.returnValue = false; - } -}; - -// -// Node manipulations - -/** - * Insert node a before node b. - */ -qq.insertBefore = function(a, b){ - b.parentNode.insertBefore(a, b); -}; -qq.remove = function(element){ - element.parentNode.removeChild(element); -}; - -qq.contains = function(parent, descendant){ - // compareposition returns false in this case - if (parent == descendant) return true; - - if (parent.contains){ - return parent.contains(descendant); - } else { - return !!(descendant.compareDocumentPosition(parent) & 8); - } -}; - -/** - * Creates and returns element from html string - * Uses innerHTML to create an element - */ -qq.toElement = (function(){ - var div = document.createElement('div'); - return function(html){ - div.innerHTML = html; - var element = div.firstChild; - div.removeChild(element); - return element; - }; -})(); - -// -// Node properties and attributes - -/** - * Sets styles for an element. - * Fixes opacity in IE6-8. - */ -qq.css = function(element, styles){ - if (styles.opacity != null){ - if (typeof element.style.opacity != 'string' && typeof(element.filters) != 'undefined'){ - styles.filter = 'alpha(opacity=' + Math.round(100 * styles.opacity) + ')'; - } - } - qq.extend(element.style, styles); -}; -qq.hasClass = function(element, name){ - var re = new RegExp('(^| )' + name + '( |$)'); - return re.test(element.className); -}; -qq.addClass = function(element, name){ - if (!qq.hasClass(element, name)){ - element.className += ' ' + name; - } -}; -qq.removeClass = function(element, name){ - var re = new RegExp('(^| )' + name + '( |$)'); - element.className = element.className.replace(re, ' ').replace(/^\s+|\s+$/g, ""); -}; -qq.setText = function(element, text){ - element.innerText = text; - element.textContent = text; -}; - -// -// Selecting elements - -qq.children = function(element){ - var children = [], - child = element.firstChild; - - while (child){ - if (child.nodeType == 1){ - children.push(child); - } - child = child.nextSibling; - } - - return children; -}; - -qq.getByClass = function(element, className){ - if (element.querySelectorAll){ - return element.querySelectorAll('.' + className); - } - - var result = []; - var candidates = element.getElementsByTagName("*"); - var len = candidates.length; - - for (var i = 0; i < len; i++){ - if (qq.hasClass(candidates[i], className)){ - result.push(candidates[i]); - } - } - return result; -}; - -/** - * obj2url() takes a json-object as argument and generates - * a querystring. pretty much like jQuery.param() - * - * how to use: - * - * `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');` - * - * will result in: - * - * `http://any.url/upload?otherParam=value&a=b&c=d` - * - * @param Object JSON-Object - * @param String current querystring-part - * @return String encoded querystring - */ -qq.obj2url = function(obj, temp, prefixDone){ - var uristrings = [], - prefix = '&', - add = function(nextObj, i){ - var nextTemp = temp - ? (/\[\]$/.test(temp)) // prevent double-encoding - ? temp - : temp+'['+i+']' - : i; - if ((nextTemp != 'undefined') && (i != 'undefined')) { - uristrings.push( - (typeof nextObj === 'object') - ? qq.obj2url(nextObj, nextTemp, true) - : (Object.prototype.toString.call(nextObj) === '[object Function]') - ? encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj()) - : encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj) - ); - } - }; - - if (!prefixDone && temp) { - prefix = (/\?/.test(temp)) ? (/\?$/.test(temp)) ? '' : '&' : '?'; - uristrings.push(temp); - uristrings.push(qq.obj2url(obj)); - } else if ((Object.prototype.toString.call(obj) === '[object Array]') && (typeof obj != 'undefined') ) { - // we wont use a for-in-loop on an array (performance) - for (var i = 0, len = obj.length; i < len; ++i){ - add(obj[i], i); - } - } else if ((typeof obj != 'undefined') && (obj !== null) && (typeof obj === "object")){ - // for anything else but a scalar, we will use for-in-loop - for (var i in obj){ - add(obj[i], i); - } - } else { - uristrings.push(encodeURIComponent(temp) + '=' + encodeURIComponent(obj)); - } - - return uristrings.join(prefix) - .replace(/^&/, '') - .replace(/%20/g, '+'); -}; - -// -// -// Uploader Classes -// -// - -var qq = qq || {}; - -/** - * Creates upload button, validates upload, but doesn't create file list or dd. - */ -qq.FileUploaderBasic = function(o){ - this._options = { - // set to true to see the server response - debug: false, - action: '/server/upload', - params: {}, - button: null, - multiple: true, - maxConnections: 3, - // validation - allowedExtensions: [], - sizeLimit: 0, - minSizeLimit: 0, - // events - // return false to cancel submit - onSubmit: function(id, fileName){}, - onProgress: function(id, fileName, loaded, total){}, - onComplete: function(id, fileName, responseJSON){}, - onCancel: function(id, fileName){}, - // messages - messages: { - typeError: "{file} has invalid extension. Only {extensions} are allowed.", - sizeError: "{file} is too large, maximum file size is {sizeLimit}.", - minSizeError: "{file} is too small, minimum file size is {minSizeLimit}.", - emptyError: "{file} is empty, please select files again without it.", - onLeave: "The files are being uploaded, if you leave now the upload will be cancelled." - }, - showMessage: function(message){ - alert(message); - } - }; - qq.extend(this._options, o); - - // number of files being uploaded - this._filesInProgress = 0; - this._handler = this._createUploadHandler(); - - if (this._options.button){ - this._button = this._createUploadButton(this._options.button); - } - - this._preventLeaveInProgress(); -}; - -qq.FileUploaderBasic.prototype = { - setParams: function(params){ - this._options.params = params; - }, - getInProgress: function(){ - return this._filesInProgress; - }, - _createUploadButton: function(element){ - var self = this; - - return new qq.UploadButton({ - element: element, - multiple: this._options.multiple && qq.UploadHandlerXhr.isSupported(), - onChange: function(input){ - self._onInputChange(input); - } - }); - }, - _createUploadHandler: function(){ - var self = this, - handlerClass; - - if(qq.UploadHandlerXhr.isSupported()){ - handlerClass = 'UploadHandlerXhr'; - } else { - handlerClass = 'UploadHandlerForm'; - } - - var handler = new qq[handlerClass]({ - debug: this._options.debug, - action: this._options.action, - maxConnections: this._options.maxConnections, - onProgress: function(id, fileName, loaded, total){ - self._onProgress(id, fileName, loaded, total); - self._options.onProgress(id, fileName, loaded, total); - }, - onComplete: function(id, fileName, result){ - self._onComplete(id, fileName, result); - self._options.onComplete(id, fileName, result); - }, - onCancel: function(id, fileName){ - self._onCancel(id, fileName); - self._options.onCancel(id, fileName); - } - }); - - return handler; - }, - _preventLeaveInProgress: function(){ - var self = this; - - qq.attach(window, 'beforeunload', function(e){ - if (!self._filesInProgress){return;} - - var e = e || window.event; - // for ie, ff - e.returnValue = self._options.messages.onLeave; - // for webkit - return self._options.messages.onLeave; - }); - }, - _onSubmit: function(id, fileName){ - this._filesInProgress++; - }, - _onProgress: function(id, fileName, loaded, total){ - }, - _onComplete: function(id, fileName, result){ - this._filesInProgress--; - if (result.error){ - this._options.showMessage(result.error); - } - }, - _onCancel: function(id, fileName){ - this._filesInProgress--; - }, - _onInputChange: function(input){ - if (this._handler instanceof qq.UploadHandlerXhr){ - this._uploadFileList(input.files); - } else { - if (this._validateFile(input)){ - this._uploadFile(input); - } - } - this._button.reset(); - }, - _uploadFileList: function(files){ - for (var i=0; i this._options.sizeLimit){ - this._error('sizeError', name); - return false; - - } else if (size && size < this._options.minSizeLimit){ - this._error('minSizeError', name); - return false; - } - - return true; - }, - _error: function(code, fileName){ - var message = this._options.messages[code]; - function r(name, replacement){ message = message.replace(name, replacement); } - - r('{file}', this._formatFileName(fileName)); - r('{extensions}', this._options.allowedExtensions.join(', ')); - r('{sizeLimit}', this._formatSize(this._options.sizeLimit)); - r('{minSizeLimit}', this._formatSize(this._options.minSizeLimit)); - - this._options.showMessage(message); - }, - _formatFileName: function(name){ - if (name.length > 33){ - name = name.slice(0, 19) + '...' + name.slice(-13); - } - return name; - }, - _isAllowedExtension: function(fileName){ - var ext = (-1 !== fileName.indexOf('.')) ? fileName.replace(/.*[.]/, '').toLowerCase() : ''; - var allowed = this._options.allowedExtensions; - - if (!allowed.length){return true;} - - for (var i=0; i 99); - - return Math.max(bytes, 0.1).toFixed(1) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i]; - } -}; - - -/** - * Class that creates upload widget with drag-and-drop and file list - * @inherits qq.FileUploaderBasic - */ -qq.FileUploader = function(o){ - // call parent constructor - qq.FileUploaderBasic.apply(this, arguments); - - // additional options - qq.extend(this._options, { - element: null, - // if set, will be used instead of qq-upload-list in template - listElement: null, - - template: '
' + - '
Drop files here to upload
' + - '
Upload a file
' + - '
    ' + - '
    ', - - // template for one item in file list - fileTemplate: '
  • ' + - '' + - '' + - '' + - 'Cancel' + - 'Failed' + - '
  • ', - - classes: { - // used to get elements from templates - button: 'qq-upload-button', - drop: 'qq-upload-drop-area', - dropActive: 'qq-upload-drop-area-active', - list: 'qq-upload-list', - - file: 'qq-upload-file', - spinner: 'qq-upload-spinner', - size: 'qq-upload-size', - cancel: 'qq-upload-cancel', - - // added to list item when upload completes - // used in css to hide progress spinner - success: 'qq-upload-success', - fail: 'qq-upload-fail' - } - }); - // overwrite options with user supplied - qq.extend(this._options, o); - - this._element = this._options.element; - this._element.innerHTML = this._options.template; - this._listElement = this._options.listElement || this._find(this._element, 'list'); - - this._classes = this._options.classes; - - this._button = this._createUploadButton(this._find(this._element, 'button')); - - this._bindCancelEvent(); - this._setupDragDrop(); -}; - -// inherit from Basic Uploader -qq.extend(qq.FileUploader.prototype, qq.FileUploaderBasic.prototype); - -qq.extend(qq.FileUploader.prototype, { - /** - * Gets one of the elements listed in this._options.classes - **/ - _find: function(parent, type){ - var element = qq.getByClass(parent, this._options.classes[type])[0]; - if (!element){ - throw new Error('element not found ' + type); - } - - return element; - }, - _setupDragDrop: function(){ - var self = this, - dropArea = this._find(this._element, 'drop'); - - var dz = new qq.UploadDropZone({ - element: dropArea, - onEnter: function(e){ - qq.addClass(dropArea, self._classes.dropActive); - e.stopPropagation(); - }, - onLeave: function(e){ - e.stopPropagation(); - }, - onLeaveNotDescendants: function(e){ - qq.removeClass(dropArea, self._classes.dropActive); - }, - onDrop: function(e){ - dropArea.style.display = 'none'; - qq.removeClass(dropArea, self._classes.dropActive); - self._uploadFileList(e.dataTransfer.files); - } - }); - - dropArea.style.display = 'none'; - - qq.attach(document, 'dragenter', function(e){ - if (!dz._isValidFileDrag(e)) return; - - dropArea.style.display = 'block'; - }); - qq.attach(document, 'dragleave', function(e){ - if (!dz._isValidFileDrag(e)) return; - - var relatedTarget = document.elementFromPoint(e.clientX, e.clientY); - // only fire when leaving document out - if ( ! relatedTarget || relatedTarget.nodeName == "HTML"){ - dropArea.style.display = 'none'; - } - }); - }, - _onSubmit: function(id, fileName){ - qq.FileUploaderBasic.prototype._onSubmit.apply(this, arguments); - this._addToList(id, fileName); - }, - _onProgress: function(id, fileName, loaded, total){ - qq.FileUploaderBasic.prototype._onProgress.apply(this, arguments); - - var item = this._getItemByFileId(id); - var size = this._find(item, 'size'); - size.style.display = 'inline'; - - var text; - if (loaded != total){ - text = Math.round(loaded / total * 100) + '% from ' + this._formatSize(total); - } else { - text = this._formatSize(total); - } - - qq.setText(size, text); - }, - _onComplete: function(id, fileName, result){ - qq.FileUploaderBasic.prototype._onComplete.apply(this, arguments); - - // mark completed - var item = this._getItemByFileId(id); - qq.remove(this._find(item, 'cancel')); - qq.remove(this._find(item, 'spinner')); - - if (result.success){ - qq.addClass(item, this._classes.success); - } else { - qq.addClass(item, this._classes.fail); - } - }, - _addToList: function(id, fileName){ - var item = qq.toElement(this._options.fileTemplate); - item.qqFileId = id; - - var fileElement = this._find(item, 'file'); - qq.setText(fileElement, this._formatFileName(fileName)); - this._find(item, 'size').style.display = 'none'; - - this._listElement.appendChild(item); - }, - _getItemByFileId: function(id){ - var item = this._listElement.firstChild; - - // there can't be txt nodes in dynamically created list - // and we can use nextSibling - while (item){ - if (item.qqFileId == id) return item; - item = item.nextSibling; - } - }, - /** - * delegate click event for cancel link - **/ - _bindCancelEvent: function(){ - var self = this, - list = this._listElement; - - qq.attach(list, 'click', function(e){ - e = e || window.event; - var target = e.target || e.srcElement; - - if (qq.hasClass(target, self._classes.cancel)){ - qq.preventDefault(e); - - var item = target.parentNode; - self._handler.cancel(item.qqFileId); - qq.remove(item); - } - }); - } -}); - -qq.UploadDropZone = function(o){ - this._options = { - element: null, - onEnter: function(e){}, - onLeave: function(e){}, - // is not fired when leaving element by hovering descendants - onLeaveNotDescendants: function(e){}, - onDrop: function(e){} - }; - qq.extend(this._options, o); - - this._element = this._options.element; - - this._disableDropOutside(); - this._attachEvents(); -}; - -qq.UploadDropZone.prototype = { - _disableDropOutside: function(e){ - // run only once for all instances - if (!qq.UploadDropZone.dropOutsideDisabled ){ - - qq.attach(document, 'dragover', function(e){ - if (e.dataTransfer){ - e.dataTransfer.dropEffect = 'none'; - e.preventDefault(); - } - }); - - qq.UploadDropZone.dropOutsideDisabled = true; - } - }, - _attachEvents: function(){ - var self = this; - - qq.attach(self._element, 'dragover', function(e){ - if (!self._isValidFileDrag(e)) return; - - var effect = e.dataTransfer.effectAllowed; - if (effect == 'move' || effect == 'linkMove'){ - e.dataTransfer.dropEffect = 'move'; // for FF (only move allowed) - } else { - e.dataTransfer.dropEffect = 'copy'; // for Chrome - } - - e.stopPropagation(); - e.preventDefault(); - }); - - qq.attach(self._element, 'dragenter', function(e){ - if (!self._isValidFileDrag(e)) return; - - self._options.onEnter(e); - }); - - qq.attach(self._element, 'dragleave', function(e){ - if (!self._isValidFileDrag(e)) return; - - self._options.onLeave(e); - - var relatedTarget = document.elementFromPoint(e.clientX, e.clientY); - // do not fire when moving a mouse over a descendant - if (qq.contains(this, relatedTarget)) return; - - self._options.onLeaveNotDescendants(e); - }); - - qq.attach(self._element, 'drop', function(e){ - if (!self._isValidFileDrag(e)) return; - - e.preventDefault(); - self._options.onDrop(e); - }); - }, - _isValidFileDrag: function(e){ - var dt = e.dataTransfer, - // do not check dt.types.contains in webkit, because it crashes safari 4 - isWebkit = navigator.userAgent.indexOf("AppleWebKit") > -1; - - // dt.effectAllowed is none in Safari 5 - // dt.types.contains check is for firefox - return dt && dt.effectAllowed != 'none' && - (dt.files || (!isWebkit && dt.types.contains && dt.types.contains('Files'))); - - } -}; - -qq.UploadButton = function(o){ - this._options = { - element: null, - // if set to true adds multiple attribute to file input - multiple: false, - // name attribute of file input - name: 'file', - onChange: function(input){}, - hoverClass: 'qq-upload-button-hover', - focusClass: 'qq-upload-button-focus' - }; - - qq.extend(this._options, o); - - this._element = this._options.element; - - // make button suitable container for input - qq.css(this._element, { - position: 'relative', - overflow: 'hidden', - // Make sure browse button is in the right side - // in Internet Explorer - direction: 'ltr' - }); - - this._input = this._createInput(); -}; - -qq.UploadButton.prototype = { - /* returns file input element */ - getInput: function(){ - return this._input; - }, - /* cleans/recreates the file input */ - reset: function(){ - if (this._input.parentNode){ - qq.remove(this._input); - } - - qq.removeClass(this._element, this._options.focusClass); - this._input = this._createInput(); - }, - _createInput: function(){ - var input = document.createElement("input"); - - if (this._options.multiple){ - input.setAttribute("multiple", "multiple"); - } - - input.setAttribute("type", "file"); - input.setAttribute("name", this._options.name); - - qq.css(input, { - position: 'absolute', - // in Opera only 'browse' button - // is clickable and it is located at - // the right side of the input - right: 0, - top: 0, - fontFamily: 'Arial', - // 4 persons reported this, the max values that worked for them were 243, 236, 236, 118 - fontSize: '118px', - margin: 0, - padding: 0, - cursor: 'pointer', - opacity: 0 - }); - - this._element.appendChild(input); - - var self = this; - qq.attach(input, 'change', function(){ - self._options.onChange(input); - }); - - qq.attach(input, 'mouseover', function(){ - qq.addClass(self._element, self._options.hoverClass); - }); - qq.attach(input, 'mouseout', function(){ - qq.removeClass(self._element, self._options.hoverClass); - }); - qq.attach(input, 'focus', function(){ - qq.addClass(self._element, self._options.focusClass); - }); - qq.attach(input, 'blur', function(){ - qq.removeClass(self._element, self._options.focusClass); - }); - - // IE and Opera, unfortunately have 2 tab stops on file input - // which is unacceptable in our case, disable keyboard access - if (window.attachEvent){ - // it is IE or Opera - input.setAttribute('tabIndex', "-1"); - } - - return input; - } -}; - -/** - * Class for uploading files, uploading itself is handled by child classes - */ -qq.UploadHandlerAbstract = function(o){ - this._options = { - debug: false, - action: '/upload.php', - // maximum number of concurrent uploads - maxConnections: 999, - onProgress: function(id, fileName, loaded, total){}, - onComplete: function(id, fileName, response){}, - onCancel: function(id, fileName){} - }; - qq.extend(this._options, o); - - this._queue = []; - // params for files in queue - this._params = []; -}; -qq.UploadHandlerAbstract.prototype = { - log: function(str){ - if (this._options.debug && window.console) console.log('[uploader] ' + str); - }, - /** - * Adds file or file input to the queue - * @returns id - **/ - add: function(file){}, - /** - * Sends the file identified by id and additional query params to the server - */ - upload: function(id, params){ - var len = this._queue.push(id); - - var copy = {}; - qq.extend(copy, params); - this._params[id] = copy; - - // if too many active uploads, wait... - if (len <= this._options.maxConnections){ - this._upload(id, this._params[id]); - } - }, - /** - * Cancels file upload by id - */ - cancel: function(id){ - this._cancel(id); - this._dequeue(id); - }, - /** - * Cancells all uploads - */ - cancelAll: function(){ - for (var i=0; i= max){ - var nextId = this._queue[max-1]; - this._upload(nextId, this._params[nextId]); - } - } -}; - -/** - * Class for uploading files using form and iframe - * @inherits qq.UploadHandlerAbstract - */ -qq.UploadHandlerForm = function(o){ - qq.UploadHandlerAbstract.apply(this, arguments); - - this._inputs = {}; -}; -// @inherits qq.UploadHandlerAbstract -qq.extend(qq.UploadHandlerForm.prototype, qq.UploadHandlerAbstract.prototype); - -qq.extend(qq.UploadHandlerForm.prototype, { - add: function(fileInput){ - fileInput.setAttribute('name', 'qqfile'); - var id = 'qq-upload-handler-iframe' + qq.getUniqueId(); - - this._inputs[id] = fileInput; - - // remove file input from DOM - if (fileInput.parentNode){ - qq.remove(fileInput); - } - - return id; - }, - getName: function(id){ - // get input value and remove path to normalize - return this._inputs[id].value.replace(/.*(\/|\\)/, ""); - }, - _cancel: function(id){ - this._options.onCancel(id, this.getName(id)); - - delete this._inputs[id]; - - var iframe = document.getElementById(id); - if (iframe){ - // to cancel request set src to something else - // we use src="javascript:false;" because it doesn't - // trigger ie6 prompt on https - iframe.setAttribute('src', 'javascript:false;'); - - qq.remove(iframe); - } - }, - _upload: function(id, params){ - var input = this._inputs[id]; - - if (!input){ - throw new Error('file with passed id was not added, or already uploaded or cancelled'); - } - - var fileName = this.getName(id); - - var iframe = this._createIframe(id); - var form = this._createForm(iframe, params); - form.appendChild(input); - - var self = this; - this._attachLoadEvent(iframe, function(){ - self.log('iframe loaded'); - - var response = self._getIframeContentJSON(iframe); - - self._options.onComplete(id, fileName, response); - self._dequeue(id); - - delete self._inputs[id]; - // timeout added to fix busy state in FF3.6 - setTimeout(function(){ - qq.remove(iframe); - }, 1); - }); - - form.submit(); - qq.remove(form); - - return id; - }, - _attachLoadEvent: function(iframe, callback){ - qq.attach(iframe, 'load', function(){ - // when we remove iframe from dom - // the request stops, but in IE load - // event fires - if (!iframe.parentNode){ - return; - } - - // fixing Opera 10.53 - if (iframe.contentDocument && - iframe.contentDocument.body && - iframe.contentDocument.body.innerHTML == "false"){ - // In Opera event is fired second time - // when body.innerHTML changed from false - // to server response approx. after 1 sec - // when we upload file with iframe - return; - } - - callback(); - }); - }, - /** - * Returns json object received by iframe from server. - */ - _getIframeContentJSON: function(iframe){ - // iframe.contentWindow.document - for IE<7 - var doc = iframe.contentDocument ? iframe.contentDocument: iframe.contentWindow.document, - response; - - this.log("converting iframe's innerHTML to JSON"); - this.log("innerHTML = " + doc.body.innerHTML); - - try { - response = eval("(" + doc.body.innerHTML + ")"); - } catch(err){ - response = {}; - } - - return response; - }, - /** - * Creates iframe with unique name - */ - _createIframe: function(id){ - // We can't use following code as the name attribute - // won't be properly registered in IE6, and new window - // on form submit will open - // var iframe = document.createElement('iframe'); - // iframe.setAttribute('name', id); - - var iframe = qq.toElement('#s', + '[youtube]$1[/youtube]', $txt); + + $config = HTMLPurifier_Config::createDefault(); + $config->set('Cache.DefinitionImpl', null); + + + $purifier = new HTMLPurifier($config); + $txt = $purifier->purify($txt); + + $_POST['body'] = html2bbcode($txt); + } + + } + else + $_POST['body'] = urldecode(requestdata('status')); $parent = requestdata('in_reply_to_status_id'); if(ctype_digit($parent)) @@ -616,6 +650,7 @@ $user_info = api_get_user($a); // get last newtork messages + // params $count = (x($_REQUEST,'count')?$_REQUEST['count']:20); $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0); @@ -664,6 +699,12 @@ $user_info = api_get_user($a); // get last newtork messages + + logger("api_statuses_user_timeline: local_user: ". local_user() . + "\nuser_info: ".print_r($user_info, true) . + "\n_REQUEST: ".print_r($_REQUEST, true), + LOGGER_DEBUG); + // params $count = (x($_REQUEST,'count')?$_REQUEST['count']:20); $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0); @@ -672,6 +713,7 @@ $start = $page*$count; + if ($user_info['self']==1) $sql_extra = "AND `item`.`wall` = 1 "; $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, @@ -679,14 +721,15 @@ `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` FROM `item`, `contact` WHERE `item`.`uid` = %d + AND `item`.`contact-id` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 - AND `item`.`wall` = 1 AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra AND `item`.`id`>%d ORDER BY `item`.`received` DESC LIMIT %d ,%d ", - intval($user_info['uid']), + intval(local_user()), + intval($user_info['id']), intval($since_id), intval($start), intval($count) ); @@ -711,33 +754,41 @@ if (local_user()===false) return false; $user_info = api_get_user($a); - // get last newtork messages + // in friendika starred item are private + // return favorites only for self + logger('api_favorites: self:' . $user_info['self']); - // params - $count = (x($_GET,'count')?$_GET['count']:20); - $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0); - if ($page<0) $page=0; + if ($user_info['self']==0) { + $ret = array(); + } else { + + + // params + $count = (x($_GET,'count')?$_GET['count']:20); + $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0); + if ($page<0) $page=0; + + $start = $page*$count; + + $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, + `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, + `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, + `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` + FROM `item`, `contact` + WHERE `item`.`uid` = %d + AND `item`.`visible` = 1 AND `item`.`deleted` = 0 + AND `item`.`starred` = 1 + AND `contact`.`id` = `item`.`contact-id` + AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 + $sql_extra + ORDER BY `item`.`received` DESC LIMIT %d ,%d ", + intval($user_info['uid']), + intval($start), intval($count) + ); + + $ret = api_format_items($r,$user_info); - $start = $page*$count; - - $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, - `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, - `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, - `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` - FROM `item`, `contact` - WHERE `item`.`uid` = %d - AND `item`.`visible` = 1 AND `item`.`deleted` = 0 - AND `item`.`starred` = 1 - AND `contact`.`id` = `item`.`contact-id` - AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 - $sql_extra - ORDER BY `item`.`received` DESC LIMIT %d ,%d ", - intval($user_info['uid']), - intval($start), intval($count) - ); - - $ret = api_format_items($r,$user_info); - + } $data = array('$statuses' => $ret); switch($type){ @@ -762,6 +813,7 @@ $ret = Array(); foreach($r as $item) { + localize_item($item); $status_user = (($item['cid']==$user_info['id'])?$user_info: api_item_get_user($a,$item)); $status = array( 'created_at'=> api_date($item['created']), @@ -819,15 +871,21 @@ if (local_user()===false) return false; $user_info = api_get_user($a); + + // friends and followers only for self + if ($user_info['self']==0){ + return false; + } + if (x($_GET,'cursor') && $_GET['cursor']=='undefined'){ /* this is to stop Hotot to load friends multiple times * I'm not sure if I'm missing return something or * is a bug in hotot. Workaround, meantime */ - $ret=Array(); - $data = array('$users' => $ret); - return api_apply_template("friends", $type, $data); + /*$ret=Array(); + return array('$users' => $ret);*/ + return false; } if($qtype == 'friends') @@ -845,15 +903,18 @@ } - $data = array('$users' => $ret); - return api_apply_template("friends", $type, $data); + return array('$users' => $ret); } function api_statuses_friends(&$a, $type){ - return api_statuses_f($a,$type,"friends"); + $data = api_statuses_f($a,$type,"friends"); + if ($data===false) return false; + return api_apply_template("friends", $type, $data); } function api_statuses_followers(&$a, $type){ - return api_statuses_f($a,$type,"followers"); + $data = api_statuses_f($a,$type,"followers"); + if ($data===false) return false; + return api_apply_template("friends", $type, $data); } api_register_func('api/statuses/friends','api_statuses_friends',true); api_register_func('api/statuses/followers','api_statuses_followers',true); diff --git a/include/auth.php b/include/auth.php index 768af626fb..1f16b35047 100644 --- a/include/auth.php +++ b/include/auth.php @@ -48,7 +48,8 @@ if((isset($_SESSION)) && (x($_SESSION,'authenticated')) && ((! (x($_POST,'auth-p goaway(z_root()); } - $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", + $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` + FROM `user` WHERE `uid` = %d AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1", intval($_SESSION['uid']) ); @@ -183,8 +184,9 @@ else { // process normal login request - $r = q("SELECT * FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' ) - AND `password` = '%s' AND `blocked` = 0 AND `verified` = 1 LIMIT 1", + $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` + FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' ) + AND `password` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1", dbesc(trim($_POST['openid_url'])), dbesc(trim($_POST['openid_url'])), dbesc($encrypted) diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index 5ce34d6660..c72c784453 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -3,6 +3,21 @@ require_once("include/oembed.php"); require_once('include/event.php'); +require_once('library/markdown.php'); +require_once('include/html2bbcode.php'); + +function diaspora2bb($s) { + + $s = preg_replace('/\@\{(.+?)\; (.+?)\@(.+?)\}/','@[url=https://$3/u/$2]$1[/url]',$s); + $s = Markdown($s); + $s = html2bbcode($s); + +// $s = preg_replace('/\[url=(.+?)\(.+?)\]/ism','[url=$1_$2]',$s); +// $s = preg_replace('/\[url=(.+?)\<\/em\>(.+?)\]/ism','[url=$1_$2]',$s); + + return $s; + +} function stripdcode_br_cb($s) { @@ -15,12 +30,18 @@ function stripdcode_br_cb($s) { function bb2diaspora($Text,$preserve_nl = false) { + $ev = bbtoevent($Text); + // Replace any html brackets with HTML Entities to prevent executing HTML or script // Don't use strip_tags here because it breaks [url] search by replacing & with amp $Text = str_replace("<", "<", $Text); $Text = str_replace(">", ">", $Text); + // If we find any event code, turn it into an event. + // After we're finished processing the bbcode we'll + // replace all of the event code with a reformatted version. + if($preserve_nl) $Text = str_replace(array("\n","\r"), array('',''),$Text); @@ -35,8 +56,9 @@ function bb2diaspora($Text,$preserve_nl = false) { // [img]pathtoimage[/img] - $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/", '[$1]($1)', $Text); - $Text = preg_replace("(\[url\=([$URLSearchString]*)\](.*?)\[/url\])", '[$2]($1)', $Text); + $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '[$1]($1)', $Text); + $Text = preg_replace("/\#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[#$2]($1)', $Text); + $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[$2]($1)', $Text); // $Text = preg_replace("/\[img\](.*?)\[\/img\]/", t('Image/photo: ') . '$1', $Text); // $Text = preg_replace("/\[img\](.*?)\[\/img\]/", t('image/photo'), $Text); @@ -137,23 +159,60 @@ function bb2diaspora($Text,$preserve_nl = false) { // oembed tag -// $Text = oembed_bbcode2html($Text); + // $Text = oembed_bbcode2html($Text); // If we found an event earlier, strip out all the event code and replace with a reformatted version. -// if(x($ev,'desc') && x($ev,'start')) { -// $sub = format_event_html($ev); + if(x($ev,'desc') && x($ev,'start')) { - // $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",$sub,$Text); - //$Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",'',$Text); -// $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text); -// $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/is",'',$Text); -// $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",'',$Text); -// } + $sub = format_event_diaspora($ev); + + $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",$sub,$Text); + $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",'',$Text); + $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text); + $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/is",'',$Text); + $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",'',$Text); + } + $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text); + $Text = preg_replace('/\[(.*?)\]\((.*?)\\\\_(.*?)\)/ism','[$1]($2_$3)',$Text); call_hooks('bb2diaspora',$Text); return $Text; } + +function format_event_diaspora($ev) { + + if(! ((is_array($ev)) && count($ev))) + return ''; + + $bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM + + $o = 'Friendika event notification:' . "\n"; + + $o .= '**' . bb2diaspora($ev['desc']) . '**' . "\n"; + + $o .= t('Starts:') . ' ' + . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC', + $ev['start'] , $bd_format )) + : day_translate(datetime_convert('UTC', 'UTC', + $ev['start'] , $bd_format))) + . "\n"; + + if(! $ev['nofinish']) + $o .= t('Finishes:') . ' ' + . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC', + $ev['finish'] , $bd_format )) + : day_translate(datetime_convert('UTC', 'UTC', + $ev['finish'] , $bd_format ))) + . "\n"; + + if(strlen($ev['location'])) + $o .= t('Location:') . bb2diaspora($ev['location']) + . "\n"; + + $o .= "\n"; + return $o; +} diff --git a/include/bbcode.php b/include/bbcode.php index 3619015ca9..9abc7c4396 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -15,6 +15,13 @@ function stripcode_br_cb($s) { function bbcode($Text,$preserve_nl = false) { + // If we find any event code, turn it into an event. + // After we're finished processing the bbcode we'll + // replace all of the event code with a reformatted version. + + $ev = bbtoevent($Text); + + // Replace any html brackets with HTML Entities to prevent executing HTML or script // Don't use strip_tags here because it breaks [url] search by replacing & with amp @@ -27,11 +34,6 @@ function bbcode($Text,$preserve_nl = false) { if($preserve_nl) $Text = str_replace(array("\n","\r"), array('',''),$Text); - // If we find any event code, turn it into an event. - // After we're finished processing the bbcode we'll - // replace all of the event code with a reformatted version. - - $ev = bbtoevent($Text); // Set up the parameters for a URL search string $URLSearchString = "^\[\]"; @@ -41,67 +43,67 @@ function bbcode($Text,$preserve_nl = false) { // Perform URL Search - $Text = preg_replace("/([^\]\=]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%\$\!\+\,]+)/", ' $2', $Text); + $Text = preg_replace("/([^\]\=]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1$2', $Text); - $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/", '$1', $Text); - $Text = preg_replace("(\[url\=([$URLSearchString]*)\](.*?)\[/url\])", '$2', $Text); - //$Text = preg_replace("(\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[/url\])", '$2', $Text); + $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '$1', $Text); + $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '$2', $Text); + //$Text = preg_replace("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", '$2', $Text); // Perform MAIL Search - $Text = preg_replace("(\[mail\]([$MAILSearchString]*)\[/mail\])", '$1', $Text); + $Text = preg_replace("/\[mail\]([$MAILSearchString]*)\[\/mail\]/", '$1', $Text); $Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '$2', $Text); // Check for bold text - $Text = preg_replace("(\[b\](.*?)\[\/b\])is",'$1',$Text); + $Text = preg_replace("(\[b\](.*?)\[\/b\])ism",'$1',$Text); // Check for Italics text - $Text = preg_replace("(\[i\](.*?)\[\/i\])is",'$1',$Text); + $Text = preg_replace("(\[i\](.*?)\[\/i\])ism",'$1',$Text); // Check for Underline text - $Text = preg_replace("(\[u\](.*?)\[\/u\])is",'$1',$Text); + $Text = preg_replace("(\[u\](.*?)\[\/u\])ism",'$1',$Text); // Check for strike-through text - $Text = preg_replace("(\[s\](.*?)\[\/s\])is",'$1',$Text); + $Text = preg_replace("(\[s\](.*?)\[\/s\])ism",'$1',$Text); // Check for over-line text - $Text = preg_replace("(\[o\](.*?)\[\/o\])is",'$1',$Text); + $Text = preg_replace("(\[o\](.*?)\[\/o\])ism",'$1',$Text); // Check for colored text - $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])is","$2",$Text); + $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])ism","$2",$Text); // Check for sized text - $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])is","$2",$Text); + $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])ism","$2",$Text); // Check for list text - $Text = preg_replace("/\[list\](.*?)\[\/list\]/is", '
      $1
    ' ,$Text); - $Text = preg_replace("/\[list=1\](.*?)\[\/list\]/is", '
      $1
    ' ,$Text); - $Text = preg_replace("/\[list=i\](.*?)\[\/list\]/s",'
      $1
    ' ,$Text); - $Text = preg_replace("/\[list=I\](.*?)\[\/list\]/s", '
      $1
    ' ,$Text); - $Text = preg_replace("/\[list=a\](.*?)\[\/list\]/s", '
      $1
    ' ,$Text); - $Text = preg_replace("/\[list=A\](.*?)\[\/list\]/s", '
      $1
    ' ,$Text); - $Text = preg_replace("/\[li\](.*?)\[\/li\]/s", '
  • $1
  • ' ,$Text); + $Text = preg_replace("/\[list\](.*?)\[\/list\]/ism", '
      $1
    ' ,$Text); + $Text = preg_replace("/\[list=1\](.*?)\[\/list\]/ism", '
      $1
    ' ,$Text); + $Text = preg_replace("/\[list=i\](.*?)\[\/list\]/sm",'
      $1
    ' ,$Text); + $Text = preg_replace("/\[list=I\](.*?)\[\/list\]/sm", '
      $1
    ' ,$Text); + $Text = preg_replace("/\[list=a\](.*?)\[\/list\]/sm", '
      $1
    ' ,$Text); + $Text = preg_replace("/\[list=A\](.*?)\[\/list\]/sm", '
      $1
    ' ,$Text); + $Text = preg_replace("/\[li\](.*?)\[\/li\]/sm", '
  • $1
  • ' ,$Text); - $Text = preg_replace("/\[td\](.*?)\[\/td\]/s", '$1' ,$Text); - $Text = preg_replace("/\[tr\](.*?)\[\/tr\]/s", '$1' ,$Text); - $Text = preg_replace("/\[table\](.*?)\[\/table\]/s", '$1
    ' ,$Text); + $Text = preg_replace("/\[td\](.*?)\[\/td\]/sm", '$1' ,$Text); + $Text = preg_replace("/\[tr\](.*?)\[\/tr\]/sm", '$1' ,$Text); + $Text = preg_replace("/\[table\](.*?)\[\/table\]/sm", '$1
    ' ,$Text); - $Text = preg_replace("/\[table border=1\](.*?)\[\/table\]/s", '$1
    ' ,$Text); - $Text = preg_replace("/\[table border=0\](.*?)\[\/table\]/s", '$1
    ' ,$Text); + $Text = preg_replace("/\[table border=1\](.*?)\[\/table\]/sm", '$1
    ' ,$Text); + $Text = preg_replace("/\[table border=0\](.*?)\[\/table\]/sm", '$1
    ' ,$Text); // $Text = str_replace("[*]", "
  • ", $Text); // Check for font change text - $Text = preg_replace("(\[font=(.*?)\](.*?)\[\/font\])","$2",$Text); + $Text = preg_replace("/\[font=(.*?)\](.*?)\[\/font\]/sm","$2",$Text); // Declare the format for [code] layout - $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/is",'stripcode_br_cb',$Text); + $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/ism",'stripcode_br_cb',$Text); $CodeLayout = '$1'; // Check for [code] text - $Text = preg_replace("/\[code\](.*?)\[\/code\]/is","$CodeLayout", $Text); + $Text = preg_replace("/\[code\](.*?)\[\/code\]/ism","$CodeLayout", $Text); @@ -109,22 +111,23 @@ function bbcode($Text,$preserve_nl = false) { // Declare the format for [quote] layout $QuoteLayout = '
    $1
    '; // Check for [quote] text - $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/is","$QuoteLayout", $Text); + $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text); + // [img=widthxheight]image source[/img] + $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '', $Text); + // Images // [img]pathtoimage[/img] - $Text = preg_replace("/\[img\](.*?)\[\/img\]/", '' . t('Image/photo') . '', $Text); + $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '' . t('Image/photo') . '', $Text); // html5 video and audio - $Text = preg_replace("/\[video\](.*?)\[\/video\]/", '', $Text); + $Text = preg_replace("/\[video\](.*?)\[\/video\]/ism", '', $Text); - $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '', $Text); + $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/ism", '', $Text); - $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/", '', $Text); + $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '', $Text); - // [img=widthxheight]image source[/img] - $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/", '', $Text); if (get_pconfig(local_user(), 'oembed', 'use_for_youtube' )==1){ // use oembed for youtube links @@ -132,13 +135,15 @@ function bbcode($Text,$preserve_nl = false) { $Text = preg_replace("/\[\/youtube\]/",'[/embed]',$Text); } else { // Youtube extensions - $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/",'[youtube]$1[/youtube]',$Text); - $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/",'[youtube]$1[/youtube]',$Text); - $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '', $Text); + $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); + $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); + $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); + $Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '', $Text); } -// $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '', $Text); +// $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '', $Text); + // oembed tag $Text = oembed_bbcode2html($Text); @@ -148,14 +153,15 @@ function bbcode($Text,$preserve_nl = false) { if(x($ev,'desc') && x($ev,'start')) { $sub = format_event_html($ev); - $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",$sub,$Text); - $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",'',$Text); - $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text); - $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/is",'',$Text); - $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",'',$Text); + $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/ism",$sub,$Text); + $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/ism",'',$Text); + $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/ism",'',$Text); + $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/ism",'',$Text); + $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/ism",'',$Text); } - + // fix any escaped ampersands that may have been converted into links + $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text); call_hooks('bbcode',$Text); diff --git a/include/contact_selectors.php b/include/contact_selectors.php index ac1e38e4fe..1303acf74a 100644 --- a/include/contact_selectors.php +++ b/include/contact_selectors.php @@ -46,10 +46,11 @@ function contact_reputation($current) { } -function contact_poll_interval($current) { +function contact_poll_interval($current, $disabled = false) { + $dis = (($disabled) ? ' disabled="disabled" ' : ''); $o = ''; - $o .= '" . "\r\n"; $rep = array( 0 => t('Frequently'), @@ -67,3 +68,13 @@ function contact_poll_interval($current) { $o .= "\r\n"; return $o; } + + +function network_to_name($s) { + + call_hooks('network_to_name', $s); + + return str_replace(array(NETWORK_DFRN,NETWORK_OSTATUS,NETWORK_FEED,NETWORK_MAIL,NETWORK_DIASPORA,NETWORK_FACEBOOK,NETWORK_ZOT), + array(t('Friendika'),t('OStatus'),t('RSS/Atom'),t('Email'),t('Diaspora'),t('Facebook'),t('Zot!')),$s); + +} diff --git a/include/conversation.php b/include/conversation.php index 0d901a3c06..10b34ebe68 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -80,6 +80,7 @@ function localize_item(&$item){ } + } /** @@ -110,7 +111,7 @@ function conversation(&$a, $items, $mode, $update) { } if($mode === 'notes') { - $profile_owner = $a->profile['profile_uid']; + $profile_owner = local_user(); $page_writeable = true; } @@ -133,16 +134,17 @@ function conversation(&$a, $items, $mode, $update) { $cmnt_tpl = get_markup_template('comment_item.tpl'); - $like_tpl = get_markup_template('like.tpl'); - $noshare_tpl = get_markup_template('like_noshare.tpl'); $tpl = get_markup_template('wall_item.tpl'); $wallwall = get_markup_template('wallwall_item.tpl'); - $droptpl = get_markup_template('wall_item_drop.tpl'); - $fakedrop = get_markup_template('wall_fake_drop.tpl'); $alike = array(); $dlike = array(); + + // array with html for each thread (parent+comments) + $threads = array(); + $threadsid = -1; + if(count($items)) { if($mode === 'network-new' || $mode === 'search' || $mode === 'community') { @@ -153,6 +155,7 @@ function conversation(&$a, $items, $mode, $update) { $tpl = get_markup_template('search_item.tpl'); foreach($items as $item) { + $threadsid++; $comment = ''; $owner_url = ''; @@ -194,344 +197,389 @@ function conversation(&$a, $items, $mode, $update) { $location = '' . $coord . ''; } - $drop = ''; localize_item($item); if($mode === 'network-new') - $t = $droptpl; + $dropping = true; else - $t = $fakedrop; + $dropping = false; - $drop = replace_macros($t,array('$id' => $item['id'])); - $lock = '
    '; - $star = ''; + + $drop = array( + 'dropping' => $dropping, + 'select' => t('Select'), + 'delete' => t('Delete'), + ); + + $star = false; + $isstarred = "unstarred"; + + $lock = false; + $likebuttons = false; + $shareable = false; $body = prepare_body($item,true); - $o .= replace_macros($tpl,array( + $tmp_item = replace_macros($tpl,array( '$id' => $item['item_id'], - '$linktitle' => sprintf( t('View %s\'s profile'), $profile_name), + '$linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), '$profile_url' => $profile_link, '$item_photo_menu' => item_photo_menu($item), - '$name' => $profile_name, + '$name' => template_escape($profile_name), '$sparkle' => $sparkle, '$lock' => $lock, '$thumb' => $profile_avatar, - '$title' => $item['title'], - '$body' => $body, + '$title' => template_escape($item['title']), + '$body' => template_escape($body), '$ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])), - '$location' => $location, + '$lock' => $lock, + '$location' => template_escape($location), '$indent' => '', + '$owner_name' => template_escape($owner_name), '$owner_url' => $owner_url, '$owner_photo' => $owner_photo, - '$owner_name' => $owner_name, + '$plink' => get_plink($item), + '$edpost' => false, + '$isstarred' => $isstarred, '$star' => $star, '$drop' => $drop, - '$conv' => '' . t('View in context') . '' + '$vote' => $likebuttons, + '$like' => '', + '$dislike' => '', + '$comment' => '', + '$conv' => array('href'=> $a->get_baseurl() . '/display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context')), + '$wait' => t('Please wait'), )); + $arr = array('item' => $item, 'output' => $tmp_item); + call_hooks('display_item', $arr); + + $threads[$threadsid] .= $arr['output']; + } - return $o; } + else + { + // Normal View + // Figure out how many comments each parent has + // (Comments all have gravity of 6) + // Store the result in the $comments array - - // Normal View - - - // Figure out how many comments each parent has - // (Comments all have gravity of 6) - // Store the result in the $comments array - - $comments = array(); - foreach($items as $item) { - if((intval($item['gravity']) == 6) && ($item['id'] != $item['parent'])) { - if(! x($comments,$item['parent'])) - $comments[$item['parent']] = 1; - else - $comments[$item['parent']] += 1; + $comments = array(); + foreach($items as $item) { + if((intval($item['gravity']) == 6) && ($item['id'] != $item['parent'])) { + if(! x($comments,$item['parent'])) + $comments[$item['parent']] = 1; + else + $comments[$item['parent']] += 1; + } } - } - // map all the like/dislike activities for each parent item - // Store these in the $alike and $dlike arrays + // map all the like/dislike activities for each parent item + // Store these in the $alike and $dlike arrays - foreach($items as $item) { - like_puller($a,$item,$alike,'like'); - like_puller($a,$item,$dlike,'dislike'); - } + foreach($items as $item) { + like_puller($a,$item,$alike,'like'); + like_puller($a,$item,$dlike,'dislike'); + } - $comments_collapsed = false; - $blowhard = 0; - $blowhard_count = 0; + $comments_collapsed = false; + $blowhard = 0; + $blowhard_count = 0; - foreach($items as $item) { - $comment = ''; - $template = $tpl; - $commentww = ''; - $sparkle = ''; - $owner_url = $owner_photo = $owner_name = ''; + foreach($items as $item) { - // We've already parsed out like/dislike for special treatment. We can ignore them now + $comment = ''; + $template = $tpl; + $commentww = ''; + $sparkle = ''; + $owner_url = $owner_photo = $owner_name = ''; - if(((activity_match($item['verb'],ACTIVITY_LIKE)) - || (activity_match($item['verb'],ACTIVITY_DISLIKE))) - && ($item['id'] != $item['parent'])) - continue; + // We've already parsed out like/dislike for special treatment. We can ignore them now - $toplevelpost = (($item['id'] == $item['parent']) ? true : false); - $toplevelprivate = false; + if(((activity_match($item['verb'],ACTIVITY_LIKE)) + || (activity_match($item['verb'],ACTIVITY_DISLIKE))) + && ($item['id'] != $item['parent'])) + continue; - // Take care of author collapsing and comment collapsing - // If a single author has more than 3 consecutive top-level posts, squash the remaining ones. - // If there are more than two comments, squash all but the last 2. - - if($toplevelpost) { - $toplevelprivate = (($toplevelpost && $item['private']) ? true : false); - $item_writeable = (($item['writable'] || $item['self']) ? true : false); + $toplevelpost = (($item['id'] == $item['parent']) ? true : false); + $toplevelprivate = false; - if($blowhard == $item['cid'] && (! $item['self']) && ($mode != 'profile') && ($mode != 'notes')) { - $blowhard_count ++; - if($blowhard_count == 3) { - $o .= '' . ''; - $blowhard_count = 0; - } + // prevent private email from leaking into public conversation + if((! $toplevelpost) && (! toplevelprivate) && ($item['private']) && ($profile_owner != local_user())) + continue; + $comments_seen ++; + } - $comments_seen = 0; - $comments_collapsed = false; - } - else { - // prevent private email from leaking into public conversation - if((! $toplevelpost) && (! toplevelprivate) && ($item['private']) && ($profile_owner != local_user())) - continue; - $comments_seen ++; - } + $override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false); + $show_comment_box = ((($page_writeable) && ($item_writeable) && ($comments_seen == $comments[$item['parent']])) ? true : false); - $override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false); - $show_comment_box = ((($page_writeable) && ($item_writeable) && ($comments_seen == $comments[$item['parent']])) ? true : false); - - if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) { - if(! $comments_collapsed) { - $o .= '' - . ''; - } - - $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ; - - $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) - || strlen($item['deny_cid']) || strlen($item['deny_gid'])))) - ? '
    ' . t('Private Message') . '
    ' - : '
    '); - - - // Top-level wall post not written by the wall owner (wall-to-wall) - // First figure out who owns it. - - $osparkle = ''; - - if(($toplevelpost) && (! $item['self']) && ($mode !== 'profile')) { - - if($item['wall']) { - - // On the network page, I am the owner. On the display page it will be the profile owner. - // This will have been stored in $a->page_contact by our calling page. - // Put this person on the left of the wall-to-wall notice. - - $owner_url = $a->page_contact['url']; - $owner_photo = $a->page_contact['thumb']; - $owner_name = $a->page_contact['name']; - $template = $wallwall; - $commentww = 'ww'; - } - if((! $item['wall']) && (strlen($item['owner-link'])) && ($item['owner-link'] != $item['author-link'])) { - - // Could be anybody. - - $owner_url = $item['owner-link']; - $owner_photo = $item['owner-avatar']; - $owner_name = $item['owner-name']; - $template = $wallwall; - $commentww = 'ww'; - // If it is our contact, use a friendly redirect link - if((link_compare($item['owner-link'],$item['url'])) - && ($item['network'] === 'dfrn')) { - $owner_url = $redirect_url; - $osparkle = ' sparkle'; + if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) { + if(! $comments_collapsed) { + $threads[$threadsid] .= '' + . ''; } - if(($show_comment_box) || (($show_comment_box == false) && ($override_comment_box == false) && ($item['last-child']))) { - $comment = replace_macros($cmnt_tpl,array( - '$return_path' => '', - '$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''), - '$type' => (($mode === 'profile') ? 'wall-comment' : 'net-comment'), - '$id' => $item['item_id'], - '$parent' => $item['parent'], - '$profile_uid' => $profile_owner, - '$mylink' => $a->contact['url'], - '$mytitle' => t('This is you'), - '$myphoto' => $a->contact['thumb'], - '$comment' => t('Comment'), - '$submit' => t('Submit'), - '$ww' => (($mode === 'network') ? $commentww : '') - )); + $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ; + + $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) + || strlen($item['deny_cid']) || strlen($item['deny_gid'])))) + ? t('Private Message') + : false); + + + // Top-level wall post not written by the wall owner (wall-to-wall) + // First figure out who owns it. + + $osparkle = ''; + + if(($toplevelpost) && (! $item['self']) && ($mode !== 'profile')) { + + if($item['wall']) { + + // On the network page, I am the owner. On the display page it will be the profile owner. + // This will have been stored in $a->page_contact by our calling page. + // Put this person on the left of the wall-to-wall notice. + + $owner_url = $a->page_contact['url']; + $owner_photo = $a->page_contact['thumb']; + $owner_name = $a->page_contact['name']; + $template = $wallwall; + $commentww = 'ww'; + } + if((! $item['wall']) && (strlen($item['owner-link'])) && ($item['owner-link'] != $item['author-link'])) { + + // Could be anybody. + + $owner_url = $item['owner-link']; + $owner_photo = $item['owner-avatar']; + $owner_name = $item['owner-name']; + $template = $wallwall; + $commentww = 'ww'; + // If it is our contact, use a friendly redirect link + if((link_compare($item['owner-link'],$item['url'])) + && ($item['network'] === 'dfrn')) { + $owner_url = $redirect_url; + $osparkle = ' sparkle'; + } + } } - } - $edpost = (((($profile_owner == local_user()) && ($toplevelpost) && (intval($item['wall']) == 1)) || ($mode === 'notes')) - ? '' - : ''); + $likebuttons = ''; + $shareable = ((($profile_owner == local_user()) && ($mode != 'display') && (! $item['private'])) ? true : false); + + if($page_writeable) { + if($toplevelpost) { + $likebuttons = array( + 'like' => array( t("I like this \x28toggle\x29"), t("like")), + 'dislike' => array( t("I don't like this \x28toggle\x29"), t("dislike")), + ); + if ($shareable) $likebuttons['share'] = array( t('Share this'), t('share')); + } + + if(($show_comment_box) || (($show_comment_box == false) && ($override_comment_box == false) && ($item['last-child']))) { + $comment = replace_macros($cmnt_tpl,array( + '$return_path' => '', + '$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''), + '$type' => (($mode === 'profile') ? 'wall-comment' : 'net-comment'), + '$id' => $item['item_id'], + '$parent' => $item['parent'], + '$profile_uid' => $profile_owner, + '$mylink' => $a->contact['url'], + '$mytitle' => t('This is you'), + '$myphoto' => $a->contact['thumb'], + '$comment' => t('Comment'), + '$submit' => t('Submit'), + '$ww' => (($mode === 'network') ? $commentww : '') + )); + } + } + + $edpost = (((($profile_owner == local_user()) && ($toplevelpost) && (intval($item['wall']) == 1)) || ($mode === 'notes')) + ? array($a->get_baseurl()."/editpost/".$item['id'], t("Edit")) + : False); - $drop = ''; - $dropping = false; + $drop = ''; + $dropping = false; - if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user())) - $dropping = true; + if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user())) + $dropping = true; - $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$select' => t('Select'), '$delete' => t('Delete'))); + $drop = array( + 'dropping' => $dropping, + 'select' => t('Select'), + 'delete' => t('Delete'), + ); - $star = (($profile_owner == local_user() && $toplevelpost) ? '' : ''); + $star = false; + $isstarred = "unstarred"; + if ($profile_owner == local_user() && $toplevelpost) { + $isstarred = (($item['starred']) ? "starred" : "unstarred"); - - $photo = $item['photo']; - $thumb = $item['thumb']; - - // Post was remotely authored. - - $diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true); - - $profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']); - - $sp = false; - $profile_link = best_link_url($item,$sp); - if($sp) - $sparkle = ' sparkle'; - - if($profile_link === 'mailbox') - $profile_link = ''; - - $normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']); - if(($normalised != 'mailbox') && (x($a->contacts,$normalised))) - $profile_avatar = $a->contacts[$normalised]['thumb']; - else - $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb); + $star = array( + 'do' => t("add star"), + 'undo' => t("remove star"), + 'toggle' => t("toggle star status"), + 'classdo' => (($item['starred']) ? "hidden" : ""), + 'classundo' => (($item['starred']) ? "" : "hidden"), + 'starred' => t('starred'), + ); + } + $photo = $item['photo']; + $thumb = $item['thumb']; + // Post was remotely authored. - $like = ((x($alike,$item['id'])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : ''); - $dislike = ((x($dlike,$item['id'])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : ''); + $diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true); - $location = (($item['location']) ? '' . $item['location'] . '' : ''); - $coord = (($item['coord']) ? '' . $item['coord'] . '' : ''); - if($coord) { - if($location) - $location .= '
    (' . $coord . ')'; + $profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']); + + $sp = false; + $profile_link = best_link_url($item,$sp); + if($sp) + $sparkle = ' sparkle'; + + if($profile_link === 'mailbox') + $profile_link = ''; + + $normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']); + if(($normalised != 'mailbox') && (x($a->contacts,$normalised))) + $profile_avatar = $a->contacts[$normalised]['thumb']; else - $location = '' . $coord . ''; + $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb); + + + + + + $like = ((x($alike,$item['id'])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : ''); + $dislike = ((x($dlike,$item['id'])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : ''); + + $location = (($item['location']) ? '' . $item['location'] . '' : ''); + $coord = (($item['coord']) ? '' . $item['coord'] . '' : ''); + if($coord) { + if($location) + $location .= '
    (' . $coord . ')'; + else + $location = '' . $coord . ''; + } + + $indent = (($toplevelpost) ? '' : ' comment'); + + if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0) + $indent .= ' shiny'; + + // + localize_item($item); + + // Build the HTML + + $body = prepare_body($item,true); + + + $tmp_item = replace_macros($template,array( + '$body' => template_escape($body), + '$id' => $item['item_id'], + '$linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), + '$olinktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])), + '$to' => t('to'), + '$wall' => t('Wall-to-Wall'), + '$vwall' => t('via Wall-To-Wall:'), + '$profile_url' => $profile_link, + '$item_photo_menu' => item_photo_menu($item), + '$name' => template_escape($profile_name), + '$thumb' => $profile_avatar, + '$osparkle' => $osparkle, + '$sparkle' => $sparkle, + '$title' => template_escape($item['title']), + '$ago' => ((($item['app']) && ($item['id'] == $item['parent'])) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])), + '$lock' => $lock, + '$location' => template_escape($location), + '$indent' => $indent, + '$owner_url' => $owner_url, + '$owner_photo' => $owner_photo, + '$owner_name' => template_escape($owner_name), + '$plink' => get_plink($item), + '$edpost' => $edpost, + '$isstarred' => $isstarred, + '$star' => $star, + '$drop' => $drop, + '$vote' => $likebuttons, + '$like' => $like, + '$dislike' => $dislike, + '$comment' => $comment, + '$wait' => t('Please wait'), + + )); + + + $arr = array('item' => $item, 'output' => $tmp_item); + call_hooks('display_item', $arr); + + $threads[$threadsid] .= $arr['output']; } - - $indent = (($toplevelpost) ? '' : ' comment'); - - if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0) - $indent .= ' shiny'; - - // - localize_item($item); - - // Build the HTML - - $body = prepare_body($item,true); - - - $tmp_item = replace_macros($template,array( - '$id' => $item['item_id'], - '$linktitle' => sprintf( t('View %s\'s profile'), $profile_name), - '$olinktitle' => sprintf( t('View %s\'s profile'), $owner_name), - '$to' => t('to'), - '$wall' => t('Wall-to-Wall'), - '$vwall' => t('via Wall-To-Wall:'), - '$profile_url' => $profile_link, - '$item_photo_menu' => item_photo_menu($item), - '$name' => $profile_name, - '$thumb' => $profile_avatar, - '$osparkle' => $osparkle, - '$sparkle' => $sparkle, - '$title' => $item['title'], - '$body' => $body, - '$ago' => ((($item['app']) && ($item['id'] == $item['parent'])) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])), - '$lock' => $lock, - '$location' => $location, - '$indent' => $indent, - '$owner_url' => $owner_url, - '$owner_photo' => $owner_photo, - '$owner_name' => $owner_name, - '$plink' => get_plink($item), - '$edpost' => $edpost, - '$star' => $star, - '$drop' => $drop, - '$vote' => $likebuttons, - '$like' => $like, - '$dislike' => $dislike, - '$comment' => $comment - )); - - - $arr = array('item' => $item, 'output' => $tmp_item); - call_hooks('display_item', $arr); - - $o .= $arr['output']; - } } // if author collapsing is in force but didn't get closed, close it off now. - if($blowhard_count >= 3) - $o .= ''; + /*if($blowhard_count >= 3) + $threads[$threadsid] .= '';*/ - if($dropping) - $o .= '
    '; + $page_template = get_markup_template("conversation.tpl"); + $o .= replace_macros($page_template, array( + '$threads' => $threads, + '$dropping' => ($dropping?t('Delete Selected Items'):False), + )); return $o; } @@ -728,7 +776,7 @@ function status_editor($a,$x, $notes_cid = 0) { if($mail_enabled) { $selected = (($pubmail_enabled) ? ' checked="checked" ' : ''); - $jotnets .= '
    ' + $jotnets .= '
    ' . t("Post to Email") . '
    '; } diff --git a/include/crypto.php b/include/crypto.php index a20606db54..0feb45c247 100644 --- a/include/crypto.php +++ b/include/crypto.php @@ -225,3 +225,71 @@ function pkcs5_unpad($text) if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; return substr($text, 0, -1 * $pad); } + +function AES256CBC_encrypt($data,$key,$iv) { + return mcrypt_encrypt( + MCRYPT_RIJNDAEL_128, + str_pad($key,32,"\0"), + pkcs5_pad($data,16), + MCRYPT_MODE_CBC, + str_pad($iv,16,"\0")); +} + +function AES256CBC_decrypt($data,$key,$iv) { + return pkcs5_unpad(mcrypt_decrypt( + MCRYPT_RIJNDAEL_128, + str_pad($key,32,"\0"), + $data, + MCRYPT_MODE_CBC, + str_pad($iv,16,"\0"))); +} + +function aes_encapsulate($data,$pubkey) { + $key = random_string(32,RANDOM_STRING_TEXT); + $iv = random_string(16,RANDOM_STRING_TEXT); + $result['data'] = base64url_encode(AES256CBC_encrypt($data,$key,$iv),true); + openssl_public_encrypt($key,$k,$pubkey); + $result['key'] = base64url_encode($k,true); + openssl_public_encrypt($iv,$i,$pubkey); + $result['iv'] = base64url_encode($i,true); + return $result; +} + +function aes_unencapsulate($data,$prvkey) { + openssl_private_decrypt(base64url_decode($data['key']),$k,$prvkey); + openssl_private_decrypt(base64url_decode($data['iv']),$i,$prvkey); + return AES256CBC_decrypt(base64url_decode($data['data']),$k,$i); +} + + +// This has been superceded. + +function zot_encapsulate($data,$envelope,$pubkey) { +$res = aes_encapsulate($data,$pubkey); + +return <<< EOT + + + {$res['key']} + {$res['iv']} + $s1 + $sig + AES-256-CBC + {$res['data']} + +EOT; + +} + +// so has this + +function zot_unencapsulate($data,$prvkey) { + $ret = array(); + $c = array(); + $x = parse_xml_string($data); + $c = array('key' => $x->key,'iv' => $x->iv,'data' => $x->data); + openssl_private_decrypt(base64url_decode($x->sender),$s,$prvkey); + $ret['sender'] = $s; + $ret['data'] = aes_unencapsulate($x,$prvkey); + return $ret; +} \ No newline at end of file diff --git a/include/delivery.php b/include/delivery.php new file mode 100644 index 0000000000..46112d78ee --- /dev/null +++ b/include/delivery.php @@ -0,0 +1,476 @@ +set_baseurl(get_config('system','url')); + + logger('delivery: invoked: ' . print_r($argv,true), LOGGER_DEBUG); + + $cmd = $argv[1]; + $item_id = intval($argv[2]); + $contact_id = intval($argv[3]); + + // Some other process may have delivered this item already. + + $r = q("select * from deliverq where cmd = '%s' and item = %d and contact = %d limit 1", + dbesc($cmd), + dbesc($item_id), + dbesc($contact_id) + ); + if(! count($r)) { + return; + } + + // It's ours to deliver. Remove it from the queue. + + q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1", + dbesc($cmd), + dbesc($item_id), + dbesc($contact_id) + ); + + if((! $item_id) || (! $contact_id)) + return; + + $expire = false; + $top_level = false; + $recipients = array(); + $url_recipients = array(); + + $normal_mode = true; + + $recipients[] = $contact_id; + + if($cmd === 'expire') { + $normal_mode = false; + $expire = true; + $items = q("SELECT * FROM `item` WHERE `uid` = %d AND `wall` = 1 + AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP() - INTERVAL 30 MINUTE", + intval($item_id) + ); + $uid = $item_id; + $item_id = 0; + if(! count($items)) + return; + } + else { + + // find ancestors + $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1", + intval($item_id) + ); + + if((! count($r)) || (! intval($r[0]['parent']))) { + return; + } + + $target_item = $r[0]; + $parent_id = intval($r[0]['parent']); + $uid = $r[0]['uid']; + $updated = $r[0]['edited']; + + if(! $parent_id) + return; + + + $items = q("SELECT `item`.*, `sign`.`signed_text`,`sign`.`signature`,`sign`.`signer` + FROM `item` LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `parent` = %d ORDER BY `id` ASC", + intval($parent_id) + ); + + if(! count($items)) { + return; + } + + $icontacts = null; + $contacts_arr = array(); + foreach($items as $item) + if(! in_array($item['contact-id'],$contacts_arr)) + $contacts_arr[] = intval($item['contact-id']); + if(count($contacts_arr)) { + $str_contacts = implode(',',$contacts_arr); + $icontacts = q("SELECT * FROM `contact` + WHERE `id` IN ( $str_contacts ) " + ); + } + if( ! ($icontacts && count($icontacts))) + return; + + + // avoid race condition with deleting entries + + if($items[0]['deleted']) { + foreach($items as $item) + $item['deleted'] = 1; + } + + if((count($items) == 1) && ($items[0]['uri'] === $items[0]['parent-uri'])) { + logger('delivery: top level post'); + $top_level = true; + } + } + + $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`, + `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, + `user`.`page-flags`, `user`.`prvnets` + FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` + WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1", + intval($uid) + ); + + if(! count($r)) + return; + + $owner = $r[0]; + + $walltowall = ((($top_level) && ($owner['id'] != $items[0]['contact-id'])) ? true : false); + + $public_message = true; + + // fill this in with a single salmon slap if applicable + + $slap = ''; + + require_once('include/group.php'); + + $parent = $items[0]; + + // This is IMPORTANT!!!! + + // We will only send a "notify owner to relay" or followup message if the referenced post + // originated on our system by virtue of having our hostname somewhere + // in the URI, AND it was a comment (not top_level) AND the parent originated elsewhere. + // if $parent['wall'] == 1 we will already have the parent message in our array + // and we will relay the whole lot. + + // expire sends an entire group of expire messages and cannot be forwarded. + // However the conversation owner will be a part of the conversation and will + // be notified during this run. + // Other DFRN conversation members will be alerted during polled updates. + + // Diaspora members currently are not notified of expirations, and other networks have + // either limited or no ability to process deletions. We should at least fix Diaspora + // by stringing togther an array of retractions and sending them onward. + + + $localhost = $a->get_hostname(); + if(strpos($localhost,':')) + $localhost = substr($localhost,0,strpos($localhost,':')); + + /** + * + * Be VERY CAREFUL if you make any changes to the following line. Seemingly innocuous changes + * have been known to cause runaway conditions which affected several servers, along with + * permissions issues. + * + */ + + if((! $top_level) && ($parent['wall'] == 0) && (! $expire) && (stristr($target_item['uri'],$localhost))) { + logger('relay denied for delivery agent.'); + + /* no relay allowed for direct contact delivery */ + return; + } + + if((strlen($parent['allow_cid'])) + || (strlen($parent['allow_gid'])) + || (strlen($parent['deny_cid'])) + || (strlen($parent['deny_gid']))) { + $public_message = false; // private recipients, not public + } + + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `blocked` = 0 AND `pending` = 0", + intval($contact_id) + ); + + if(count($r)) + $contact = $r[0]; + + $hubxml = feed_hublinks(); + + logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA); + + require_once('include/salmon.php'); + + if($contact['self']) + return; + + $deliver_status = 0; + + switch($contact['network']) { + + case NETWORK_DFRN : + logger('notifier: dfrndelivery: ' . $contact['name']); + + $feed_template = get_markup_template('atom_feed.tpl'); + $mail_template = get_markup_template('atom_mail.tpl'); + + $atom = ''; + + + $birthday = feed_birthday($owner['uid'],$owner['timezone']); + + if(strlen($birthday)) + $birthday = '' . xmlify($birthday) . ''; + + $atom .= replace_macros($feed_template, array( + '$version' => xmlify(FRIENDIKA_VERSION), + '$feed_id' => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ), + '$feed_title' => xmlify($owner['name']), + '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , ATOM_TIME)) , + '$hub' => $hubxml, + '$salmon' => '', // private feed, we don't use salmon here + '$name' => xmlify($owner['name']), + '$profile_page' => xmlify($owner['url']), + '$photo' => xmlify($owner['photo']), + '$thumb' => xmlify($owner['thumb']), + '$picdate' => xmlify(datetime_convert('UTC','UTC',$owner['avatar-date'] . '+00:00' , ATOM_TIME)) , + '$uridate' => xmlify(datetime_convert('UTC','UTC',$owner['uri-date'] . '+00:00' , ATOM_TIME)) , + '$namdate' => xmlify(datetime_convert('UTC','UTC',$owner['name-date'] . '+00:00' , ATOM_TIME)) , + '$birthday' => $birthday + )); + + foreach($items as $item) { + if(! $item['parent']) + continue; + + // private emails may be in included in public conversations. Filter them. + if(($public_message) && $item['private']) + continue; + + $item_contact = get_item_contact($item,$icontacts); + if(! $item_contact) + continue; + + $atom .= atom_entry($item,'text',$item_contact,$owner,true); + + } + + $atom .= '' . "\r\n"; + + logger('notifier: ' . $atom, LOGGER_DATA); + + $deliver_status = dfrn_deliver($owner,$contact,$atom); + + logger('notifier: dfrn_delivery returns ' . $deliver_status); + + if($deliver_status == (-1)) { + logger('notifier: delivery failed: queuing message'); + // queue message for redelivery + q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`) + VALUES ( %d, '%s', '%s', '%s') ", + intval($contact['id']), + dbesc(datetime_convert()), + dbesc(datetime_convert()), + dbesc($atom) + ); + } + break; + + case NETWORK_OSTATUS : + + // Do not send to otatus if we are not configured to send to public networks + if($owner['prvnets']) + break; + if(get_config('system','ostatus_disabled') || get_config('system','dfrn_only')) + break; + + // only send salmon if public - e.g. if it's ok to notify + // a public hub, it's ok to send a salmon + + if(($public_message) && (! $expire)) { + $slaps = array(); + + foreach($items as $item) { + if(! $item['parent']) + continue; + + // private emails may be in included in public conversations. Filter them. + if(($public_message) && $item['private']) + continue; + + $item_contact = get_item_contact($item,$icontacts); + if(! $item_contact) + continue; + + if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire)) + $slaps[] = atom_entry($item,'html',$item_contact,$owner,true); + } + + logger('notifier: slapdelivery: ' . $contact['name']); + foreach($slaps as $slappy) { + if($contact['notify']) { + $deliver_status = slapper($owner,$contact['notify'],$slappy); + if($deliver_status == (-1)) { + // queue message for redelivery + q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`) + VALUES ( %d, '%s', '%s', '%s') ", + intval($contact['id']), + dbesc(datetime_convert()), + dbesc(datetime_convert()), + dbesc($slappy) + ); + } + } + } + } + + break; + + case NETWORK_MAIL : + + if(get_config('system','dfrn_only')) + break; + // WARNING: does not currently convert to RFC2047 header encodings, etc. + + $addr = $contact['addr']; + if(! strlen($addr)) + break; + + if($cmd === 'wall-new' || $cmd === 'comment-new') { + + $it = null; + if($cmd === 'wall-new') + $it = $items[0]; + else { + $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($argv[2]), + intval($uid) + ); + if(count($r)) + $it = $r[0]; + } + if(! $it) + break; + + + $local_user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", + intval($uid) + ); + if(! count($local_user)) + break; + + $reply_to = ''; + $r1 = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", + intval($uid) + ); + if($r1 && $r1[0]['reply_to']) + $reply_to = $r1[0]['reply_to']; + + $subject = (($it['title']) ? $it['title'] : t("\x28no subject\x29")) ; + $headers = 'From: ' . $local_user[0]['username'] . ' <' . $local_user[0]['email'] . '>' . "\n"; + if($reply_to) + $headers .= 'Reply-to: ' . $reply_to . "\n"; + $headers .= 'Message-id: <' . $it['uri'] . '>' . "\n"; + if($it['uri'] !== $it['parent-uri']) { + $header .= 'References: <' . $it['parent-uri'] . '>' . "\n"; + if(! strlen($it['title'])) { + $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", + dbesc($it['parent-uri']) + ); + if(count($r)) { + $subtitle = $r[0]['title']; + if($subtitle) { + if(strncasecmp($subtitle,'RE:',3)) + $subject = $subtitle; + else + $subject = 'Re: ' . $subtitle; + } + } + } + } + $headers .= 'MIME-Version: 1.0' . "\n"; + $headers .= 'Content-Type: text/html; charset=UTF-8' . "\n"; + $headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n"; + $html = prepare_body($it); + $message = '' . $html . ''; + logger('notifier: email delivery to ' . $addr); + mail($addr, $subject, $message, $headers); + } + break; + + case NETWORK_DIASPORA : + if($public_message) + $loc = 'public batch ' . $contact['batch']; + else + $loc = $contact['name']; + + logger('delivery: diaspora batch deliver: ' . $loc); + + if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode)) + break; + + if((! $contact['pubkey']) && (! $public_message)) + break; + + if($target_item['verb'] === ACTIVITY_DISLIKE) { + // unsupported + break; + } + elseif(($target_item['deleted']) && ($target_item['verb'] !== ACTIVITY_LIKE)) { + logger('delivery: diaspora retract: ' . $loc); + // diaspora delete, + diaspora_send_retraction($target_item,$owner,$contact,$public_message); + break; + } + elseif($target_item['parent'] != $target_item['id']) { + + logger('delivery: diaspora relay: ' . $loc); + + // we are the relay - send comments, likes and unlikes to our conversants + diaspora_send_relay($target_item,$owner,$contact,$public_message); + break; + } + elseif(($top_level) && (! $walltowall)) { + // currently no workable solution for sending walltowall + logger('delivery: diaspora status: ' . $loc); + diaspora_send_status($target_item,$owner,$contact,$public_message); + break; + } + + logger('delivery: diaspora unknown mode: ' . $contact['name']); + + break; + + case NETWORK_FEED : + case NETWORK_FACEBOOK : + if(get_config('system','dfrn_only')) + break; + default: + break; + } + + return; +} + +if (array_search(__file__,get_included_files())===0){ + delivery_run($argv,$argc); + killme(); +} diff --git a/include/diaspora.php b/include/diaspora.php index 75d47e05aa..1ae8ca8006 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -3,35 +3,57 @@ require_once('include/crypto.php'); require_once('include/items.php'); require_once('include/bb2diaspora.php'); +require_once('include/contact_selectors.php'); + + +function diaspora_dispatch_public($msg) { + + $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) AND `account_expired` = 0 ", + dbesc(NETWORK_DIASPORA), + dbesc($msg['author']) + ); + if(count($r)) { + foreach($r as $rr) { + logger('diaspora_public: delivering to: ' . $rr['username']); + diaspora_dispatch($rr,$msg); + } + } + else + logger('diaspora_public: no subscribers'); +} + + function diaspora_dispatch($importer,$msg) { + $ret = 0; + $parsed_xml = parse_xml_string($msg['message'],false); $xmlbase = $parsed_xml->post; if($xmlbase->request) { - diaspora_request($importer,$xmlbase->request); + $ret = diaspora_request($importer,$xmlbase->request); } elseif($xmlbase->status_message) { - diaspora_post($importer,$xmlbase->status_message); + $ret = diaspora_post($importer,$xmlbase->status_message); } elseif($xmlbase->comment) { - diaspora_comment($importer,$xmlbase->comment,$msg); + $ret = diaspora_comment($importer,$xmlbase->comment,$msg); } elseif($xmlbase->like) { - diaspora_like($importer,$xmlbase->like,$msg); + $ret = diaspora_like($importer,$xmlbase->like,$msg); } elseif($xmlbase->retraction) { - diaspora_retraction($importer,$xmlbase->retraction,$msg); + $ret = diaspora_retraction($importer,$xmlbase->retraction,$msg); } elseif($xmlbase->photo) { - diaspora_photo($importer,$xmlbase->photo,$msg); + $ret = diaspora_photo($importer,$xmlbase->photo,$msg); } else { logger('diaspora_dispatch: unknown message type: ' . print_r($xmlbase,true)); } - return; + return $ret; } function diaspora_get_contact_by_handle($uid,$handle) { @@ -46,6 +68,7 @@ function diaspora_get_contact_by_handle($uid,$handle) { } function find_diaspora_person_by_handle($handle) { + $update = false; $r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1", dbesc(NETWORK_DIASPORA), dbesc($handle) @@ -53,18 +76,14 @@ function find_diaspora_person_by_handle($handle) { if(count($r)) { // update record occasionally so it doesn't get stale $d = strtotime($r[0]['updated'] . ' +00:00'); - if($d < strtotime('now - 14 days')) { - q("delete from fcontact where id = %d limit 1", - intval($r[0]['id']) - ); - } - else + if($d > strtotime('now - 14 days')) return $r[0]; + $update = true; } require_once('include/Scrape.php'); $r = probe_url($handle, PROBE_DIASPORA); if((count($r)) && ($r['network'] === NETWORK_DIASPORA)) { - add_fcontact($r); + add_fcontact($r,$update); return ($r); } return false; @@ -81,9 +100,60 @@ function get_diaspora_key($uri) { } -function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) { +function diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey) { $a = get_app(); + logger('diaspora_pubmsg_build: ' . $msg, LOGGER_DATA); + + + $handle = $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); + +// $b64_data = base64_encode($msg); +// $b64url_data = base64url_encode($b64_data); + + $b64url_data = base64url_encode($msg); + + $data = str_replace(array("\n","\r"," ","\t"),array('','','',''),$b64url_data); + + $type = 'application/xml'; + $encoding = 'base64url'; + $alg = 'RSA-SHA256'; + + $signable_data = $data . '.' . base64url_encode($type) . '.' + . base64url_encode($encoding) . '.' . base64url_encode($alg) ; + + $signature = rsa_sign($signable_data,$prvkey); + $sig = base64url_encode($signature); + +$magic_env = <<< EOT + + +
    + $handle +
    + + base64url + RSA-SHA256 + $data + $sig + +
    +EOT; + + logger('diaspora_pubmsg_build: magic_env: ' . $magic_env, LOGGER_DATA); + return $magic_env; + +} + + + + +function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey,$public = false) { + $a = get_app(); + + if($public) + return diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey); + logger('diaspora_msg_build: ' . $msg, LOGGER_DATA); $inner_aes_key = random_string(32); @@ -96,7 +166,7 @@ function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) { $outer_iv = random_string(16); $b_outer_iv = base64_encode($outer_iv); - $handle = 'acct:' . $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); + $handle = $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $padded_data = pkcs5_pad($msg,16); $inner_encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $padded_data, MCRYPT_MODE_CBC, $inner_iv); @@ -105,16 +175,14 @@ function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) { $b64url_data = base64url_encode($b64_data); - $b64url_stripped = str_replace(array("\n","\r"," ","\t"),array('','','',''),$b64url_data); - $lines = str_split($b64url_stripped,60); - $data = implode("\n",$lines); - $data = $data . (($data[-1] != "\n") ? "\n" : '') ; - $type = 'application/atom+xml'; + $data = str_replace(array("\n","\r"," ","\t"),array('','','',''),$b64url_data); + + $type = 'application/xml'; $encoding = 'base64url'; $alg = 'RSA-SHA256'; - $signable_data = $data . '.' . base64url_encode($type) . "\n" . '.' - . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n"; + $signable_data = $data . '.' . base64url_encode($type) . '.' + . base64url_encode($encoding) . '.' . base64url_encode($alg) ; $signature = rsa_sign($signable_data,$prvkey); $sig = base64url_encode($signature); @@ -123,10 +191,7 @@ $decrypted_header = <<< EOT $b_inner_iv $b_inner_aes_key - - {$user['username']} - $handle - + $handle EOT; @@ -139,10 +204,9 @@ EOT; $encrypted_outer_key_bundle = ''; openssl_public_encrypt($outer_json,$encrypted_outer_key_bundle,$pubkey); - logger('outer_bundle_encrypt: ' . openssl_error_string()); $b64_encrypted_outer_key_bundle = base64_encode($encrypted_outer_key_bundle); - logger('outer_bundle: ' . $b64_encrypted_outer_key_bundle . ' key: ' . $pubkey); + logger('outer_bundle: ' . $b64_encrypted_outer_key_bundle . ' key: ' . $pubkey, LOGGER_DATA); $encrypted_header_json_object = json_encode(array('aes_key' => base64_encode($encrypted_outer_key_bundle), 'ciphertext' => base64_encode($ciphertext))); @@ -152,15 +216,15 @@ EOT; $magic_env = <<< EOT - + $encrypted_header - + base64url RSA-SHA256 - $data + $data $sig - + EOT; logger('diaspora_msg_build: magic_env: ' . $magic_env, LOGGER_DATA); @@ -185,50 +249,67 @@ EOT; function diaspora_decode($importer,$xml) { + $public = false; $basedom = parse_xml_string($xml); - $atom = $basedom->children(NAMESPACE_ATOM1); + $children = $basedom->children('https://joindiaspora.com/protocol'); - // Diaspora devs: This is kind of sucky - 'encrypted_header' does not belong in the atom namespace + if($children->header) { + $public = true; + $author_link = str_replace('acct:','',$children->header->author_id); + } + else { - $encrypted_header = json_decode(base64_decode($atom->encrypted_header)); + $encrypted_header = json_decode(base64_decode($children->encrypted_header)); - $encrypted_aes_key_bundle = base64_decode($encrypted_header->aes_key); - $ciphertext = base64_decode($encrypted_header->ciphertext); + $encrypted_aes_key_bundle = base64_decode($encrypted_header->aes_key); + $ciphertext = base64_decode($encrypted_header->ciphertext); - $outer_key_bundle = ''; - openssl_private_decrypt($encrypted_aes_key_bundle,$outer_key_bundle,$importer['prvkey']); + $outer_key_bundle = ''; + openssl_private_decrypt($encrypted_aes_key_bundle,$outer_key_bundle,$importer['prvkey']); - $j_outer_key_bundle = json_decode($outer_key_bundle); + $j_outer_key_bundle = json_decode($outer_key_bundle); - $outer_iv = base64_decode($j_outer_key_bundle->iv); - $outer_key = base64_decode($j_outer_key_bundle->key); + $outer_iv = base64_decode($j_outer_key_bundle->iv); + $outer_key = base64_decode($j_outer_key_bundle->key); - $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $outer_key, $ciphertext, MCRYPT_MODE_CBC, $outer_iv); + $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $outer_key, $ciphertext, MCRYPT_MODE_CBC, $outer_iv); - $decrypted = pkcs5_unpad($decrypted); + $decrypted = pkcs5_unpad($decrypted); - /** - * $decrypted now contains something like - * - * - * 8e+G2+ET8l5BPuW0sVTnQw== - * UvSMb4puPeB14STkcDWq+4QE302Edu15oaprAQSkLKU= - * - * Ryan Hughes - * acct:galaxor@diaspora.pirateship.org - * - * - */ + /** + * $decrypted now contains something like + * + * + * 8e+G2+ET8l5BPuW0sVTnQw== + * UvSMb4puPeB14STkcDWq+4QE302Edu15oaprAQSkLKU= - logger('decrypted: ' . $decrypted); - $idom = parse_xml_string($decrypted,false); +***** OBSOLETE - $inner_iv = base64_decode($idom->iv); - $inner_aes_key = base64_decode($idom->aes_key); + * + * Ryan Hughes + * acct:galaxor@diaspora.pirateship.org + * - $author_link = str_replace('acct:','',$idom->author->uri); +***** CURRENT + + * galaxor@diaspora.priateship.org + +***** END DIFFS + + * + */ + + logger('decrypted: ' . $decrypted, LOGGER_DEBUG); + $idom = parse_xml_string($decrypted,false); + + $inner_iv = base64_decode($idom->iv); + $inner_aes_key = base64_decode($idom->aes_key); + + $author_link = str_replace('acct:','',$idom->author_id); + + } $dom = $basedom->children(NAMESPACE_SALMON_ME); @@ -255,16 +336,6 @@ function diaspora_decode($importer,$xml) { // strip whitespace so our data element will return to one big base64 blob $data = str_replace(array(" ","\t","\r","\n"),array("","","",""),$base->data); - // Add back the 60 char linefeeds - - // This completely violates the entire principle of salmon magic signatures, - // which was to have a message signing format that was completely ambivalent to linefeeds - // and transport whitespace mangling, and base64 wrapping rules. Guess what? PHP and Ruby - // use different linelengths for base64 output. - - $lines = str_split($data,60); - $data = implode("\n",$lines); - // stash away some other stuff for later @@ -273,22 +344,25 @@ function diaspora_decode($importer,$xml) { $encoding = $base->encoding; $alg = $base->alg; - // I can't even begin to tell you how sucky this is. Please read the spec. - $signed_data = $data . (($data[-1] != "\n") ? "\n" : '') . '.' . base64url_encode($type) . "\n" . '.' . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n"; + $signed_data = $data . '.' . base64url_encode($type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($alg); // decode the data $data = base64url_decode($data); - // Now pull out the inner encrypted blob - $inner_encrypted = base64_decode($data); + if($public) { + $inner_decrypted = $data; + } + else { - $inner_decrypted = - $inner_decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $inner_encrypted, MCRYPT_MODE_CBC, $inner_iv); + // Decode the encrypted blob - $inner_decrypted = pkcs5_unpad($inner_decrypted); + $inner_encrypted = base64_decode($data); + $inner_decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $inner_encrypted, MCRYPT_MODE_CBC, $inner_iv); + $inner_decrypted = pkcs5_unpad($inner_decrypted); + } if(! $author_link) { logger('mod-diaspora: Could not retrieve author URI.'); @@ -321,7 +395,6 @@ function diaspora_decode($importer,$xml) { } - function diaspora_request($importer,$xml) { $sender_handle = unxmlify($xml->sender_handle); @@ -332,7 +405,6 @@ function diaspora_request($importer,$xml) { $contact = diaspora_get_contact_by_handle($importer['uid'],$sender_handle); - if($contact) { // perhaps we were already sharing with this person. Now they're sharing with us. @@ -357,13 +429,16 @@ function diaspora_request($importer,$xml) { return; } - $r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`) - VALUES ( %d, '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ", + $batch = (($ret['batch']) ? $ret['batch'] : implode('/', array_slice(explode('/',$ret['url']),0,3)) . '/receive/public'); + + $r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`batch`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`) + VALUES ( %d, '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ", intval($importer['uid']), dbesc($ret['network']), dbesc($ret['addr']), datetime_convert(), dbesc($ret['url']), + dbesc($batch), dbesc($ret['name']), dbesc($ret['nick']), dbesc($ret['photo']), @@ -398,6 +473,7 @@ function diaspora_request($importer,$xml) { function diaspora_post($importer,$xml) { + $a = get_app(); $guid = notags(unxmlify($xml->guid)); $diaspora_handle = notags(unxmlify($xml->diaspora_handle)); @@ -407,8 +483,7 @@ function diaspora_post($importer,$xml) { if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { logger('diaspora_post: Ignoring this author.'); - http_status_exit(202); - // NOTREACHED + return 202; } $message_id = $diaspora_handle . ':' . $guid; @@ -417,8 +492,10 @@ function diaspora_post($importer,$xml) { dbesc($message_id), dbesc($guid) ); - if(count($r)) + if(count($r)) { + logger('diaspora_post: message exists: ' . $guid); return; + } // allocate a guid on our system - we aren't fixing any collisions. // we're ignoring them @@ -435,32 +512,7 @@ function diaspora_post($importer,$xml) { $created = unxmlify($xml->created_at); $private = ((unxmlify($xml->public) == 'false') ? 1 : 0); - $body = unxmlify($xml->raw_message); - - require_once('library/HTMLPurifier.auto.php'); - require_once('include/html2bbcode.php'); - - $maxlen = get_max_import_size(); - if($maxlen && (strlen($body) > $maxlen)) - $body = substr($body,0, $maxlen); - - if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) { - - $body = preg_replace('#]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $body); - - $body = preg_replace('#].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $body); - - $body = oembed_html2bbcode($body); - - $config = HTMLPurifier_Config::createDefault(); - $config->set('Cache.DefinitionImpl', null); - $purifier = new HTMLPurifier($config); - $body = $purifier->purify($body); - - $body = html2bbcode($body); - } + $body = diaspora2bb($xml->raw_message); $datarray = array(); $datarray['uid'] = $importer['uid']; @@ -478,8 +530,16 @@ function diaspora_post($importer,$xml) { $datarray['author-link'] = $contact['url']; $datarray['author-avatar'] = $contact['thumb']; $datarray['body'] = $body; + $datarray['app'] = 'Diaspora'; - item_store($datarray); + $message_id = item_store($datarray); + + if($message_id) { + q("update item set plink = '%s' where id = %d limit 1", + dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id), + intval($message_id) + ); + } return; @@ -487,6 +547,7 @@ function diaspora_post($importer,$xml) { function diaspora_comment($importer,$xml,$msg) { + $a = get_app(); $guid = notags(unxmlify($xml->guid)); $parent_guid = notags(unxmlify($xml->parent_guid)); $diaspora_handle = notags(unxmlify($xml->diaspora_handle)); @@ -499,13 +560,23 @@ function diaspora_comment($importer,$xml,$msg) { $text = $xml->text; $contact = diaspora_get_contact_by_handle($importer['uid'],$msg['author']); - if(! $contact) + if(! $contact) { + logger('diaspora_comment: cannot find contact: ' . $msg['author']); return; + } if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { logger('diaspora_comment: Ignoring this author.'); - http_status_exit(202); - // NOTREACHED + return 202; + } + + $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1", + intval($importer['uid']), + dbesc($guid) + ); + if(count($r)) { + logger('diaspora_comment: our comment just got relayed back to us (or there was a guid collision) : ' . $guid); + return; } $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1", @@ -537,7 +608,7 @@ function diaspora_comment($importer,$xml,$msg) { } } - if(! rsa_verify($author_signed_data,$author_signature,$key,'sha')) { + if(! rsa_verify($author_signed_data,$author_signature,$key,'sha256')) { logger('diaspora_comment: verification failed.'); return; } @@ -550,7 +621,7 @@ function diaspora_comment($importer,$xml,$msg) { $key = $msg['key']; - if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha')) { + if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha256')) { logger('diaspora_comment: owner verification failed.'); return; } @@ -558,32 +629,7 @@ function diaspora_comment($importer,$xml,$msg) { // Phew! Everything checks out. Now create an item. - require_once('library/HTMLPurifier.auto.php'); - require_once('include/html2bbcode.php'); - - $body = $text; - - $maxlen = get_max_import_size(); - if($maxlen && (strlen($body) > $maxlen)) - $body = substr($body,0, $maxlen); - - if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) { - - $body = preg_replace('#]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $body); - - $body = preg_replace('#].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $body); - - $body = oembed_html2bbcode($body); - - $config = HTMLPurifier_Config::createDefault(); - $config->set('Cache.DefinitionImpl', null); - $purifier = new HTMLPurifier($config); - $body = $purifier->purify($body); - - $body = html2bbcode($body); - } + $body = diaspora2bb($text); $message_id = $diaspora_handle . ':' . $guid; @@ -608,9 +654,17 @@ function diaspora_comment($importer,$xml,$msg) { $datarray['author-link'] = $person['url']; $datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']); $datarray['body'] = $body; + $datarray['app'] = 'Diaspora'; $message_id = item_store($datarray); + if($message_id) { + q("update item set plink = '%s' where id = %d limit 1", + dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id), + intval($message_id) + ); + } + if(! $parent_author_signature) { q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ", intval($message_id), @@ -630,6 +684,7 @@ function diaspora_comment($importer,$xml,$msg) { function diaspora_photo($importer,$xml,$msg) { + $a = get_app(); $remote_photo_path = notags(unxmlify($xml->remote_photo_path)); $remote_photo_name = notags(unxmlify($xml->remote_photo_name)); @@ -651,8 +706,7 @@ function diaspora_photo($importer,$xml,$msg) { if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { logger('diaspora_photo: Ignoring this author.'); - http_status_exit(202); - // NOTREACHED + return 202; } $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1", @@ -697,13 +751,14 @@ function diaspora_like($importer,$xml,$msg) { return; $contact = diaspora_get_contact_by_handle($importer['uid'],$msg['author']); - if(! $contact) + if(! $contact) { + logger('diaspora_like: cannot find contact: ' . $msg['author']); return; + } if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { logger('diaspora_like: Ignoring this author.'); - http_status_exit(202); - // NOTREACHED + return 202; } $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1", @@ -759,20 +814,20 @@ function diaspora_like($importer,$xml,$msg) { } } - if(! rsa_verify($author_signed_data,$author_signature,$key,'sha')) { + if(! rsa_verify($author_signed_data,$author_signature,$key,'sha256')) { logger('diaspora_like: verification failed.'); return; } if($parent_author_signature) { -// $owner_signed_data = $guid . ';' . $parent_guid . ';' . $target_type . ';' . $positive . ';' . $msg['author']; - $owner_signed_data = $guid . ';' . $parent_guid . ';' . $target_type . ';' . $positive . ';' . $diaspora_handle; + + $owner_signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle; $parent_author_signature = base64_decode($parent_author_signature); $key = $msg['key']; - if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha')) { + if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha256')) { logger('diaspora_like: owner verification failed.'); return; } @@ -826,6 +881,8 @@ EOT; $plink = '[url=' . $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $parent_item['id'] . ']' . $post_type . '[/url]'; $arr['body'] = sprintf( $bodyverb, $ulink, $alink, $plink ); + $arr['app'] = 'Diaspora'; + $arr['private'] = $parent_item['private']; $arr['verb'] = $activity; $arr['object-type'] = $objtype; @@ -836,6 +893,14 @@ EOT; $message_id = item_store($arr); + + if($message_id) { + q("update item set plink = '%s' where id = %d limit 1", + dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id), + intval($message_id) + ); + } + if(! $parent_author_signature) { q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ", intval($message_id), @@ -883,7 +948,7 @@ function diaspora_retraction($importer,$xml) { } } - http_exit_status(202); + return 202; // NOTREACHED } @@ -923,7 +988,7 @@ function diaspora_unshare($me,$contact) { -function diaspora_send_status($item,$owner,$contact) { +function diaspora_send_status($item,$owner,$contact,$public_batch = false) { $a = get_app(); $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); @@ -947,11 +1012,12 @@ function diaspora_send_status($item,$owner,$contact) { } } - $body = xmlify(bb2diaspora($body)); + $body = xmlify(html_entity_decode(bb2diaspora($body))); + $public = (($item['private']) ? 'false' : 'true'); require_once('include/datetime.php'); - $created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d h:i:s \U\T\C'); + $created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d H:i:s \U\T\C'); $tpl = get_markup_template('diaspora_post.tpl'); $msg = replace_macros($tpl, array( @@ -964,19 +1030,19 @@ function diaspora_send_status($item,$owner,$contact) { logger('diaspora_send_status: ' . $owner['username'] . ' -> ' . $contact['name'] . ' base message: ' . $msg, LOGGER_DATA); - $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch))); - $return_code = diaspora_transmit($owner,$contact,$slap); + $return_code = diaspora_transmit($owner,$contact,$slap,$public_batch); if(count($images)) { - diaspora_send_images($item,$owner,$contact,$images); + diaspora_send_images($item,$owner,$contact,$images,$public_batch); } return $return_code; } -function diaspora_send_images($item,$owner,$contact,$images) { +function diaspora_send_images($item,$owner,$contact,$images,$public_batch = false) { $a = get_app(); if(! count($images)) return; @@ -1003,19 +1069,19 @@ function diaspora_send_images($item,$owner,$contact,$images) { '$guid' => xmlify($r[0]['guid']), '$handle' => xmlify($image['handle']), '$public' => xmlify($public), - '$created_at' => xmlify(datetime_convert('UTC','UTC',$r[0]['created'],'Y-m-d h:i:s \U\T\C')) + '$created_at' => xmlify(datetime_convert('UTC','UTC',$r[0]['created'],'Y-m-d H:i:s \U\T\C')) )); logger('diaspora_send_photo: base message: ' . $msg, LOGGER_DATA); - $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch))); - diaspora_transmit($owner,$contact,$slap); + diaspora_transmit($owner,$contact,$slap,$public_batch); } } -function diaspora_send_followup($item,$owner,$contact) { +function diaspora_send_followup($item,$owner,$contact,$public_batch = false) { $a = get_app(); $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); @@ -1040,7 +1106,7 @@ function diaspora_send_followup($item,$owner,$contact) { $like = false; } - $text = bb2diaspora($item['body']); + $text = html_entity_decode(bb2diaspora($item['body'])); // sign it @@ -1049,7 +1115,7 @@ function diaspora_send_followup($item,$owner,$contact) { else $signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr; - $authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha')); + $authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256')); $msg = replace_macros($tpl,array( '$guid' => xmlify($item['guid']), @@ -1063,13 +1129,13 @@ function diaspora_send_followup($item,$owner,$contact) { logger('diaspora_followup: base message: ' . $msg, LOGGER_DATA); - $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch))); - return(diaspora_transmit($owner,$contact,$slap)); + return(diaspora_transmit($owner,$contact,$slap,$public_batch)); } -function diaspora_send_relay($item,$owner,$contact) { +function diaspora_send_relay($item,$owner,$contact,$public_batch = false) { $a = get_app(); @@ -1085,14 +1151,6 @@ function diaspora_send_relay($item,$owner,$contact) { else return; - // fetch the original signature - $r = q("select * from sign where iid = %d limit 1", - intval($item['id']) - ); - if(! count($r)) - return; - $orig_sign = $r[0]; - if($item['verb'] === ACTIVITY_LIKE) { $tpl = get_markup_template('diaspora_like_relay.tpl'); $like = true; @@ -1104,16 +1162,61 @@ function diaspora_send_relay($item,$owner,$contact) { $like = false; } - $text = bb2diaspora($item['body']); + $body = $item['body']; + + $text = html_entity_decode(bb2diaspora($body)); + + // fetch the original signature if somebody sent the post to us to relay + // If we are relaying for a reply originating on our own account, there wasn't a 'send to relay' + // action. It wasn't needed. In that case create the original signature and the + // owner (parent author) signature + // comments from other networks will be relayed under our name, with a brief + // preamble to describe what's happening and noting the real author + + $r = q("select * from sign where iid = %d limit 1", + intval($item['id']) + ); + if(count($r)) { + $orig_sign = $r[0]; + $signed_text = $orig_sign['signed_text']; + $authorsig = $orig_sign['signature']; + $handle = $orig_sign['signer']; + } + else { + + $itemcontact = q("select * from contact where `id` = %d limit 1", + intval($item['contact-id']) + ); + if(count($itemcontact)) { + if(! $itemcontact[0]['self']) { + $prefix = sprintf( t('[Relayed] Comment authored by %s from network %s'), + '['. $item['author-name'] . ']' . '(' . $item['author-link'] . ')', + network_to_name($itemcontact['network'])) . "\n"; + $body = $prefix . $body; + } + } + else { + + if($like) + $signed_text = $item['guid'] . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $myaddr; + else + $signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr; + + $authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256')); + + q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ", + intval($item['id']), + dbesc($signed_text), + dbesc(base64_encode($authorsig)), + dbesc($myaddr) + ); + $handle = $myaddr; + } + } // sign it - if($like) - $parent_signed_text = $orig_sign['signed_text']; - else - $parent_signed_text = $orig_sign['signed_text']; - - $parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha')); + $parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256')); $msg = replace_macros($tpl,array( '$guid' => xmlify($item['guid']), @@ -1121,29 +1224,22 @@ function diaspora_send_relay($item,$owner,$contact) { '$target_type' =>xmlify($target_type), '$authorsig' => xmlify($orig_sign['signature']), '$parentsig' => xmlify($parentauthorsig), - '$text' => xmlify($text), + '$body' => xmlify($text), '$positive' => xmlify($positive), - '$diaspora_handle' => xmlify($myaddr) + '$handle' => xmlify($handle) )); - // fetch the original signature - $r = q("select * from sign where iid = %d limit 1", - intval($item['id']) - ); - if(! count($r)) - return; - logger('diaspora_relay_comment: base message: ' . $msg, LOGGER_DATA); - $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch))); - return(diaspora_transmit($owner,$contact,$slap)); + return(diaspora_transmit($owner,$contact,$slap,$public_batch)); } -function diaspora_send_retraction($item,$owner,$contact) { +function diaspora_send_retraction($item,$owner,$contact,$public_batch = false) { $a = get_app(); $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); @@ -1155,32 +1251,35 @@ function diaspora_send_retraction($item,$owner,$contact) { '$handle' => $myaddr )); - $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch))); - return(diaspora_transmit($owner,$contact,$slap)); + return(diaspora_transmit($owner,$contact,$slap,$public_batch)); } -function diaspora_transmit($owner,$contact,$slap) { +function diaspora_transmit($owner,$contact,$slap,$public_batch) { $a = get_app(); - - post_url($contact['notify'] . '/',$slap); + $logid = random_string(4); + logger('diaspora_transmit: ' . $logid . ' ' . (($public_batch) ? $contact['batch'] : $contact['notify'])); + post_url((($public_batch) ? $contact['batch'] : $contact['notify']) . '/',$slap); $return_code = $a->get_curl_code(); - logger('diaspora_transmit: returns: ' . $return_code); + logger('diaspora_transmit: ' . $logid . ' returns: ' . $return_code); - if(! $return_code) { + if((! $return_code) || (($curl_stat == 503) && (stristr($a->get_curl_headers(),'retry-after')))) { logger('diaspora_transmit: queue message'); // queue message for redelivery - q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`) - VALUES ( %d, '%s', '%s', '%s') ", + q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`,`batch`) + VALUES ( %d, '%s', '%s', '%s', %d) ", intval($contact['id']), dbesc(datetime_convert()), dbesc(datetime_convert()), - dbesc($slap) + dbesc($slap), + intval($public_batch) ); } + return(($return_code) ? $return_code : (-1)); } diff --git a/include/email.php b/include/email.php index 1f485e430f..3e6a8186d8 100644 --- a/include/email.php +++ b/include/email.php @@ -4,7 +4,7 @@ function email_connect($mailbox,$username,$password) { if(! function_exists('imap_open')) return false; - $mbox = imap_open($mailbox,$username,$password); + $mbox = @imap_open($mailbox,$username,$password); return $mbox; } @@ -14,19 +14,19 @@ function email_poll($mbox,$email_addr) { if(! ($mbox && $email_addr)) return array(); - $search1 = imap_search($mbox,'FROM "' . $email_addr . '"', SE_UID); + $search1 = @imap_search($mbox,'FROM "' . $email_addr . '"', SE_UID); if(! $search1) $search1 = array(); - $search2 = imap_search($mbox,'TO "' . $email_addr . '"', SE_UID); + $search2 = @imap_search($mbox,'TO "' . $email_addr . '"', SE_UID); if(! $search2) $search2 = array(); - $search3 = imap_search($mbox,'CC "' . $email_addr . '"', SE_UID); + $search3 = @imap_search($mbox,'CC "' . $email_addr . '"', SE_UID); if(! $search3) $search3 = array(); - $search4 = imap_search($mbox,'BCC "' . $email_addr . '"', SE_UID); + $search4 = @imap_search($mbox,'BCC "' . $email_addr . '"', SE_UID); if(! $search4) $search4 = array(); @@ -45,12 +45,12 @@ function construct_mailbox_name($mailacct) { function email_msg_meta($mbox,$uid) { - $ret = (($mbox && $uid) ? imap_fetch_overview($mbox,$uid,FT_UID) : array(array())); + $ret = (($mbox && $uid) ? @imap_fetch_overview($mbox,$uid,FT_UID) : array(array())); return ((count($ret)) ? $ret[0] : array()); } function email_msg_headers($mbox,$uid) { - $raw_header = (($mbox && $uid) ? imap_fetchheader($mbox,$uid,FT_UID) : ''); + $raw_header = (($mbox && $uid) ? @imap_fetchheader($mbox,$uid,FT_UID) : ''); $raw_header = str_replace("\r",'',$raw_header); $ret = array(); $h = split("\n",$raw_header); @@ -74,7 +74,7 @@ function email_msg_headers($mbox,$uid) { function email_get_msg($mbox,$uid) { $ret = array(); - $struc = (($mbox && $uid) ? imap_fetchstructure($mbox,$uid,FT_UID) : null); + $struc = (($mbox && $uid) ? @imap_fetchstructure($mbox,$uid,FT_UID) : null); if(! $struc) return $ret; @@ -103,8 +103,8 @@ function email_get_part($mbox,$uid,$p,$partno) { // DECODE DATA $data = ($partno) - ? imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK) - : imap_body($mbox,$uid,FT_UID|FT_PEEK); + ? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK) + : @imap_body($mbox,$uid,FT_UID|FT_PEEK); // Any part may be encoded, even plain text messages, so check everything. if ($p->encoding==4) @@ -169,6 +169,17 @@ function email_get_part($mbox,$uid,$p,$partno) { function email_header_encode($in_str, $charset) { $out_str = $in_str; + $need_to_convert = false; + + for($x = 0; $x < strlen($in_str); $x ++) { + if((ord($in_str[$x]) == 0) || ((ord($in_str[$x]) > 128))) { + $need_to_convert = true; + } + } + + if(! $need_to_convert) + return $in_str; + if ($out_str && $charset) { // define start delimimter, end delimiter and spacer @@ -205,4 +216,6 @@ function email_header_encode($in_str, $charset) { $out_str = $start . $out_str . $end; } return $out_str; -} \ No newline at end of file +} + + diff --git a/include/group.php b/include/group.php index f21ce42e09..e3c7d33d4a 100644 --- a/include/group.php +++ b/include/group.php @@ -6,8 +6,26 @@ function group_add($uid,$name) { $ret = false; if(x($uid) && x($name)) { $r = group_byname($uid,$name); // check for dups - if($r !== false) + if($r !== false) { + + // This could be a problem. + // Let's assume we've just created a group which we once deleted + // all the old members are gone, but the group remains so we don't break any security + // access lists. What we're doing here is reviving the dead group, but old content which + // was restricted to this group may now be seen by the new group members. + + $z = q("SELECT * FROM `group` WHERE `id` = %d LIMIT 1", + intval($r) + ); + if(count($z) && $z[0]['deleted']) { + $r = q("UPDATE `group` SET `deleted` = 0 WHERE `uid` = %d AND `name` = '%s' LIMIT 1", + intval($uid), + dbesc($name) + ); + notice( t('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.') . EOL); + } return true; + } $r = q("INSERT INTO `group` ( `uid`, `name` ) VALUES( %d, '%s' ) ", intval($uid), @@ -124,7 +142,7 @@ function group_public_members($gid) { $r = q("SELECT `contact`.`id` AS `contact-id` FROM `group_member` LEFT JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id` WHERE `gid` = %d AND `group_member`.`uid` = %d - AND ( `contact`.`network` = '%s' OR `contact`.`notify` = '' )", + AND `contact`.`network` = '%s' AND `contact`.`notify` != '' ", intval($gid), intval(local_user()), dbesc(NETWORK_OSTATUS) @@ -146,15 +164,15 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0 $createtext = t('Create a new group'); $linktext= t('Everybody'); - $selected = (($group_id == 0) ? ' class="group-selected" ' : ''); + $selected = (($group_id == 0) ? ' group-selected' : ''); $o .= <<< EOT -
    +

    Groups

    "; diff --git a/include/html2bbcode.php b/include/html2bbcode.php index d4e8cce666..8025c336bc 100644 --- a/include/html2bbcode.php +++ b/include/html2bbcode.php @@ -24,6 +24,10 @@ function html2bbcode($s) { '/\(.*?)\<\/u\>/is', '/\(.*?)\<\/ul\>/is', '/\(.*?)\<\/li\>/is', + '/\/is', + '/\/is', + '/\/is', + '/\/is', '/\/is', '/\(.*?)\<\/div\>/is', '/\/is', @@ -50,6 +54,10 @@ function html2bbcode($s) { '[u]$1[/u]', '[list]$1[/list]', '[*]$1', + '[img=$2x$4]$6[/img]', + '[img=$4x$2]$6[/img]', + '[img=$4x$6]$2[/img]', + '[img=$6x$4]$2[/img]', '[img]$2[/img]', '$2', "\n", diff --git a/include/items.php b/include/items.php index 150be27070..d907aeddba 100644 --- a/include/items.php +++ b/include/items.php @@ -20,6 +20,8 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) for($x = 2; $x < $a->argc; $x++) { if($a->argv[$x] == 'converse') $converse = true; + if($a->argv[$x] == 'starred') + $starred = true; } } @@ -112,8 +114,10 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`name-date`, `contact`.`uri-date`, `contact`.`avatar-date`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, - `contact`.`id` AS `contact-id`, `contact`.`uid` AS `contact-uid` + `contact`.`id` AS `contact-id`, `contact`.`uid` AS `contact-uid`, + `sign`.`signed_text`, `sign`.`signature`, `sign`.`signer` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`parent` != 0 AND `item`.`wall` = 1 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND ( `item`.`edited` > '%s' OR `item`.`changed` > '%s' ) @@ -363,6 +367,22 @@ function get_atom_elements($feed,$item) { $res['app'] = 'OStatus'; } + // base64 encoded json structure representing Diaspora signature + + $dsig = $item->get_item_tags(NAMESPACE_DFRN,'diaspora_signature'); + if($dsig) { + $res['dsprsig'] = unxmlify($dsig[0]['data']); + } + + $dguid = $item->get_item_tags(NAMESPACE_DFRN,'diaspora_guid'); + if($dguid) + $res['guid'] = unxmlify($dguid[0]['data']); + + $bm = $item->get_item_tags(NAMESPACE_DFRN,'bookmark'); + if($bm) + $res['bookmark'] = ((unxmlify($bm[0]['data']) === 'true') ? 1 : 0); + + /** * If there's a copy of the body content which is guaranteed to have survived mangling in transit, use it. */ @@ -659,6 +679,15 @@ function encode_rel_links($links) { function item_store($arr,$force_parent = false) { + // If a Diaspora signature structure was passed in, pull it out of the + // item array and set it aside for later storage. + + $dsprsig = null; + if(x($arr,'dsprsig')) { + $dsprsig = json_decode(base64_decode($arr['dsprsig'])); + unset($arr['dsprsig']); + } + if($arr['gravity']) $arr['gravity'] = intval($arr['gravity']); elseif($arr['parent-uri'] == $arr['uri']) @@ -688,6 +717,7 @@ function item_store($arr,$force_parent = false) { $arr['owner-avatar'] = ((x($arr,'owner-avatar')) ? notags(trim($arr['owner-avatar'])) : ''); $arr['created'] = ((x($arr,'created') !== false) ? datetime_convert('UTC','UTC',$arr['created']) : datetime_convert()); $arr['edited'] = ((x($arr,'edited') !== false) ? datetime_convert('UTC','UTC',$arr['edited']) : datetime_convert()); + $arr['commented'] = datetime_convert(); $arr['received'] = datetime_convert(); $arr['changed'] = datetime_convert(); $arr['title'] = ((x($arr,'title')) ? notags(trim($arr['title'])) : ''); @@ -708,6 +738,7 @@ function item_store($arr,$force_parent = false) { $arr['deny_cid'] = ((x($arr,'deny_cid')) ? trim($arr['deny_cid']) : ''); $arr['deny_gid'] = ((x($arr,'deny_gid')) ? trim($arr['deny_gid']) : ''); $arr['private'] = ((x($arr,'private')) ? intval($arr['private']) : 0 ); + $arr['bookmark'] = ((x($arr,'bookmark')) ? intval($arr['bookmark']) : 0 ); $arr['body'] = ((x($arr,'body')) ? trim($arr['body']) : ''); $arr['tag'] = ((x($arr,'tag')) ? notags(trim($arr['tag'])) : ''); $arr['attach'] = ((x($arr,'attach')) ? notags(trim($arr['attach'])) : ''); @@ -776,6 +807,14 @@ function item_store($arr,$force_parent = false) { } } + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($arr['uri']), + dbesc($arr['uid']) + ); + if($r && count($r)) { + logger('item-store: duplicate item ignored. ' . print_r($arr,true)); + return 0; + } call_hooks('post_remote',$arr); @@ -835,6 +874,24 @@ function item_store($arr,$force_parent = false) { intval($current_post) ); + // update the commented timestamp on the parent + + q("UPDATE `item` set `commented` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1", + dbesc(datetime_convert()), + dbesc(datetime_convert()), + intval($parent_id) + ); + + if($dsprsig) { + q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ", + intval($current_post), + dbesc($dsprsig->signed_text), + dbesc($dsprsig->signature), + dbesc($dsprsig->signer) + ); + } + + /** * If this is now the last-child, force all _other_ children of this parent to *not* be last-child */ @@ -894,7 +951,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { if(! $curl_stat) return(-1); // timed out - logger('dfrn_deliver: ' . $xml); + logger('dfrn_deliver: ' . $xml, LOGGER_DATA); if(! $xml) return 3; @@ -958,7 +1015,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { $key = substr(random_string(),0,16); $data = bin2hex(aes_encrypt($postvars['data'],$key)); $postvars['data'] = $data; - logger('rino: sent key = ' . $key); + logger('rino: sent key = ' . $key, LOGGER_DEBUG); if($dfrn_version >= 2.1) { @@ -993,6 +1050,9 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { if((! $curl_stat) || (! strlen($xml))) return(-1); // timed out + if(($curl_stat == 503) && (stristr($a->get_curl_headers(),'retry-after'))) + return(-1); + if(strpos($xml,' $a->config['sitename'] )); $res = mail($r[0]['email'], - t("You have a new follower at ") . $a->config['sitename'], + (($sharing) ? t('A new person is sharing with you at ') : t("You have a new follower at ")) . $a->config['sitename'], $email, 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n" . 'Content-type: text/plain; charset=UTF-8' . "\n" @@ -1565,14 +1638,32 @@ function lose_follower($importer,$contact,$datarray,$item) { } } +function lose_sharer($importer,$contact,$datarray,$item) { -function subscribe_to_hub($url,$importer,$contact) { + if(($contact['rel'] == CONTACT_IS_FRIEND) || ($contact['rel'] == CONTACT_IS_FOLLOWER)) { + q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d LIMIT 1", + intval(CONTACT_IS_FOLLOWER), + intval($contact['id']) + ); + } + else { + contact_remove($contact['id']); + } +} + + +function subscribe_to_hub($url,$importer,$contact,$submode = 'subscribe') { if(is_array($importer)) { $r = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1", intval($importer['uid']) ); } + + // Diaspora has different message-ids in feeds than they do + // through the direct Diaspora protocol. If we try and use + // the feed, we'll get duplicates. So don't. + if((! count($r)) || $contact['network'] === NETWORK_DIASPORA) return; @@ -1582,7 +1673,7 @@ function subscribe_to_hub($url,$importer,$contact) { $verify_token = ((strlen($contact['hub-verify'])) ? $contact['hub-verify'] : random_string()); - $params= 'hub.mode=subscribe&hub.callback=' . urlencode($push_url) . '&hub.topic=' . urlencode($contact['poll']) . '&hub.verify=async&hub.verify_token=' . $verify_token; + $params= 'hub.mode=' . $hubmode . '&hub.callback=' . urlencode($push_url) . '&hub.topic=' . urlencode($contact['poll']) . '&hub.verify=async&hub.verify_token=' . $verify_token; logger('subscribe_to_hub: subscribing ' . $contact['name'] . ' to hub ' . $url . ' with verifier ' . $verify_token); @@ -1670,10 +1761,21 @@ function atom_entry($item,$type,$author,$owner,$comment = false) { $o .= '1' . "\r\n"; if($item['extid']) - $o .= '' . $item['extid'] . '' . "\r\n"; + $o .= '' . xmlify($item['extid']) . '' . "\r\n"; + if($item['bookmark']) + $o .= 'true' . "\r\n"; if($item['app']) - $o .= ''; + $o .= '' . "\r\n"; + + if($item['guid']) + $o .= '' . $item['guid'] . '' . "\r\n"; + + if($item['signed_text']) { + $sign = base64_encode(json_encode(array('signed_text' => $item['signed_text'],'signature' => $item['signature'],'signer' => $item['signer']))); + $o .= '' . xmlify($sign) . '' . "\r\n"; + } + $verb = construct_verb($item); $o .= '' . xmlify($verb) . '' . "\r\n"; $actobj = construct_activity_object($item); diff --git a/include/nav.php b/include/nav.php index 895c321e6a..16ec941aa8 100644 --- a/include/nav.php +++ b/include/nav.php @@ -37,11 +37,29 @@ function nav(&$a) { * Display login or logout */ + $nav['usermenu']=array(); + $userinfo = null; + if(local_user()) { $nav['logout'] = Array('logout',t('Logout'), "", t('End this session')); + + // user menu + $nav['usermenu'][] = Array('profile/' . $a->user['nickname'], t('Status'), "", t('Your posts and conversations')); + $nav['usermenu'][] = Array('profile/' . $a->user['nickname']. '?tab=profile', t('Profile'), "", t('Your profile page')); + $nav['usermenu'][] = Array('photos/' . $a->user['nickname'], t('Photos'), "", t('Your photos')); + $nav['usermenu'][] = Array('events/', t('Events'), "", t('Your events')); + $nav['usermenu'][] = Array('notes/', t('Personal notes'), "", t('Your personal photos')); + + // user info + $r = q("SELECT micro FROM contact WHERE uid=%d AND self=1", intval($a->user['uid'])); + $userinfo = array( + 'icon' => (count($r) ? $r[0]['micro']: $a->get_baseurl()."/images/default-profile-mm.jpg"), + 'name' => $a->user['username'], + ); + } else { - $nav['login'] = Array('login',t('Login'), ($a->module == 'login'?'nav-selected':''), t('Sign in')); + $nav['login'] = Array('login',t('Login'), ($a->module == 'login'?'selected':''), t('Sign in')); } @@ -63,7 +81,7 @@ function nav(&$a) { if(! get_config('system','hide_help')) $nav['help'] = array($help_url, t('Help'), "", t('Help and documentation')); - if($a->apps) + if(count($a->apps)>0) $nav['apps'] = array('apps', t('Apps'), "", t('Addon applications, utilities, games')); $nav['search'] = array('search', t('Search'), "", t('Search site content')); @@ -137,8 +155,31 @@ function nav(&$a) { '$sitelocation' => $sitelocation, '$nav' => $nav, '$banner' => $banner, + '$emptynotifications' => t('Nothing new here'), + '$userinfo' => $userinfo, + '$sel' => $a->nav_sel, + '$apps' => $a->apps, )); call_hooks('page_header', $a->page['nav']); - +} + +/* + * Set a menu item in navbar as selected + * + */ +function nav_set_selected($item){ + $a = get_app(); + $a->nav_sel = array( + 'community' => null, + 'network' => null, + 'home' => null, + 'profiles' => null, + 'notifications' => null, + 'messages' => null, + 'directory' => null, + 'settings' => null, + 'contacts' => null, + ); + $a->nav_sel[$item] = 'selected'; } diff --git a/include/network.php b/include/network.php index f0dd828d14..ec99d1e0dc 100644 --- a/include/network.php +++ b/include/network.php @@ -9,37 +9,37 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0) { $a = get_app(); - $ch = curl_init($url); + $ch = @curl_init($url); if(($redirects > 8) || (! $ch)) return false; - curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); - curl_setopt($ch, CURLOPT_USERAGENT, "Friendika"); + @curl_setopt($ch, CURLOPT_HEADER, true); + @curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); + @curl_setopt($ch, CURLOPT_USERAGENT, "Friendika"); if(intval($timeout)) { - curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + @curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); } else { $curl_time = intval(get_config('system','curl_timeout')); - curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); + @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); } // by default we will allow self-signed certs // but you can override this $check_cert = get_config('system','verifyssl'); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); + @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); $prx = get_config('system','proxy'); if(strlen($prx)) { - curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); - curl_setopt($ch, CURLOPT_PROXY, $prx); - $prxusr = get_config('system','proxyuser'); + @curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); + @curl_setopt($ch, CURLOPT_PROXY, $prx); + $prxusr = @get_config('system','proxyuser'); if(strlen($prxusr)) - curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); + @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); } if($binary) - curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); + @curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); $a->set_curl_code(0); @@ -49,7 +49,7 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0) { $s = @curl_exec($ch); $base = $s; - $curl_info = curl_getinfo($ch); + $curl_info = @curl_getinfo($ch); $http_code = $curl_info['http_code']; $header = ''; @@ -80,7 +80,7 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0) { $a->set_curl_headers($header); - curl_close($ch); + @curl_close($ch); return($body); }} @@ -259,22 +259,29 @@ function convert_xml_element_to_array($xml_element, &$recursion_depth=0) { // or if the resultant personal XRD doesn't contain a supported // subscription/friend-request attribute. +// amended 7/9/2011 to return an hcard which could save potentially loading +// a lengthy content page to scrape dfrn attributes + if(! function_exists('webfinger_dfrn')) { -function webfinger_dfrn($s) { +function webfinger_dfrn($s,&$hcard) { if(! strstr($s,'@')) { return $s; } + $profile_link = ''; + $links = webfinger($s); logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA); if(count($links)) { - foreach($links as $link) + foreach($links as $link) { if($link['@attributes']['rel'] === NAMESPACE_DFRN) - return $link['@attributes']['href']; - foreach($links as $link) + $profile_link = $link['@attributes']['href']; if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) - return 'stat:' . $link['@attributes']['template']; + $profile_link = 'stat:' . $link['@attributes']['template']; + if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard') + $hcard = $link['@attributes']['href']; + } } - return ''; + return $profile_link; }} // Given an email style address, perform webfinger lookup and @@ -536,7 +543,7 @@ function fetch_xrd_links($url) { $aliases = array($alias); else $aliases = $alias; - if($aliases && count($aliases)) { + if(is_array($aliases) && count($aliases)) { foreach($aliases as $alias) { $links[]['@attributes'] = array('rel' => 'alias' , 'href' => $alias); } @@ -694,24 +701,59 @@ function parse_xml_string($s,$strict = true) { return $x; }} -function add_fcontact($arr) { +function add_fcontact($arr,$update = false) { - $r = q("insert into fcontact ( `url`,`name`,`photo`,`request`,`nick`,`addr`, - `notify`,`poll`,`confirm`,`network`,`alias`,`pubkey`,`updated` ) - values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", - dbesc($arr['url']), - dbesc($arr['name']), - dbesc($arr['photo']), - dbesc($arr['request']), - dbesc($arr['nick']), - dbesc($arr['addr']), - dbesc($arr['notify']), - dbesc($arr['poll']), - dbesc($arr['confirm']), - dbesc($arr['network']), - dbesc($arr['alias']), - dbesc($arr['pubkey']), - dbesc(datetime_convert()) - ); + if($update) { + $r = q("UPDATE `fcontact` SET + `name` = '%s', + `photo` = '%s', + `request` = '%s', + `nick` = '%s', + `addr` = '%s', + `batch` = '%s', + `notify` = '%s', + `poll` = '%s', + `confirm` = '%s', + `alias` = '%s', + `pubkey` = '%s', + `updated` = '%s' + WHERE `url` = '%s' AND `network` = '%s' LIMIT 1", + dbesc($arr['name']), + dbesc($arr['photo']), + dbesc($arr['request']), + dbesc($arr['nick']), + dbesc($arr['addr']), + dbesc($arr['batch']), + dbesc($arr['notify']), + dbesc($arr['poll']), + dbesc($arr['confirm']), + dbesc($arr['network']), + dbesc($arr['alias']), + dbesc($arr['pubkey']), + dbesc(datetime_convert()), + dbesc($arr['url']), + dbesc($arr['network']) + ); + } + else { + $r = q("insert into fcontact ( `url`,`name`,`photo`,`request`,`nick`,`addr`, + `batch`, `notify`,`poll`,`confirm`,`network`,`alias`,`pubkey`,`updated` ) + values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", + dbesc($arr['url']), + dbesc($arr['name']), + dbesc($arr['photo']), + dbesc($arr['request']), + dbesc($arr['nick']), + dbesc($arr['addr']), + dbesc($arr['batch']), + dbesc($arr['notify']), + dbesc($arr['poll']), + dbesc($arr['confirm']), + dbesc($arr['network']), + dbesc($arr['alias']), + dbesc($arr['pubkey']), + dbesc(datetime_convert()) + ); + } return $r; } diff --git a/include/notifier.php b/include/notifier.php index 7b645844f6..d1cd1cc739 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -1,6 +1,21 @@ UTC_TIMESTAMP - INTERVAL 10 MINUTE", + AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP() - INTERVAL 10 MINUTE", intval($item_id) ); $uid = $item_id; @@ -79,6 +96,8 @@ function notifier_run($argv, $argc){ } elseif($cmd === 'suggest') { $normal_mode = false; + $fsuggest = true; + $suggest = q("SELECT * FROM `fsuggest` WHERE `id` = %d LIMIT 1", intval($item_id) ); @@ -104,7 +123,11 @@ function notifier_run($argv, $argc){ $uid = $r[0]['uid']; $updated = $r[0]['edited']; - $items = q("SELECT * FROM `item` WHERE `parent` = %d ORDER BY `id` ASC", + if(! $parent_id) + return; + + $items = q("SELECT `item`.*, `sign`.`signed_text`,`sign`.`signature`,`sign`.`signer` + FROM `item` LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `parent` = %d ORDER BY `id` ASC", intval($parent_id) ); @@ -119,8 +142,11 @@ function notifier_run($argv, $argc){ $item['deleted'] = 1; } - if(count($items) == 1 && $items[0]['uri'] === $items[0]['parent-uri']) + if((count($items) == 1) && ($items[0]['uri'] === $items[0]['parent-uri'])) { + logger('notifier: top level post'); $top_level = true; + } + } $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`, @@ -136,6 +162,8 @@ function notifier_run($argv, $argc){ $owner = $r[0]; + $walltowall = ((($top_level) && ($owner['id'] != $items[0]['contact-id'])) ? true : false); + $hub = get_config('system','huburl'); // If this is a public conversation, notify the feed hub @@ -144,7 +172,7 @@ function notifier_run($argv, $argc){ // fill this in with a single salmon slap if applicable $slap = ''; - if($cmd != 'mail' && $cmd != 'suggest') { + if(! ($mail || $fsuggest)) { require_once('include/group.php'); @@ -235,7 +263,6 @@ function notifier_run($argv, $argc){ $r = q("SELECT * FROM `contact` WHERE `id` IN ( $conversant_str ) AND `blocked` = 0 AND `pending` = 0"); - if(count($r)) $contacts = $r; } @@ -270,7 +297,7 @@ function notifier_run($argv, $argc){ '$birthday' => $birthday )); - if($cmd === 'mail') { + if($mail) { $public_message = false; // mail is not public $body = fix_private_photos($item['body'],$owner['uid']); @@ -286,7 +313,7 @@ function notifier_run($argv, $argc){ '$parent_id' => xmlify($item['parent-uri']) )); } - elseif($cmd === 'suggest') { + elseif($fsuggest) { $public_message = false; // suggestions are not public $sugg_template = get_markup_template('atom_suggest.tpl'); @@ -374,17 +401,45 @@ function notifier_run($argv, $argc){ dbesc($recip_str) ); - // delivery loop require_once('include/salmon.php'); + $interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval'))); + + // delivery loop + if(count($r)) { + + foreach($r as $contact) { + if((! $mail) && (! $fsuggest) && (! $followup) && (! $contact['self'])) { + if(($contact['network'] === NETWORK_DIASPORA) && ($public_message)) + continue; + q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )", + dbesc($cmd), + intval($item_id), + intval($contact['id']) + ); + } + } + foreach($r as $contact) { if($contact['self']) continue; + // potentially more than one recipient. Start a new process and space them out a bit. + // we will deliver single recipient types of message and email receipients here. + + if((! $mail) && (! $fsuggest) && (! $followup)) { + proc_run('php','include/delivery.php',$cmd,$item_id,$contact['id']); + if($interval) + @time_sleep_until(microtime(true) + (float) $interval); + continue; + } + $deliver_status = 0; + logger("main delivery by notifier: followup=$followup mail=$mail fsuggest=$fsuggest"); + switch($contact['network']) { case NETWORK_DFRN: logger('notifier: dfrndelivery: ' . $contact['name']); @@ -533,9 +588,19 @@ function notifier_run($argv, $argc){ break; case NETWORK_DIASPORA: require_once('include/diaspora.php'); + if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode)) break; + // special handling for followup to public post + // all other public posts processed as public batches further below + + if($public_message) { + if($followup) + diaspora_send_followup($target_item,$owner,$contact, true); + break; + } + if(! $contact['pubkey']) break; @@ -558,7 +623,8 @@ function notifier_run($argv, $argc){ diaspora_send_relay($target_item,$owner,$contact); break; } - elseif($top_level) { + elseif(($top_level) && (! $walltowall)) { + // currently no workable solution for sending walltowall diaspora_send_status($target_item,$owner,$contact); break; } @@ -589,109 +655,77 @@ function notifier_run($argv, $argc){ } } - if((strlen($hub)) && ($public_message)) { - $hubs = explode(',', $hub); - if(count($hubs)) { - foreach($hubs as $h) { - $h = trim($h); - if(! strlen($h)) - continue; - $params = 'hub.mode=publish&hub.url=' . urlencode($a->get_baseurl() . '/dfrn_poll/' . $owner['nickname'] ); - post_url($h,$params); - logger('pubsub: publish: ' . $h . ' ' . $params . ' returned ' . $a->get_curl_code()); - if(count($hubs) > 1) - sleep(7); // try and avoid multiple hubs responding at precisely the same time - } - } - } if($public_message) { - /** - * - * If you have less than 999 dfrn friends and it's a public message, - * we'll just go ahead and push them out securely with dfrn/rino or Diaspora. - * If you've got more than that, you'll have to rely on PuSH delivery. - * - */ - - $max_allowed = ((get_config('system','maxpubdeliver') === false) ? 999 : intval(get_config('system','maxpubdeliver'))); - - /** - * - * Only get the bare essentials and go back for the full record. - * If you've got a lot of friends and we grab all the details at once it could exhaust memory. - * - */ - - $r = q("SELECT `id`, `name` FROM `contact` - WHERE `network` in ('%s','%s') AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 - AND `rel` != %d ", - dbesc(NETWORK_DFRN), + $r1 = q("SELECT DISTINCT(`batch`), `id`, `name`,`network` FROM `contact` WHERE `network` = '%s' + AND `uid` = %d AND `rel` != %d ORDER BY rand() ", dbesc(NETWORK_DIASPORA), intval($owner['uid']), intval(CONTACT_IS_SHARING) ); + + $r2 = q("SELECT `id`, `name`,`network` FROM `contact` + WHERE `network` = '%s' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 + AND `rel` != %d order by rand() ", + dbesc(NETWORK_DFRN), + intval($owner['uid']), + intval(CONTACT_IS_SHARING) + ); - if((count($r)) && (($max_allowed == 0) || (count($r) < $max_allowed))) { + $r = array_merge($r2,$r1); - logger('pubdeliver: ' . print_r($r,true)); + if(count($r)) { + logger('pubdeliver: ' . print_r($r,true), LOGGER_DEBUG); + + // throw everything into the queue in case we get killed + + foreach($r as $rr) { + if((! $mail) && (! $fsuggest) && (! $followup)) { + q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )", + dbesc($cmd), + intval($item_id), + intval($rr['id']) + ); + } + } foreach($r as $rr) { - /* Don't deliver to folks who have already been delivered to */ + // except for Diaspora batch jobs + // Don't deliver to folks who have already been delivered to - if(in_array($rr['id'],$conversants)) + if(($rr['network'] !== NETWORK_DIASPORA) && (in_array($rr['id'],$conversants))) { + logger('notifier: already delivered id=' . $rr['id']); continue; + } - $n = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", - intval($rr['id']) - ); - - if(count($n)) { - $contact = $n[0]; - switch($contact['network']) { - case NETWORK_DFRN : - logger('notifier: dfrnpubdelivery: ' . $contact['name']); - $deliver_status = dfrn_deliver($owner,$contact,$atom); - break; - case NETWORK_DIASPORA : - require_once('include/diaspora.php'); - if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode)) - break; - - if(! $contact['pubkey']) - break; - - if($target_item['verb'] === ACTIVITY_DISLIKE) { - // unsupported - break; - } - elseif(($target_item['deleted']) && ($target_item['verb'] !== ACTIVITY_LIKE)) { - // diaspora delete, - diaspora_send_retraction($target_item,$owner,$contact); - break; - } - elseif($followup) { - // send comments, likes and retractions of likes to owner to relay - diaspora_send_followup($target_item,$owner,$contact); - break; - } - elseif($target_item['parent'] != $target_item['id']) { - // we are the relay - send comments, likes and unlikes to our conversants - diaspora_send_relay($target_item,$owner,$contact); - break; - } - elseif($top_level) { - diaspora_send_status($target_item,$owner,$contact); - break; - } - default: - break; - } + if((! $mail) && (! $fsuggest) && (! $followup)) { + logger('notifier: delivery agent: ' . $rr['name'] . ' ' . $rr['id']); + proc_run('php','include/delivery.php',$cmd,$item_id,$rr['id']); + if($interval) + @time_sleep_until(microtime(true) + (float) $interval); } } } + + + if(strlen($hub)) { + $hubs = explode(',', $hub); + if(count($hubs)) { + foreach($hubs as $h) { + $h = trim($h); + if(! strlen($h)) + continue; + $params = 'hub.mode=publish&hub.url=' . urlencode($a->get_baseurl() . '/dfrn_poll/' . $owner['nickname'] ); + post_url($h,$params); + logger('pubsub: publish: ' . $h . ' ' . $params . ' returned ' . $a->get_curl_code()); + if(count($hubs) > 1) + sleep(7); // try and avoid multiple hubs responding at precisely the same time + } + } + } + } return; diff --git a/include/pgettext.php b/include/pgettext.php index 49f1007370..83e76ba9d6 100644 --- a/include/pgettext.php +++ b/include/pgettext.php @@ -90,8 +90,11 @@ if(! function_exists('load_translation_table')) { function load_translation_table($lang) { global $a; - if(file_exists("view/$lang/strings.php")) + if(file_exists("view/$lang/strings.php")) { include("view/$lang/strings.php"); + } + else + $a->strings = array(); }} // translate string if translation exists @@ -110,12 +113,15 @@ function t($s) { if(! function_exists('tt')){ function tt($singular, $plural, $count){ - + global $lang; $a = get_app(); if(x($a->strings,$singular)) { $t = $a->strings[$singular]; - $k = string_plural_select($count); + $f = 'string_plural_select_' . str_replace('-','_',$lang); + if(! function_exists($f)) + $f = 'string_plural_select_default'; + $k = $f($count); return is_array($t)?$t[$k]:$t; } @@ -124,4 +130,13 @@ function tt($singular, $plural, $count){ } else { return $singular; } -}} \ No newline at end of file +}} + +// provide a fallback which will not collide with +// a function defined in any language file + +if(! function_exists('string_plural_select_default')) { +function string_plural_select_default($n) { + return ($n != 1); +}} + diff --git a/include/poller.php b/include/poller.php index e80b696bf8..89a3408ec9 100644 --- a/include/poller.php +++ b/include/poller.php @@ -38,6 +38,18 @@ function poller_run($argv, $argc){ proc_run('php',"include/queue.php"); + // expire any expired accounts + + q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0 + AND `account_expires_on` != '0000-00-00 00:00:00' + AND `account_expires_on` < UTC_TIMESTAMP() "); + + $abandon_days = intval(get_config('system','account_abandon_days')); + if($abandon_days < 1) + $abandon_days = 0; + + + // once daily run expire in background $d1 = get_config('system','last_expire_day'); @@ -86,11 +98,17 @@ function poller_run($argv, $argc){ // and which have a polling address and ignore Diaspora since // we are unable to match those posts with a Diaspora GUID and prevent duplicates. - $contacts = q("SELECT `id` FROM `contact` + $abandon_sql = (($abandon_days) + ? sprintf(" AND `user`.`login_date` > UTC_TIMESTAMP() - INTERVAL %d DAY ", intval($abandon_days)) + : '' + ); + + $contacts = q("SELECT `contact`.`id` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != '' AND `network` != '%s' $sql_extra - AND `self` = 0 AND `blocked` = 0 AND `readonly` = 0 ORDER BY RAND()", + AND `self` = 0 AND `contact`.`blocked` = 0 AND `contact`.`readonly` = 0 + AND `user`.`account_expired` = 0 $abandon_sql ORDER BY RAND()", intval(CONTACT_IS_SHARING), intval(CONTACT_IS_FRIEND), dbesc(NETWORK_DIASPORA) @@ -137,6 +155,8 @@ function poller_run($argv, $argc){ if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force) $hub_update = true; } + else + $hub_update = false; /** * Based on $contact['priority'], should we poll this site now? Or later? @@ -472,21 +492,25 @@ function poller_run($argv, $argc){ consume_feed($xml,$importer,$contact,$hub,1); + $hubmode = 'subscribe'; + if($contact['network'] === NETWORK_DFRN || $contact['blocked'] || $contact['readonly']) + $hubmode = 'unsubscribe'; - if((strlen($hub)) && ($hub_update) && (($contact['rel'] == CONTACT_IS_FRIEND) || (($contact['network'] === NETWORK_OSTATUS) && (! $contact['readonly'])))) { - logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']); + if((strlen($hub)) && ($hub_update) && ($contact['rel'] != CONTACT_IS_FOLLOWER)) { + logger('poller: hub ' . $hubmode . ' : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']); $hubs = explode(',', $hub); if(count($hubs)) { foreach($hubs as $h) { $h = trim($h); if(! strlen($h)) continue; - subscribe_to_hub($h,$importer,$contact); + subscribe_to_hub($h,$importer,$contact,$hubmode); } } } } + $updated = datetime_convert(); $r = q("UPDATE `contact` SET `last-update` = '%s', `success_update` = '%s' WHERE `id` = %d LIMIT 1", diff --git a/include/profile_advanced.php b/include/profile_advanced.php index c1dfad66f4..22e035fe64 100644 --- a/include/profile_advanced.php +++ b/include/profile_advanced.php @@ -12,8 +12,8 @@ if($a->profile['name']) { $o .= <<< EOT
    -
    $lbl_fullname
    -
    $fullname
    +
    $lbl_fullname
    +
    $fullname
    EOT; @@ -25,8 +25,8 @@ if($a->profile['gender']) { $o .= <<< EOT
    -
    $lbl_gender
    -
    $gender
    +
    $lbl_gender
    +
    $gender
    EOT; @@ -37,7 +37,7 @@ if(($a->profile['dob']) && ($a->profile['dob'] != '0000-00-00')) { $o .= <<< EOT
    -
    $lbl_birthday
    +
    $lbl_birthday
    EOT; // If no year, add an arbitrary one so just we can parse the month and day. @@ -45,7 +45,7 @@ EOT; $year_bd_format = t('j F, Y'); $short_bd_format = t('j F'); -$o .= '
    ' +$o .= '
    ' . ((intval($a->profile['dob'])) ? day_translate(datetime_convert('UTC','UTC',$a->profile['dob'] . ' 00:00 +00:00',$year_bd_format)) : day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],6) . ' 00:00 +00:00',$short_bd_format))) @@ -59,8 +59,8 @@ if($age = age($a->profile['dob'],$a->profile['timezone'],'')) { $lbl_age = t('Age:'); $o .= <<< EOT
    -
    $lbl_age
    -
    $age
    +
    $lbl_age
    +
    $age
    EOT; @@ -72,8 +72,8 @@ if($a->profile['marital']) { $o .= <<< EOT
    -
    $lbl_marital
    -
    $marital
    +
    $lbl_marital
    +
    $marital
    EOT; if($a->profile['with']) { @@ -92,8 +92,8 @@ if($a->profile['sexual']) { $o .= <<< EOT
    -
    $lbl_sexual
    -
    $sexual
    +
    $lbl_sexual
    +
    $sexual
    EOT; @@ -104,8 +104,8 @@ if($a->profile['homepage']) { $homepage = linkify($a->profile['homepage']); $o .= <<< EOT
    -
    $lbl_homepage
    -
    $homepage
    +
    $lbl_homepage
    +
    $homepage
    EOT; @@ -116,8 +116,8 @@ if($a->profile['politic']) { $politic = $a->profile['politic']; $o .= <<< EOT
    -
    $lbl_politic
    -
    $politic
    +
    $lbl_politic
    +
    $politic
    EOT; @@ -128,8 +128,8 @@ if($a->profile['religion']) { $religion = $a->profile['religion']; $o .= <<< EOT
    -
    $lbl_religion
    -
    $religion
    +
    $lbl_religion
    +
    $religion
    EOT; @@ -138,9 +138,9 @@ if($txt = prepare_text($a->profile['about'])) { $lbl_about = t('About:'); $o .= <<< EOT
    -
    $lbl_about
    +
    $lbl_about

    -
    $txt
    +
    $txt
    EOT; @@ -150,9 +150,9 @@ if($txt = prepare_text($a->profile['interest'])) { $lbl_interests = t('Hobbies/Interests:'); $o .= <<< EOT
    -
    $lbl_interests
    +
    $lbl_interests

    -
    $txt
    +
    $txt
    EOT; @@ -162,9 +162,9 @@ if($txt = prepare_text($a->profile['contact'])) { $lbl_contact = t('Contact information and Social Networks:'); $o .= <<< EOT
    -
    $lbl_contact
    +
    $lbl_contact

    -
    $txt
    +
    $txt
    EOT; @@ -174,9 +174,9 @@ if($txt = prepare_text($a->profile['music'])) { $lbl_music = t('Musical interests:'); $o .= <<< EOT
    -
    $lbl_music
    +
    $lbl_music

    -
    $txt
    +
    $txt
    EOT; @@ -186,9 +186,9 @@ if($txt = prepare_text($a->profile['book'])) { $lbl_book = t('Books, literature:'); $o .= <<< EOT
    -
    $lbl_book
    +
    $lbl_book

    -
    $txt
    +
    $txt
    EOT; @@ -198,9 +198,9 @@ if($txt = prepare_text($a->profile['tv'])) { $lbl_tv = t('Television:'); $o .= <<< EOT
    -
    $lbl_tv
    +
    $lbl_tv

    -
    $txt
    +
    $txt
    EOT; @@ -210,9 +210,9 @@ if($txt = prepare_text($a->profile['film'])) { $lbl_film = t('Film/dance/culture/entertainment:'); $o .= <<< EOT
    -
    $lbl_film
    +
    $lbl_film

    -
    $txt
    +
    $txt
    EOT; @@ -222,9 +222,9 @@ if($txt = prepare_text($a->profile['romance'])) { $lbl_romance = t('Love/Romance:'); $o .= <<< EOT
    -
    $lbl_romance
    +
    $lbl_romance

    -
    $txt
    +
    $txt
    EOT; @@ -234,9 +234,9 @@ if($txt = prepare_text($a->profile['work'])) { $lbl_work = t('Work/employment:'); $o .= <<< EOT
    -
    $lbl_work
    +
    $lbl_work

    -
    $txt
    +
    $txt
    EOT; @@ -246,9 +246,9 @@ if($txt = prepare_text($a->profile['education'])) { $lbl_education = t('School/education:'); $o .= <<< EOT
    -
    $lbl_education
    +
    $lbl_education

    -
    $txt
    +
    $txt
    EOT; diff --git a/include/queue.php b/include/queue.php index da5028aee5..d312b50f5a 100644 --- a/include/queue.php +++ b/include/queue.php @@ -3,18 +3,18 @@ require_once("boot.php"); require_once('include/queue_fn.php'); function queue_run($argv, $argc){ - global $a, $db; + global $a, $db; - if(is_null($a)){ - $a = new App; - } + if(is_null($a)){ + $a = new App; + } - if(is_null($db)){ - @include(".htconfig.php"); - require_once("dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; + if(is_null($db)){ + @include(".htconfig.php"); + require_once("dba.php"); + $db = new dba($db_host, $db_user, $db_pass, $db_data); + unset($db_host, $db_user, $db_pass, $db_data); + }; require_once("session.php"); @@ -29,10 +29,27 @@ function queue_run($argv, $argc){ load_hooks(); + if($argc > 1) + $queue_id = intval($argv[1]); + else + $queue_id = 0; + $deadguys = array(); logger('queue: start'); + $interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval'))); + + $r = q("select * from deliverq where 1"); + if(count($r)) { + foreach($r as $rr) { + logger('queue: deliverq'); + proc_run('php','include/delivery.php',$rr['cmd'],$rr['item'],$rr['contact']); + if($interval) + @time_sleep_until(microtime(true) + (float) $interval); + } + } + $r = q("SELECT `queue`.*, `contact`.`name`, `contact`.`uid` FROM `queue` LEFT JOIN `contact` ON `queue`.`cid` = `contact`.`id` WHERE `queue`.`created` < UTC_TIMESTAMP() - INTERVAL 3 DAY"); @@ -44,13 +61,19 @@ function queue_run($argv, $argc){ q("DELETE FROM `queue` WHERE `created` < UTC_TIMESTAMP() - INTERVAL 3 DAY"); } - $r = q("SELECT `id` FROM `queue` WHERE `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE "); + if($queue_id) + $r = q("SELECT `id` FROM `queue` WHERE `id` = %d LIMIT 1", + intval($queue_id) + ); + else + $r = q("SELECT `id` FROM `queue` WHERE `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE "); if(! count($r)){ return; } - call_hooks('queue_predeliver', $a, $r); + if(! $queue_id) + call_hooks('queue_predeliver', $a, $r); // delivery loop @@ -63,9 +86,16 @@ function queue_run($argv, $argc){ // queue_predeliver hooks may have changed the queue db details, // so check again if this entry still needs processing - $qi = q("SELECT * FROM `queue` WHERE `id` = %d AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ", - intval($q_item['id']) - ); + if($queue_id) { + $qi = q("select * from queue where `id` = %d limit 1", + intval($queue_id) + ); + } + else { + $qi = q("SELECT * FROM `queue` WHERE `id` = %d AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ", + intval($q_item['id']) + ); + } if(! count($qi)) continue; @@ -83,7 +113,8 @@ function queue_run($argv, $argc){ continue; } - $u = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", + $u = q("SELECT `user`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey` + FROM `user` WHERE `uid` = %d LIMIT 1", intval($c[0]['uid']) ); if(! count($u)) { @@ -92,6 +123,7 @@ function queue_run($argv, $argc){ } $data = $qi[0]['content']; + $public = $qi[0]['batch']; $contact = $c[0]; $owner = $u[0]; @@ -124,7 +156,7 @@ function queue_run($argv, $argc){ case NETWORK_DIASPORA: if($contact['notify']) { logger('queue: diaspora_delivery: item ' . $q_item['id'] . ' for ' . $contact['name']); - $deliver_status = diaspora_transmit($owner,$contact['notify'],$data); + $deliver_status = diaspora_transmit($owner,$contact,$data,$public); if($deliver_status == (-1)) update_queue_time($q_item['id']); diff --git a/include/salmon.php b/include/salmon.php index 4043b4f1d9..3d525f51ad 100644 --- a/include/salmon.php +++ b/include/salmon.php @@ -73,6 +73,13 @@ function slapper($owner,$url,$slap) { if(! strlen($url)) return; + + if(! $owner['sprvkey']) { + logger(sprintf("slapper: user '%s' (%d) does not have a salmon private key. Send failed.", + $owner['username'],$owner['uid'])); + return; + } + // add all namespaces to item $namespaces = <<< EOT @@ -102,11 +109,11 @@ EOT; $precomputed = '.YXBwbGljYXRpb24vYXRvbSt4bWw=.YmFzZTY0dXJs.UlNBLVNIQTI1Ng=='; - $signature = base64url_encode(rsa_sign(str_replace('=','',$data . $precomputed),true),$owner['sprvkey']); + $signature = base64url_encode(rsa_sign(str_replace('=','',$data . $precomputed),$owner['sprvkey'])); - $signature2 = base64url_encode(rsa_sign($data . $precomputed),$owner['sprvkey']); + $signature2 = base64url_encode(rsa_sign($data . $precomputed,$owner['sprvkey'])); - $signature3 = base64url_encode(rsa_sign($data),$owner['sprvkey']); + $signature3 = base64url_encode(rsa_sign($data,$owner['sprvkey'])); $salmon_tpl = get_markup_template('magicsig.tpl'); @@ -180,6 +187,9 @@ EOT; logger('slapper returned ' . $return_code); if(! $return_code) return(-1); + if(($return_code == 503) && (stristr($a->get_curl_headers(),'retry-after'))) + return(-1); + return ((($return_code >= 200) && ($return_code < 300)) ? 0 : 1); } diff --git a/include/template_processor.php b/include/template_processor.php index 83f680f026..63d75eaa4e 100644 --- a/include/template_processor.php +++ b/include/template_processor.php @@ -1,5 +1,6 @@
    ";
    +			debug_print_backtrace();
    +			die();
     		}
     		
     		private function _build_replace($r, $prefix){
    @@ -153,7 +159,8 @@
     			krsort($this->nodes);
     			return $s;
     		}
    -		
    +
    +	
     		public function replace($s, $r) {
     			$this->r = $r;
     			$this->search = array();
    @@ -166,14 +173,35 @@
     			$s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s);
     			if ($s==Null) $this->_preg_error();
     			
    +			// remove comments block
    +			$s = preg_replace('/{#[^#]*#}/', "" , $s);
    +						
     			// replace strings recursively (limit to 10 loops)
     			$os = ""; $count=0;
     			while($os!=$s && $count<10){
     				$os=$s; $count++;
     				$s = str_replace($this->search,$this->replace, $s);
     			}
    -			return $s;
    +			return template_unescape($s);
     		}
     	}
     	
     	$t = new Template;
    +
    +
    +
    +
    +function template_escape($s) {
    +
    +	return str_replace(array('$','{{'),array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),$s);
    +
    +
    +}
    +
    +function template_unescape($s) {
    +
    +	return str_replace(array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),array('$','{{'),$s);
    +
    +
    +
    +}
    diff --git a/include/text.php b/include/text.php
    index 66447069e4..656cd8809c 100644
    --- a/include/text.php
    +++ b/include/text.php
    @@ -388,11 +388,13 @@ function get_intltext_template($s) {
     
     if(! function_exists('get_markup_template')) {
     function get_markup_template($s) {
    -
    +	$a=get_app();
     	$theme = current_theme();
     	
     	if(file_exists("view/theme/$theme/$s"))
     		return file_get_contents("view/theme/$theme/$s");
    +	elseif (x($a->theme_info,"extends") && file_exists("view/theme/".$a->theme_info["extends"]."/$s"))
    +		return file_get_contents("view/theme/".$a->theme_info["extends"]."/$s");
     	else
     		return file_get_contents("view/$s");
     
    @@ -482,13 +484,12 @@ function get_tags($s) {
     				// we might be inside a bbcode color tag - leave it alone
     				continue;
     			}
    +			if(substr($mtch,-1,1) === '.')
    +				$mtch = substr($mtch,0,-1);
     			// ignore strictly numeric tags like #1
     			if((strpos($mtch,'#') === 0) && ctype_digit(substr($mtch,1)))
     				continue;
    -			if(substr($mtch,-1,1) === '.')
    -				$ret[] = substr($mtch,0,-1);
    -			else
    -				$ret[] = $mtch;
    +			$ret[] = $mtch;
     		}
     	}
     	return $ret;
    @@ -539,22 +540,30 @@ function contact_block() {
     		$total = intval($r[0]['total']);
     	}
     	if(! $total) {
    -		$o .= '

    ' . t('No contacts') . '

    '; - return $o; - } - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 ORDER BY RAND() LIMIT %d", - intval($a->profile['uid']), - intval($shown) - ); - if(count($r)) { - $o .= '

    ' . sprintf( tt('%d Contact','%d Contacts', $total),$total) . '

    '; - foreach($r as $rr) { - $o .= micropro($rr,true,'mpfriend'); - } - $o .= '
    '; - $o .= ''; + $contacts = t('No contacts'); + $micropro = Null; + } else { + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 ORDER BY RAND() LIMIT %d", + intval($a->profile['uid']), + intval($shown) + ); + if(count($r)) { + $contacts = sprintf( tt('%d Contact','%d Contacts', $total),$total); + $micropro = Array(); + foreach($r as $rr) { + $micropro[] = micropro($rr,true,'mpfriend'); + } + } } + + $tpl = get_markup_template('contact_block.tpl'); + $o = replace_macros($tpl, array( + '$contacts' => $contacts, + '$nickname' => $a->profile['nickname'], + '$viewcontacts' => t('View Contacts'), + '$micropro' => $micropro, + )); $arr = array('contacts' => $r, 'output' => $o); @@ -571,11 +580,13 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) { $url = $contact['url']; $sparkle = ''; + $redir = false; if($redirect) { $a = get_app(); $redirect_url = $a->get_baseurl() . '/redir/' . $contact['id']; if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === 'dfrn')) { + $redir = true; $url = $redirect_url; $sparkle = ' sparkle'; } @@ -586,6 +597,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) { if($textmode) { return '' . "\r\n"; @@ -593,6 +605,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) { else { return '
    ' . $contact['name'] 
 			. '
    ' . "\r\n"; @@ -602,12 +615,14 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) { if(! function_exists('search')) { -function search($s,$id='search-box',$url='/search') { +function search($s,$id='search-box',$url='/search',$save = false) { $a = get_app(); $o = '
    '; $o .= '
    '; $o .= ''; $o .= ''; + if($save) + $o .= ''; $o .= '
    '; return $o; }} @@ -630,7 +645,8 @@ function valid_email($x){ if(! function_exists('linkify')) { function linkify($s) { - $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%\$\!\+]*)/", ' $1', $s); + $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\'\%\$\!\+]*)/", ' $1', $s); + $s = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$s); return($s); }} @@ -651,7 +667,7 @@ if(! function_exists('smilies')) { function smilies($s) { $a = get_app(); - return str_replace( + $s = str_replace( array( '<3', '</3', '<\\3', ':-)', ':)', ';-)', ':-(', ':(', ':-P', ':P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O', '~friendika', 'Diaspora*' ), array( @@ -675,6 +691,10 @@ function smilies($s) { 'DiasporaDiaspora*', ), $s); + + call_hooks('smilie', $s); + return $s; + }} @@ -816,9 +836,14 @@ function feed_salmonlinks($nick) { if(! function_exists('get_plink')) { function get_plink($item) { $a = get_app(); - $plink = (((x($item,'plink')) && (! $item['private'])) ? '' : ''); - return $plink; + if (x($item,'plink') && (! $item['private'])){ + return array( + 'href' => $item['plink'], + 'title' => t('link to source'), + ); + } else { + return false; + } }} if(! function_exists('unamp')) { @@ -837,10 +862,16 @@ function lang_selector() { $o .= '
    ' + $jotnets .= '
    ' . t("Post to Email") . '
    '; } diff --git a/mod/events.php b/mod/events.php index 27ca698307..5bc9807ed7 100644 --- a/mod/events.php +++ b/mod/events.php @@ -45,13 +45,20 @@ function events_post(&$a) { $finish = datetime_convert('UTC','UTC',$finish); } + // Don't allow the event to finish before it begins. + // It won't hurt anything, but somebody will file a bug report + // and we'll waste a bunch of time responding to it. Time that + // could've been spent doing something else. + + if(strcmp($finish,$start) < 0) + $finish = $start; $desc = escape_tags(trim($_POST['desc'])); $location = escape_tags(trim($_POST['location'])); $type = 'event'; if((! $desc) || (! $start)) { - notice('Event description and start time are required.'); + notice( t('Event description and start time are required.') . EOL); goaway($a->get_baseurl() . '/events/new'); } diff --git a/mod/follow.php b/mod/follow.php index df4d2e630a..77c8ae18f3 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -100,14 +100,15 @@ function follow_post(&$a) { $new_relation = CONTACT_IS_FOLLOWER; // create contact record - $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`, + $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `batch`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`, `writable`, `blocked`, `readonly`, `pending` ) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ", + VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ", intval(local_user()), dbesc(datetime_convert()), dbesc($ret['url']), dbesc($ret['addr']), dbesc($ret['alias']), + dbesc($ret['batch']), dbesc($ret['notify']), dbesc($ret['poll']), dbesc($ret['name']), diff --git a/mod/friendika.php b/mod/friendika.php index d0e709c753..b12110bd54 100644 --- a/mod/friendika.php +++ b/mod/friendika.php @@ -21,6 +21,7 @@ function friendika_init(&$a) { 'register_policy' => $register_policy[$a->config['register_policy']], 'admin' => $admin, 'site_name' => $a->config['sitename'], + 'platform' => FRIENDIKA_PLATFORM, 'info' => ((x($a->config,'info')) ? $a->config['info'] : '') ); @@ -42,8 +43,6 @@ function friendika_content(&$a) { $o .= t('This is Friendika version') . ' ' . FRIENDIKA_VERSION . ' '; $o .= t('running at web location') . ' ' . z_root() . '

    '; - $o .= t('Shared content within the Friendika network is provided under the Creative Commons Attribution 3.0 license') . '

    '; - $o .= t('Please visit Project.Friendika.com to learn more about the Friendika project.') . '

    '; $o .= t('Bug reports and issues: please visit') . ' ' . 'Bugs.Friendika.com

    '; diff --git a/mod/group.php b/mod/group.php index 981796f67e..ca163902ca 100644 --- a/mod/group.php +++ b/mod/group.php @@ -176,8 +176,8 @@ function group_content(&$a) { if($change) $o = ''; - $o .= '

    '; $o .= '

    ' . t('Members') . '

    '; + $o .= '
    '; $textmode = (($switchtotext && (count($members) > $switchtotext)) ? true : false); foreach($members as $member) { if($member['url']) { @@ -190,9 +190,10 @@ function group_content(&$a) { $o .= '
    '; $o .= '
    '; + + $o .= '

    ' . t('All Contacts') . '

    '; $o .= '
    '; - $o .= '

    ' . t('All Contacts') . '

    '; $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 and `pending` = 0 and `self` = 0 ORDER BY `name` ASC", intval(local_user()) ); diff --git a/mod/help.php b/mod/help.php index 495b4ccc22..af05bd47c0 100644 --- a/mod/help.php +++ b/mod/help.php @@ -17,6 +17,7 @@ function load_doc_file($s) { function help_content(&$a) { + nav_set_selected('help'); global $lang; @@ -35,10 +36,12 @@ function help_content(&$a) { if(! strlen($text)) { header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found')); - notice( t('Page not found.' ) . EOL); - return; + $tpl = get_markup_template("404.tpl"); + return replace_macros($tpl, array( + '$message' => t('Page not found.' ) + )); } return Markdown($text); -} \ No newline at end of file +} diff --git a/mod/hostxrd.php b/mod/hostxrd.php index c7861d26d0..fe61a874c3 100644 --- a/mod/hostxrd.php +++ b/mod/hostxrd.php @@ -1,10 +1,38 @@ 'sha1', + 'private_key_bits' => 4096, + 'encrypt_key' => false )); + + + $prvkey = ''; + + openssl_pkey_export($res, $prvkey); + + // Get public key + + $pkey = openssl_pkey_get_details($res); + $pubkey = $pkey["key"]; + + set_config('system','site_prvkey', $prvkey); + set_config('system','site_pubkey', $pubkey); + } + $tpl = file_get_contents('view/xrd_host.tpl'); - echo str_replace(array('$zroot','$domain'),array(z_root(),z_path()),$tpl); + echo str_replace(array( + '$zhost','$zroot','$domain','$zot_post','$bigkey'),array($a->get_hostname(),z_root(),z_path(),z_root() . '/post', salmon_key(get_config('system','site_pubkey'))),$tpl); session_write_close(); exit(); diff --git a/mod/item.php b/mod/item.php index ef0b232d56..b8c0683aac 100644 --- a/mod/item.php +++ b/mod/item.php @@ -15,6 +15,8 @@ * */ +require_once('include/crypto.php'); + function item_post(&$a) { if((! local_user()) && (! remote_user())) @@ -36,6 +38,7 @@ function item_post(&$a) { call_hooks('post_local_start', $_POST); $api_source = ((x($_POST,'api_source') && $_POST['api_source']) ? true : false); + $return_path = ((x($_POST,'return')) ? $_POST['return'] : ''); /** * Is this a reply to something? @@ -80,7 +83,7 @@ function item_post(&$a) { if(($r === false) || (! count($r))) { notice( t('Unable to locate original post.') . EOL); if(x($_POST,'return')) - goaway($a->get_baseurl() . "/" . $_POST['return'] ); + goaway($a->get_baseurl() . "/" . $return_path ); killme(); } $parent_item = $r[0]; @@ -109,7 +112,7 @@ function item_post(&$a) { if(! can_write_wall($a,$profile_uid)) { notice( t('Permission denied.') . EOL) ; if(x($_POST,'return')) - goaway($a->get_baseurl() . "/" . $_POST['return'] ); + goaway($a->get_baseurl() . "/" . $return_path ); killme(); } @@ -195,7 +198,7 @@ function item_post(&$a) { if(! strlen($body)) { info( t('Empty post discarded.') . EOL ); if(x($_POST,'return')) - goaway($a->get_baseurl() . "/" . $_POST['return'] ); + goaway($a->get_baseurl() . "/" . $return_path ); killme(); } } @@ -330,11 +333,20 @@ function item_post(&$a) { } } + // embedded bookmark in post? convert to regular url and set bookmark flag + + $bookmark = 0; + if(preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$body,$match)) { + $bookmark = 1; + $body = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'[url=$1]$2[/url]',$body); + } + + /** * Fold multi-line [code] sequences */ - $body = preg_replace('/\[\/code\]\s*\[code\]/m',"\n",$body); + $body = preg_replace('/\[\/code\]\s*\[code\]/ism',"\n",$body); /** * Look for any tags and linkify them @@ -351,7 +363,7 @@ function item_post(&$a) { * and we are replying, and there isn't one already */ - if(($parent_contact) && ($parent_contact['network'] === 'stat') + if(($parent_contact) && ($parent_contact['network'] === NETWORK_OSTATUS) && ($parent_contact['nick']) && (! in_array('@' . $parent_contact['nick'],$tags))) { $body = '@' . $parent_contact['nick'] . ' ' . $body; $tags[] = '@' . $parent_contact['nick']; @@ -402,7 +414,8 @@ function item_post(&$a) { ); } else { - $r = q("SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1", + $r = q("SELECT * FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1", + dbesc($name), dbesc($name), intval($profile_uid) ); @@ -488,6 +501,7 @@ function item_post(&$a) { $datarray['author-avatar'] = $author['thumb']; $datarray['created'] = datetime_convert(); $datarray['edited'] = datetime_convert(); + $datarray['commented'] = datetime_convert(); $datarray['received'] = datetime_convert(); $datarray['changed'] = datetime_convert(); $datarray['uri'] = $uri; @@ -506,6 +520,7 @@ function item_post(&$a) { $datarray['private'] = $private; $datarray['pubmail'] = $pubmail_enable; $datarray['attach'] = $attachments; + $datarray['bookmark'] = intval($bookmark); $datarray['thr-parent'] = $thr_parent; /** @@ -536,9 +551,9 @@ function item_post(&$a) { ); proc_run('php', "include/notifier.php", 'edit_post', "$post_id"); - if((x($_POST,'return')) && strlen($_POST['return'])) { - logger('return: ' . $_POST['return']); - goaway($a->get_baseurl() . "/" . $_POST['return'] ); + if((x($_POST,'return')) && strlen($return_path)) { + logger('return: ' . $return_path); + goaway($a->get_baseurl() . "/" . $return_path ); } killme(); } @@ -547,9 +562,9 @@ function item_post(&$a) { $r = q("INSERT INTO `item` (`guid`, `uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`, - `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, - `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach` ) - VALUES( '%s', %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s' )", + `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `commented`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, + `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark` ) + VALUES( '%s', %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d )", dbesc($datarray['guid']), intval($datarray['uid']), dbesc($datarray['type']), @@ -564,6 +579,7 @@ function item_post(&$a) { dbesc($datarray['author-avatar']), dbesc($datarray['created']), dbesc($datarray['edited']), + dbesc($datarray['commented']), dbesc($datarray['received']), dbesc($datarray['changed']), dbesc($datarray['uri']), @@ -582,7 +598,8 @@ function item_post(&$a) { dbesc($datarray['deny_gid']), intval($datarray['private']), intval($datarray['pubmail']), - dbesc($datarray['attach']) + dbesc($datarray['attach']), + intval($datarray['bookmark']) ); $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1", @@ -674,6 +691,27 @@ function item_post(&$a) { pop_lang(); } + + // We won't be able to sign Diaspora comments for authenticated visitors - we don't have their private key + + if($self) { + require_once('include/bb2diaspora.php'); + $signed_body = html_entity_decode(bb2diaspora($datarray['body'])); + $myaddr = $a->user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); + if($datarray['verb'] === ACTIVITY_LIKE) + $signed_text = $datarray['guid'] . ';' . 'Post' . ';' . $parent_item['guid'] . ';' . 'true' . ';' . $myaddr; + else + $signed_text = $datarray['guid'] . ';' . $parent_item['guid'] . ';' . $signed_body . ';' . $myaddr; + + $authorsig = base64_encode(rsa_sign($signed_text,$a->user['prvkey'],'sha')); + + q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ", + intval($post_id), + dbesc($signed_text), + dbesc(base64_encode($authorsig)), + dbesc($myaddr) + ); + } } else { $parent = $post_id; @@ -741,6 +779,11 @@ function item_post(&$a) { } } + // fallback so that parent always gets set to non-zero. + + if(! $parent) + $parent = $post_id; + $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `plink` = '%s', `changed` = '%s', `last-child` = 1, `visible` = 1 WHERE `id` = %d LIMIT 1", intval($parent), @@ -763,11 +806,17 @@ function item_post(&$a) { else { logger('mod_item: unable to retrieve post that was just stored.'); notify( t('System error. Post not saved.')); - goaway($a->get_baseurl() . "/" . $_POST['return'] ); + goaway($a->get_baseurl() . "/" . $return_path ); // NOTREACHED } - proc_run('php', "include/notifier.php", $notify_type, "$post_id"); + // update the commented timestamp on the parent + + q("UPDATE `item` set `commented` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1", + dbesc(datetime_convert()), + dbesc(datetime_convert()), + intval($parent) + ); $datarray['id'] = $post_id; $datarray['plink'] = $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id; @@ -799,6 +848,17 @@ function item_post(&$a) { } } + // This is a real juggling act on shared hosting services which kill your processes + // e.g. dreamhost. We used to start delivery to our native delivery agents in the background + // and then run our plugin delivery from the foreground. We're now doing plugin delivery first, + // because as soon as you start loading up a bunch of remote delivey processes, *this* page is + // likely to get killed off. If you end up looking at an /item URL and a blank page, + // it's very likely the delivery got killed before all your friends could be notified. + // Currently the only realistic fixes are to use a reliable server - which precludes shared hosting, + // or cut back on plugins which do remote deliveries. + + proc_run('php', "include/notifier.php", $notify_type, "$post_id"); + logger('post_complete'); // figure out how to return, depending on from whence we came @@ -806,10 +866,10 @@ function item_post(&$a) { if($api_source) return; - if((x($_POST,'return')) && strlen($_POST['return'])) { - logger('return: ' . $_POST['return']); - goaway($a->get_baseurl() . "/" . $_POST['return'] ); + if($return_path) { + goaway($a->get_baseurl() . "/" . $return_path); } + $json = array('success' => 1); if(x($_POST,'jsreload') && strlen($_POST['jsreload'])) $json['reload'] = $a->get_baseurl() . '/' . $_POST['jsreload']; diff --git a/mod/like.php b/mod/like.php index 2876302122..95bedcc20f 100644 --- a/mod/like.php +++ b/mod/like.php @@ -55,6 +55,22 @@ function like_content(&$a) { return; } + $remote_owner = null; + + if(! $item['wall']) { + // The top level post may have been written by somebody on another system + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($item['contact-id']), + intval($item['uid']) + ); + if(! count($r)) + return; + if(! $r[0]['self']) + $remote_owner = $r[0]; + } + + // this represents the post owner on this system. + $r = q("SELECT `contact`.*, `user`.`nickname` FROM `contact` LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid` WHERE `contact`.`self` = 1 AND `contact`.`uid` = %d LIMIT 1", intval($owner_uid) @@ -67,6 +83,11 @@ function like_content(&$a) { return; } + if(! $remote_owner) + $remote_owner = $owner; + + + // This represents the person posting if((local_user()) && (local_user() == $owner_uid)) { $contact = $owner; @@ -137,9 +158,9 @@ EOT; $arr['gravity'] = GRAVITY_LIKE; $arr['parent'] = $item['id']; $arr['parent-uri'] = $item['uri']; - $arr['owner-name'] = $owner['name']; - $arr['owner-link'] = $owner['url']; - $arr['owner-avatar'] = $owner['thumb']; + $arr['owner-name'] = $remote_owner['name']; + $arr['owner-link'] = $remote_owner['url']; + $arr['owner-avatar'] = $remote_owner['thumb']; $arr['author-name'] = $contact['name']; $arr['author-link'] = $contact['url']; $arr['author-avatar'] = $contact['thumb']; diff --git a/mod/localtime.php b/mod/localtime.php new file mode 100644 index 0000000000..c03eae1b0e --- /dev/null +++ b/mod/localtime.php @@ -0,0 +1,49 @@ +data['mod-localtime'] = datetime_convert('UTC',$_POST['timezone'],$t,$bd_format); + +} + +function localtime_content(&$a) { + $t = $_REQUEST['time']; + if(! $t) + $t = 'now'; + + $o .= '

    ' . t('Time Conversion') . '

    '; + + $o .= '

    ' . t('Friendika provides this service for sharing events with other networks and friends in unknown timezones.') . '

    '; + + + + $o .= '

    ' . sprintf( t('UTC time: %s'), $t) . '

    '; + + if($_REQUEST['timezone']) + $o .= '

    ' . sprintf( t('Current timezone: %s'), $_REQUEST['timezone']) . '

    '; + + if(x($a->data,'mod-localtime')) + $o .= '

    ' . sprintf( t('Converted localtime: %s'),$a->data['mod-localtime']) . '

    '; + + + $o .= ''; + + $o .= '

    ' . t('Please select your timezone:') . '

    '; + + $o .= select_timezone(($_REQUEST['timezone']) ? $_REQUEST['timezone'] : 'America/Los_Angeles'); + + $o .= ''; + + return $o; + +} \ No newline at end of file diff --git a/mod/match.php b/mod/match.php index 5dd80fe3ef..eea2dad4ff 100644 --- a/mod/match.php +++ b/mod/match.php @@ -22,6 +22,7 @@ function match_content(&$a) { $params = array(); $tags = trim($r[0]['pub_keywords'] . ' ' . $r[0]['prv_keywords']); + if($tags) { $params['s'] = $tags; if($a->pager['page'] != 1) @@ -40,15 +41,17 @@ function match_content(&$a) { } if(count($j->results)) { + + $tpl = get_markup_template('match.tpl'); foreach($j->results as $jj) { - - $o .= '
    '; - $o .= '' . '' . $jj->name . '
    '; - $o .= '
    '; - $o .= ''; - $o .= '
    '; + + $o .= replace_macros($tpl,array( + '$url' => $jj->url, + '$name' => $jj->name, + '$photo' => $jj->photo, + '$tags' => $jj->tags + )); } - $o .= '
    '; } else { info( t('No matches') . EOL); diff --git a/mod/message.php b/mod/message.php index 165d638141..d4772d0261 100644 --- a/mod/message.php +++ b/mod/message.php @@ -36,7 +36,7 @@ function message_post(&$a) { function message_content(&$a) { $o = ''; - $o .= ''; + nav_set_selected('messages'); if(! local_user()) { notice( t('Permission denied.') . EOL); @@ -45,13 +45,21 @@ function message_content(&$a) { $myprofile = $a->get_baseurl() . '/profile/' . $a->user['nickname']; - + if (($a->argc > 1) && ($a->argv[1] === 'new')) { + $tab = 'new'; + } else if ($a->argc == 2 && $a->argv[1] === 'sent') { + $tab = 'sent'; + } else { + $tab = 'inbox'; + } + $tpl = get_markup_template('mail_head.tpl'); $header = replace_macros($tpl, array( '$messages' => t('Messages'), '$inbox' => t('Inbox'), '$outbox' => t('Outbox'), - '$new' => t('New Message') + '$new' => t('New Message'), + '$activetab' => $tab )); @@ -90,6 +98,8 @@ function message_content(&$a) { if(($a->argc > 1) && ($a->argv[1] === 'new')) { + $o .= $header; + $tpl = get_markup_template('msg-header.tpl'); $a->page['htmlhead'] .= replace_macros($tpl, array( @@ -114,7 +124,6 @@ function message_content(&$a) { '$upload' => t('Upload photo'), '$insert' => t('Insert web link'), '$wait' => t('Please wait') - )); return $o; @@ -159,10 +168,10 @@ function message_content(&$a) { '$from_url' => $a->get_baseurl() . '/redir/' . $rr['contact-id'], '$sparkle' => ' sparkle', '$from_photo' => $rr['thumb'], - '$subject' => (($rr['mailseen']) ? $rr['title'] : '' . $rr['title'] . ''), + '$subject' => template_escape((($rr['mailseen']) ? $rr['title'] : '' . $rr['title'] . '')), '$delete' => t('Delete conversation'), - '$body' => $rr['body'], - '$to_name' => $rr['name'], + '$body' => template_escape($rr['body']), + '$to_name' => template_escape($rr['name']), '$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'], t('D, d M Y - g:i A')) )); } @@ -221,14 +230,14 @@ function message_content(&$a) { } $o .= replace_macros($tpl, array( '$id' => $message['id'], - '$from_name' =>$message['from-name'], + '$from_name' => template_escape($message['from-name']), '$from_url' => $from_url, '$sparkle' => $sparkle, '$from_photo' => $message['from-photo'], - '$subject' => $message['title'], - '$body' => smilies(bbcode($message['body'])), + '$subject' => template_escape($message['title']), + '$body' => template_escape(smilies(bbcode($message['body']))), '$delete' => t('Delete message'), - '$to_name' => $message['name'], + '$to_name' => template_escape($message['name']), '$date' => datetime_convert('UTC',date_default_timezone_get(),$message['created'],'D, d M Y - g:i A') )); @@ -240,7 +249,7 @@ function message_content(&$a) { '$header' => t('Send Reply'), '$to' => t('To:'), '$subject' => t('Subject:'), - '$subjtxt' => $message['title'], + '$subjtxt' => template_escape($message['title']), '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ', '$yourmessage' => t('Your message:'), '$select' => $select, @@ -248,7 +257,6 @@ function message_content(&$a) { '$upload' => t('Upload photo'), '$insert' => t('Insert web link'), '$wait' => t('Please wait') - )); return $o; diff --git a/mod/network.php b/mod/network.php index 05b74b50a4..371a35402a 100644 --- a/mod/network.php +++ b/mod/network.php @@ -14,41 +14,137 @@ function network_init(&$a) { $a->page['aside'] = ''; $search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : ''); - $srchurl = '/network' . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : ''); + // We need a better way of managing a growing argument list - $a->page['aside'] .= search($search,'netsearch-box',$srchurl); - - $a->page['aside'] .= ''; - - if(x($_GET,'star')) - $a->page['aside'] .= ''; - else - $a->page['aside'] .= ''; - + // moved into savedsearches() + // $srchurl = '/network' + // . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') + // . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '') + // . ((x($_GET,'bmark')) ? '?bmark=' . $_GET['bmark'] : ''); + + if(x($_GET,'save')) { + $r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1", + intval(local_user()), + dbesc($search) + ); + if(! count($r)) { + q("insert into `search` ( `uid`,`term` ) values ( %d, '%s') ", + intval(local_user()), + dbesc($search) + ); + } + } + if(x($_GET,'remove')) { + q("delete from `search` where `uid` = %d and `term` = '%s' limit 1", + intval(local_user()), + dbesc($search) + ); } - $a->page['aside'] .= '
    '; - + // item filter tabs + // TODO: fix this logic, reduce duplication + $a->page['content'] .= '
    '; + + $starred_active = ''; + $new_active = ''; + $bookmarked_active = ''; + $all_active = ''; + $search_active = ''; + + if(($a->argc > 1 && $a->argv[1] === 'new') + || ($a->argc > 2 && $a->argv[2] === 'new')) { + $new_active = 'active'; + } + + if(x($_GET,'search')) { + $search_active = 'active'; + } + + if(x($_GET,'star')) { + $starred_active = 'active'; + } + + if($_GET['bmark']) { + $bookmarked_active = 'active'; + } + + if (($new_active == '') + && ($starred_active == '') + && ($bookmarked_active == '') + && ($search_active == '')) { + $all_active = 'active'; + } + + // network links moved to content to match other pages + // all + // added 'button' class for easier styling - not the best place for it, should be moved into the tpl like profile_tabs.tpl + // once there is a network_tabs.tpl or something + $a->page['content'] .= '' + . t('All') . ''; + + // new + $a->page['content'] .= '' + . t('New') . ''; + + // starred + $a->page['content'] .= '' + . t('Starred') . ''; + + // bookmarks + $a->page['content'] .= '' + . t('Bookmarks') . ''; + + $a->page['content'] .= '
    '; + // --- end item filter tabs + + // search terms header + if(x($_GET,'search')) { + $a->page['content'] .= '

    Search Results For: ' . $search . '

    '; + } + $a->page['aside'] .= group_side('network','network',true,$group_id); + + // moved to saved searches to have it in the same div + //$a->page['aside'] .= search($search,'netsearch-box',$srchurl,true); + + $a->page['aside'] .= saved_searches($search); + +} + +function saved_searches($search) { + + $srchurl = '/network' + . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') + . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '') + . ((x($_GET,'bmark')) ? '?bmark=' . $_GET['bmark'] : ''); + + $o = ''; + + $r = q("select `term` from `search` WHERE `uid` = %d", + intval(local_user()) + ); + + $o .= '
    '; + $o .= '' . "\r\n"; + $o .= search($search,'netsearch-box',$srchurl,true); + + if(count($r)) { + $o .= ''; + } + + $o .= '
    ' . "\r\n"; + return $o; + } @@ -68,8 +164,12 @@ function network_content(&$a, $update = 0) { $nouveau = false; require_once('include/acl_selectors.php'); - $cid = ((x($_GET['cid'])) ? intval($_GET['cid']) : 0); - $star = ((x($_GET['star'])) ? intval($_GET['star']) : 0); + $cid = ((x($_GET,'cid')) ? intval($_GET['cid']) : 0); + $star = ((x($_GET,'star')) ? intval($_GET['star']) : 0); + $bmark = ((x($_GET,'bmark')) ? intval($_GET['bmark']) : 0); + $order = ((x($_GET,'order')) ? notags($_GET['order']) : 'comment'); + $liked = ((x($_GET,'liked')) ? intval($_GET['liked']) : 0); + if(($a->argc > 2) && $a->argv[2] === 'new') $nouveau = true; @@ -98,7 +198,7 @@ function network_content(&$a, $update = 0) { } } - $o .= ''; + nav_set_selected('network'); $_SESSION['return_url'] = $a->cmd; @@ -130,6 +230,9 @@ function network_content(&$a, $update = 0) { . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : '') . ((x($_GET,'search')) ? '&search=' . $_GET['search'] : '') . ((x($_GET,'star')) ? '&star=' . $_GET['star'] : '') + . ((x($_GET,'order')) ? '&order=' . $_GET['order'] : '') + . ((x($_GET,'bmark')) ? '&bmark=' . $_GET['bmark'] : '') + . ((x($_GET,'liked')) ? '&liked=' . $_GET['liked'] : '') . "'; var profile_page = " . $a->pager['page'] . "; \r\n"; } @@ -151,6 +254,9 @@ function network_content(&$a, $update = 0) { $star_sql = (($star) ? " AND `starred` = 1 " : ''); + if($bmark) + $star_sql .= " AND `bookmark` = 1 "; + $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql ) "; if($group) { @@ -188,7 +294,7 @@ function network_content(&$a, $update = 0) { if(count($r)) { $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql AND `contact-id` IN ( " . intval($cid) . " )) "; $o = '

    ' . t('Contact: ') . $r[0]['name'] . '

    ' . $o; - if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) { + if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['network'] !== NETWORK_DIASPORA && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) { notice( t('Private messages to this person are at risk of public disclosure.') . EOL); } @@ -247,7 +353,14 @@ function network_content(&$a, $update = 0) { else { // Normal conversation view - // First fetch a known number of parent items + + + if($order === 'post') + $ordering = "`created`"; + else + $ordering = "`commented`"; + + // Fetch a page full of parent items for this page $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` @@ -255,13 +368,12 @@ function network_content(&$a, $update = 0) { AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`parent` = `item`.`id` $sql_extra - ORDER BY `item`.`created` DESC LIMIT %d ,%d ", + ORDER BY `item`.$ordering DESC LIMIT %d ,%d ", intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage']) ); - // Then fetch all the children of the parents that are on this page $parents_arr = array(); @@ -272,21 +384,21 @@ function network_content(&$a, $update = 0) { $parents_arr[] = $rr['item_id']; $parents_str = implode(', ', $parents_arr); - $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, + $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`, `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` - FROM `item`, (SELECT `p`.`id`,`p`.`created` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact` + FROM `item`, (SELECT `p`.`id`,`p`.`created`,`p`.`commented` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`parent` = `parentitem`.`id` AND `item`.`parent` IN ( %s ) $sql_extra - ORDER BY `parentitem`.`created` DESC, `item`.`gravity` ASC, `item`.`created` ASC ", + ORDER BY `parentitem`.$ordering DESC, `parentitem`.`id` ASC, `item`.`gravity` ASC, `item`.`created` ASC ", intval(local_user()), dbesc($parents_str) ); - } + } } // Set this so that the conversation function can find out contact info for our wall-wall items @@ -298,7 +410,6 @@ function network_content(&$a, $update = 0) { if(! $update) { $o .= paginate($a); - $o .= cc_license(); } return $o; diff --git a/mod/notes.php b/mod/notes.php index 9f1a4662da..369f120a76 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -14,7 +14,7 @@ function notes_init(&$a) { } -function notes_content(&$a) { +function notes_content(&$a,$update = false) { if(! local_user()) { notice( t('Permission denied.') . EOL); @@ -52,31 +52,37 @@ function notes_content(&$a) { )); - $o .= '

    ' . t('Personal Notes') . '

    '; + if(! $update) { + $o .= '

    ' . t('Personal Notes') . '

    '; - $commpage = false; - $commvisitor = false; + $commpage = false; + $commvisitor = false; - $celeb = false; + $celeb = false; - $x = array( - 'is_owner' => $is_owner, - 'allow_location' => (($a->user['allow_location']) ? true : false), - 'default_location' => $a->user['default-location'], - 'nickname' => $a->user['nickname'], - 'lockstate' => 'lock', - 'acl' => '', - 'bang' => '', - 'visitor' => 'block', - 'profile_uid' => local_user(), - 'button' => t('Save') + $x = array( + 'is_owner' => $is_owner, + 'allow_location' => (($a->user['allow_location']) ? true : false), + 'default_location' => $a->user['default-location'], + 'nickname' => $a->user['nickname'], + 'lockstate' => 'lock', + 'acl' => '', + 'bang' => '', + 'visitor' => 'block', + 'profile_uid' => local_user(), + 'button' => t('Save') - ); + ); - $o .= status_editor($a,$x,$a->contact['id']); + $o .= status_editor($a,$x,$a->contact['id']); + $o .= '
    ' . "\r\n"; + $o .= "\r\n"; + + } // Construct permissions diff --git a/mod/notifications.php b/mod/notifications.php index 8c32ee8628..0c35d4cd1a 100644 --- a/mod/notifications.php +++ b/mod/notifications.php @@ -64,7 +64,7 @@ function notifications_content(&$a) { } $o = ''; - $o .= ''; + nav_set_selected("notifications"); if(($a->argc > 1) && ($a->argv[1] == 'all')) $sql_extra = ''; diff --git a/mod/oexchange.php b/mod/oexchange.php index 1a990c64f1..53dce6446a 100644 --- a/mod/oexchange.php +++ b/mod/oexchange.php @@ -28,9 +28,16 @@ function oexchange_content(&$a) { return; } - $url = (((x($_GET,'url')) && strlen($_GET['url'])) ? notags(trim($_GET['url'])) : ''); + $url = (((x($_GET,'url')) && strlen($_GET['url'])) + ? urlencode(notags(trim($_GET['url']))) : ''); + $title = (((x($_GET,'title')) && strlen($_GET['title'])) + ? '&title=' . urlencode(notags(trim($_GET['title']))) : ''); + $description = (((x($_GET,'description')) && strlen($_GET['description'])) + ? '&description=' . urlencode(notags(trim($_GET['description']))) : ''); + $tags = (((x($_GET,'tags')) && strlen($_GET['tags'])) + ? '&tags=' . urlencode(notags(trim($_GET['tags']))) : ''); - $s = fetch_url($a->get_baseurl() . '/parse_url&url=' . $url); + $s = fetch_url($a->get_baseurl() . '/parse_url?f=&url=' . $url . $title . $description . $tags); if(! strlen($s)) return; diff --git a/mod/openid.php b/mod/openid.php index 6fbd013b8d..b8734f0234 100644 --- a/mod/openid.php +++ b/mod/openid.php @@ -55,7 +55,8 @@ function openid_content(&$a) { } - $r = q("SELECT * FROM `user` WHERE `openid` = '%s' AND `blocked` = 0 AND `verified` = 1 LIMIT 1", + $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` + FROM `user` WHERE `openid` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1", dbesc($_SESSION['openid']) ); if(! count($r)) { diff --git a/mod/parse_url.php b/mod/parse_url.php index 9bb0bc4640..a238ecb2f9 100644 --- a/mod/parse_url.php +++ b/mod/parse_url.php @@ -3,17 +3,38 @@ require_once('library/HTML5/Parser.php'); require_once('library/HTMLPurifier.auto.php'); +function arr_add_hashes(&$item,$k) { + $item = '#' . $item; +} + function parse_url_content(&$a) { - logger('parse_url: ' . $_GET['url']); + $text = null; + $str_tags = ''; - $url = trim(hex2bin($_GET['url'])); + if(x($_GET,'binurl')) + $url = trim(hex2bin($_GET['binurl'])); + else + $url = trim($_GET['url']); + + if($_GET['title']) + $title = strip_tags(trim($_GET['title'])); + + if($_GET['description']) + $text = strip_tags(trim($_GET['description'])); + + if($_GET['tags']) { + $arr_tags = str_getcsv($_GET['tags']); + if(count($arr_tags)) { + array_walk($arr_tags,'arr_add_hashes'); + $str_tags = '
    ' . implode(' ',$arr_tags) . '
    '; + } + } logger('parse_url: ' . $url); - $text = null; - $template = "
    %s%s
    "; + $template = "
    %s%s
    "; $arr = array('url' => $url, 'text' => ''); @@ -25,6 +46,20 @@ function parse_url_content(&$a) { killme(); } + if($url && $title && $text) { + + $text = '

    ' . $text . '

    '; + $title = str_replace(array("\r","\n"),array('',''),$title); + + $result = sprintf($template,$url,($title) ? $title : $url,$text) . $str_tags; + + logger('parse_url (unparsed): returns: ' . $result); + + echo $result; + killme(); + } + + if($url) { $s = fetch_url($url); } else { @@ -35,14 +70,16 @@ function parse_url_content(&$a) { logger('parse_url: data: ' . $s, LOGGER_DATA); if(! $s) { - echo sprintf($template,$url,$url,''); + echo sprintf($template,$url,$url,'') . $str_tags; killme(); } - if(strpos($s,'')) { - $title = substr($s,strpos($s,'<title>')+7,64); - if(strpos($title,'<') !== false) - $title = strip_tags(substr($title,0,strpos($title,'<'))); + if(! $title) { + if(strpos($s,'<title>')) { + $title = substr($s,strpos($s,'<title>')+7,64); + if(strpos($title,'<') !== false) + $title = strip_tags(substr($title,0,strpos($title,'<'))); + } } $config = HTMLPurifier_Config::createDefault(); @@ -56,7 +93,7 @@ function parse_url_content(&$a) { $dom = @HTML5_Parser::parse($s); if(! $dom) { - echo sprintf($template,$url,$url,''); + echo sprintf($template,$url,$url,'') . $str_tags; killme(); } @@ -69,48 +106,51 @@ function parse_url_content(&$a) { } } - $divs = $dom->getElementsByTagName('div'); - if($divs) { - foreach($divs as $div) { - $class = $div->getAttribute('class'); - if($class && (stristr($class,'article') || stristr($class,'content'))) { - $items = $div->getElementsByTagName('p'); - if($items) { - foreach($items as $item) { - $text = $item->textContent; - if(stristr($text,'<script')) { - $text = ''; - continue; - } - $text = strip_tags($text); - if(strlen($text) < 100) { - $text = ''; - continue; - } - $text = substr($text,0,250) . '...' ; - break; - } - } - } - if($text) - break; - } - } if(! $text) { - $items = $dom->getElementsByTagName('p'); - if($items) { - foreach($items as $item) { - $text = $item->textContent; - if(stristr($text,'<script')) - continue; - $text = strip_tags($text); - if(strlen($text) < 100) { - $text = ''; - continue; + $divs = $dom->getElementsByTagName('div'); + if($divs) { + foreach($divs as $div) { + $class = $div->getAttribute('class'); + if($class && (stristr($class,'article') || stristr($class,'content'))) { + $items = $div->getElementsByTagName('p'); + if($items) { + foreach($items as $item) { + $text = $item->textContent; + if(stristr($text,'<script')) { + $text = ''; + continue; + } + $text = strip_tags($text); + if(strlen($text) < 100) { + $text = ''; + continue; + } + $text = substr($text,0,250) . '...' ; + break; + } + } + } + if($text) + break; + } + } + + if(! $text) { + $items = $dom->getElementsByTagName('p'); + if($items) { + foreach($items as $item) { + $text = $item->textContent; + if(stristr($text,'<script')) + continue; + $text = strip_tags($text); + if(strlen($text) < 100) { + $text = ''; + continue; + } + $text = substr($text,0,250) . '...' ; + break; } - $text = substr($text,0,250) . '...' ; - break; } } } @@ -119,6 +159,12 @@ function parse_url_content(&$a) { $text = '<br /><br /><blockquote>' . $text . '</blockquote><br />'; } - echo sprintf($template,$url,($title) ? $title : $url,$text); + $title = str_replace(array("\r","\n"),array('',''),$title); + + $result = sprintf($template,$url,($title) ? $title : $url,$text) . $str_tags; + + logger('parse_url: returns: ' . $result); + + echo $result; killme(); } diff --git a/mod/photo.php b/mod/photo.php index 3994620f89..a5a5a1dc17 100644 --- a/mod/photo.php +++ b/mod/photo.php @@ -128,7 +128,14 @@ function photo_init(&$a) { } } + if(function_exists('header_remove')) { + header_remove('Pragma'); + header_remove('pragma'); + } + header("Content-type: image/jpeg"); + header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); + header("Cache-Control: max-age=" . (3600*24)); echo $data; killme(); // NOTREACHED diff --git a/mod/photos.php b/mod/photos.php index cb13b76036..1321af1920 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -33,13 +33,18 @@ function photos_init(&$a) { if(count($albums)) { $a->data['albums'] = $albums; - $o .= '<h4><a href="' . $a->get_baseurl() . '/profile/' . $a->data['user']['nickname'] . '">' . $a->data['user']['username'] . '</a></h4>'; - $o .= '<h4>' . '<a href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '">' . t('Photo Albums') . '</a></h4>'; - + $o .= '<div class="vcard">'; + $o .= '<div class="fn">' . $a->data['user']['username'] . '</div>'; + $o .= '<div id="profile-photo-wrapper"><img class="photo" style="width: 175px; height: 175px;" src="' . $a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg" alt="' . $a->data['user']['username'] . '" /></div>'; + $o .= '</div>'; + + $o .= '<div id="side-bar-photos-albums" class="widget">'; + $o .= '<h3>' . '<a href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '">' . t('Photo Albums') . '</a></h4>'; + $o .= '<ul>'; foreach($albums as $album) { - // don't show contact photos. We once trasnlated this name, but then you could still access it under + // don't show contact photos. We once translated this name, but then you could still access it under // a different language setting. Now we store the name in English and check in English (and translated for legacy albums). if((! strlen($album['album'])) || ($album['album'] === 'Contact Photos') || ($album['album'] === t('Contact Photos'))) @@ -87,15 +92,11 @@ EOT; function photos_post(&$a) { - logger('mod/photos.php: photos_post(): begin' , 'LOGGER_DEBUG'); + logger('mod-photos: photos_post(): begin' , 'LOGGER_DEBUG'); - foreach($_REQUEST AS $key => $val) { - logger('mod/photos.php: photos_post(): $_REQUEST key: ' . $key . ' val: ' . $val , 'LOGGER_DEBUG'); - } - foreach($_FILES AS $key => $val) { - logger('mod/photos.php: photos_post(): $_FILES key: ' . $key . ' val: ' . $val , 'LOGGER_DEBUG'); - } + logger('mod_photos: REQUEST ' . print_r($_REQUEST,true), LOGGER_DATA); + logger('mod_photos: FILES ' . print_r($_FILES,true), LOGGER_DATA); $can_post = false; $visitor = 0; @@ -414,7 +415,8 @@ function photos_post(&$a) { ); } else { - $r = q("SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1", + $r = q("SELECT * FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1", + dbesc($name), dbesc($name), intval($page_owner_uid) ); @@ -579,6 +581,9 @@ function photos_post(&$a) { else $visible = 0; + if(intval($_REQUEST['not_visible'])) + $visible = 0; + $str_group_allow = perms2str(((is_array($_REQUEST['group_allow'])) ? $_REQUEST['group_allow'] : explode(',',$_REQUEST['group_allow']))); $str_contact_allow = perms2str(((is_array($_REQUEST['contact_allow'])) ? $_REQUEST['contact_allow'] : explode(',',$_REQUEST['contact_allow']))); $str_group_deny = perms2str(((is_array($_REQUEST['group_deny'])) ? $_REQUEST['group_deny'] : explode(',',$_REQUEST['group_deny']))); @@ -886,9 +891,10 @@ function photos_content(&$a) { '$nickname' => $a->data['user']['nickname'], '$newalbum' => t('New album name: '), '$existalbumtext' => t('or existing album name: '), - '$albumselect' => $albumselect, + '$nosharetext' => t('Do not show a status post for this upload'), + '$albumselect' => template_escape($albumselect), '$permissions' => t('Permissions'), - '$aclselect' => (($visitor) ? '' : populate_acl($a->user, $celeb)), + '$aclselect' => (($visitor) ? '' : template_escape(populate_acl($a->user, $celeb))), '$uploader' => $ret['addon_text'], '$default' => (($ret['default_upload']) ? $default_upload : ''), '$uploadurl' => $ret['post_url'] @@ -929,7 +935,7 @@ function photos_content(&$a) { $o .= replace_macros($edit_tpl,array( '$nametext' => t('New album name: '), '$nickname' => $a->data['user']['nickname'], - '$album' => $album, + '$album' => template_escape($album), '$hexalbum' => bin2hex($album), '$submit' => t('Submit'), '$dropsubmit' => t('Delete Album') @@ -954,8 +960,8 @@ function photos_content(&$a) { '$photolink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'], '$phototitle' => t('View Photo'), '$imgsrc' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.jpg', - '$imgalt' => $rr['filename'], - '$desc'=> $rr['desc'] + '$imgalt' => template_escape($rr['filename']), + '$desc'=> template_escape($rr['desc']) )); } @@ -981,7 +987,15 @@ function photos_content(&$a) { ); if(! count($ph)) { - notice( t('Photo not available') . EOL ); + $ph = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' + LIMIT 1", + intval($owner_uid), + dbesc($datum) + ); + if(count($ph)) + notice( t('Permission denied. Access to this item may be restricted.')); + else + notice( t('Photo not available') . EOL ); return; } @@ -1006,8 +1020,9 @@ function photos_content(&$a) { break; } } - $prevlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] ; - $nextlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] ; + $edit_suffix = ((($cmd === 'edit') && ($can_post)) ? '/edit' : ''); + $prevlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix; + $nextlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix; } @@ -1030,7 +1045,7 @@ function photos_content(&$a) { if($can_post && ($ph[0]['uid'] == $owner_uid)) { $tools = array( - 'edit' => array($a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit', t('Edit photo')), + 'edit' => array($a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . (($cmd === 'edit') ? '' : '/edit'), (($cmd === 'edit') ? t('View photo') : t('Edit photo'))), 'profile'=>array($a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'], t('Use as profile photo')), ); @@ -1129,16 +1144,16 @@ function photos_content(&$a) { $edit_tpl = get_markup_template('photo_edit.tpl'); $edit = replace_macros($edit_tpl, array( '$id' => $ph[0]['id'], - '$album' => $ph[0]['album'], + '$album' => template_escape($ph[0]['album']), '$newalbum' => t('New album name'), '$nickname' => $a->data['user']['nickname'], '$resource_id' => $ph[0]['resource-id'], '$capt_label' => t('Caption'), - '$caption' => $ph[0]['desc'], + '$caption' => template_escape($ph[0]['desc']), '$tag_label' => t('Add a Tag'), '$tags' => $link_item['tag'], '$permissions' => t('Permissions'), - '$aclselect' => populate_acl($ph[0]), + '$aclselect' => template_escape(populate_acl($ph[0])), '$help_tags' => t('Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'), '$item_id' => ((count($linked_items)) ? $link_item['id'] : 0), '$submit' => t('Submit'), @@ -1284,11 +1299,11 @@ function photos_content(&$a) { $comments .= replace_macros($template,array( '$id' => $item['item_id'], '$profile_url' => $profile_link, - '$name' => $profile_name, + '$name' => template_escape($profile_name), '$thumb' => $profile_avatar, '$sparkle' => $sparkle, - '$title' => $item['title'], - '$body' => bbcode($item['body']), + '$title' => template_escape($item['title']), + '$body' => template_escape(bbcode($item['body'])), '$ago' => relative_date($item['created']), '$indent' => (($item['parent'] != $item['item_id']) ? ' comment' : ''), '$drop' => $drop, @@ -1303,18 +1318,18 @@ function photos_content(&$a) { $photo_tpl = get_markup_template('photo_view.tpl'); $o .= replace_macros($photo_tpl, array( '$id' => $ph[0]['id'], - '$album' => array($album_link,$ph[0]['album']), + '$album' => array($album_link,template_escape($ph[0]['album'])), '$tools' => $tools, '$lock' => $lock, '$photo' => $photo, '$prevlink' => $prevlink, '$nextlink' => $nextlink, '$desc' => $ph[0]['desc'], - '$tags' => $tags, + '$tags' => template_escape($tags), '$edit' => $edit, '$likebuttons' => $likebuttons, - '$like' => $like, - '$dislike' => $dislike, + '$like' => template_escape($like), + '$dislike' => template_escape($dislike), '$comments' => $comments, '$paginate' => $paginate, )); @@ -1362,9 +1377,9 @@ function photos_content(&$a) { '$phototitle' => t('View Photo'), '$imgsrc' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.jpg', '$albumlink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']), - '$albumname' => $rr['album'], + '$albumname' => template_escape($rr['album']), '$albumalt' => t('View Album'), - '$imgalt' => $rr['filename'] + '$imgalt' => template_escape($rr['filename']) )); } diff --git a/mod/ping.php b/mod/ping.php index 924f9ff76b..544a42e144 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -1,48 +1,193 @@ <?php - +require_once("include/datetime.php"); function ping_init(&$a) { - if(! local_user()) - xml_status(0); - - $r = q("SELECT COUNT(*) AS `total` FROM `item` - WHERE `unseen` = 1 AND `visible` = 1 AND `deleted` = 0 AND `uid` = %d AND `wall` = 0 ", - intval(local_user()) - ); - $network = $r[0]['total']; - - $r = q("SELECT COUNT(*) AS `total` FROM `item` - WHERE `unseen` = 1 AND `visible` = 1 AND `deleted` = 0 AND `uid` = %d AND `wall` = 1 ", - intval(local_user()) - ); - $home = $r[0]['total']; - - $r = q("SELECT COUNT(*) AS `total` FROM `intro` - WHERE `uid` = %d AND `blocked` = 0 AND `ignore` = 0 ", - intval(local_user()) - ); - $intro = $r[0]['total']; - - $myurl = $a->get_baseurl() . '/profile/' . $a->user['nickname'] ; - $r = q("SELECT COUNT(*) AS `total` FROM `mail` - WHERE `uid` = %d AND `seen` = 0 AND `from-url` != '%s' ", - intval(local_user()), - dbesc($myurl) - ); - $mail = $r[0]['total']; - - if ($a->config['register_policy'] == REGISTER_APPROVE && is_site_admin()){ - $r = q("SELECT COUNT(*) AS `total` FROM `register`"); - $register = $r[0]['total']; - } else { - $register = "0"; - } - - header("Content-type: text/xml"); - echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<result><intro>$intro</intro><mail>$mail</mail><net>$network</net><home>$home</home><register>$register</register></result>\r\n"; + echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> + <result>"; + + if(local_user()){ + + + $comments = array(); + $likes = array(); + $dislikes = array(); + $friends = array(); + + $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, + `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`, + `pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink` + FROM `item` INNER JOIN `item` as `pitem` ON `pitem`.`id`=`item`.`parent` + WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND + `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0", + intval(local_user()) + ); + + $network = count($r); + foreach ($r as $it) { + switch($it['verb']){ + case ACTIVITY_LIKE: + $likes[] = $it; + break; + case ACTIVITY_DISLIKE: + $dislikes[] = $it; + break; + case ACTIVITY_FRIEND: + $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">"; + $obj = parse_xml_string($xmlhead.$it['object']); + $it['fname'] = $obj->title; + $friends[] = $it; + break; + default: + if ($it['parent']!=$it['id']) $comments[] = $it; + } + } + + + $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, + `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`, + `pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink` + FROM `item` INNER JOIN `item` as `pitem` ON `pitem`.`id`=`item`.`parent` + WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND + `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1", + intval(local_user()) + ); + $home = count($r); + foreach ($r as $it) { + switch($it['verb']){ + case ACTIVITY_LIKE: + $likes[] = $it; + break; + case ACTIVITY_DISLIKE: + $dislikes[] = $it; + break; + case ACTIVITY_FRIEND: + $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">"; + $obj = parse_xml_string($xmlhead.$it['object']); + $it['fname'] = $obj->title; + $friends[] = $it; + break; + default: + if ($it['parent']!=$it['id']) $comments[] = $it; + } + } + + + $intros1 = q("SELECT COUNT(`intro`.`id`) AS `total`, `intro`.`id`, `intro`.`datetime`, + `fcontact`.`name`, `fcontact`.`url`, `fcontact`.`photo` + FROM `intro` LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id` + WHERE `intro`.`uid` = %d AND `intro`.`blocked` = 0 AND `intro`.`ignore` = 0 AND `intro`.`fid`!=0", + intval(local_user()) + ); + $intros2 = q("SELECT COUNT(`intro`.`id`) AS `total`, `intro`.`id`, `intro`.`datetime`, + `contact`.`name`, `contact`.`url`, `contact`.`photo` + FROM `intro` LEFT JOIN `contact` ON `intro`.`contact-id` = `contact`.`id` + WHERE `intro`.`uid` = %d AND `intro`.`blocked` = 0 AND `intro`.`ignore` = 0 AND `intro`.`contact-id`!=0", + intval(local_user()) + ); + + $intro = $intros1[0]['total'] + $intros2[0]['total']; + if ($intros1[0]['total']==0) $intros1=Array(); + if ($intros2[0]['total']==0) $intros2=Array(); + $intros = $intros1+$intros2; + + + + $myurl = $a->get_baseurl() . '/profile/' . $a->user['nickname'] ; + $mails = q("SELECT *, COUNT(*) AS `total` FROM `mail` + WHERE `uid` = %d AND `seen` = 0 AND `from-url` != '%s' ", + intval(local_user()), + dbesc($myurl) + ); + $mail = $mails[0]['total']; + + if ($a->config['register_policy'] == REGISTER_APPROVE && is_site_admin()){ + $regs = q("SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`, COUNT(*) as `total` FROM `contact` RIGHT JOIN `register` ON `register`.`uid`=`contact`.`uid` WHERE `contact`.`self`=1"); + $register = $regs[0]['total']; + } else { + $register = "0"; + } + + + function xmlize($href, $name, $url, $photo, $date, $message){ + $notsxml = '<note href="%s" name="%s" url="%s" photo="%s" date="%s">%s</note>'; + return sprintf ( $notsxml, + xmlify($href), xmlify($name), xmlify($url), xmlify($photo), xmlify($date), xmlify($message) + ); + } + + + echo "<intro>$intro</intro> + <mail>$mail</mail> + <net>$network</net> + <home>$home</home>"; + if ($register!=0) echo "<register>$register</register>"; + + $tot = $mail+$intro+$register+count($comments)+count($likes)+count($dislikes)+count($friends); + + echo ' <notif count="'.$tot.'">'; + if ($intro>0){ + foreach ($intros as $i) { + echo xmlize( $a->get_baseurl().'/notifications/'.$i['id'], $i['name'], $i['url'], $i['photo'], relative_date($i['datetime']), t("{0} wants to be your friend") ); + }; + } + if ($mail>0){ + foreach ($mails as $i) { + echo xmlize( $a->get_baseurl().'/message/'.$i['id'], $i['from-name'], $i['from-url'], $i['from-photo'], relative_date($i['created']), t("{0} sent you a message") ); + }; + } + if ($register>0){ + foreach ($regs as $i) { + echo xmlize( $a->get_baseurl().'/admin/users/', $i['name'], $i['url'], $i['micro'], relative_date($i['created']), t("{0} requested registration") ); + }; + } + + if (count($comments)){ + foreach ($comments as $i) { + echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} commented %s's post"), $i['pname'] ) ); + }; + } + if (count($likes)){ + foreach ($likes as $i) { + echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} like %s's post"), $i['pname'] ) ); + }; + } + if (count($dislikes)){ + foreach ($dislikes as $i) { + echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} dislike %s's post"), $i['pname'] ) ); + }; + } + if (count($friends)){ + foreach ($friends as $i) { + echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} is now friend with %s"), $i['fname'] ) ); + }; + } + + + echo " </notif>"; + } + echo " <sysmsgs>"; + + if(x($_SESSION,'sysmsg')){ + foreach ($_SESSION['sysmsg'] as $m){ + echo "<notice>".($m)."</notice>"; + } + //$_SESSION['sysmsg']=array(); + unset($_SESSION['sysmsg']); + } + if(x($_SESSION,'sysmsg_info')){ + foreach ($_SESSION['sysmsg_info'] as $m){ + echo "<info>".($m)."</info>"; + } + //$_SESSION['sysmsg_info']=array(); + unset($_SESSION['sysmsg_info']); + } + + echo " </sysmsgs>"; + echo"</result> + "; killme(); } diff --git a/mod/post.php b/mod/post.php new file mode 100644 index 0000000000..4a7e33b23b --- /dev/null +++ b/mod/post.php @@ -0,0 +1,51 @@ +<?php + +/** + * Zot endpoint + */ + + +require_once('include/salmon.php'); +require_once('include/crypto.php'); +// not yet ready for prime time +//require_once('include/zot.php'); + +function post_post(&$a) { + + $bulk_delivery = false; + + if($a->argc == 1) { + $bulk_delivery = true; + } + else { + $nickname = $a->argv[2]; + $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' + AND `account_expired` = 0 LIMIT 1", + dbesc($nickname) + ); + if(! count($r)) + http_status_exit(500); + + $importer = $r[0]; + } + + $xml = file_get_contents('php://input'); + + logger('mod-post: new zot: ' . $xml, LOGGER_DATA); + + if(! $xml) + http_status_exit(500); + + $msg = zot_decode($importer,$xml); + + logger('mod-post: decoded msg: ' . print_r($msg,true), LOGGER_DATA); + + if(! is_array($msg)) + http_status_exit(500); + + $ret = 0; + $ret = zot_incoming($bulk_delivery, $importer,$msg); + http_status_exit(($ret) ? $ret : 200); + // NOTREACHED +} + diff --git a/mod/profile.php b/mod/profile.php index 2dd5df7585..50bbdd46e4 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -70,8 +70,9 @@ function profile_content(&$a, $update = 0) { $a->profile['profile_uid'] = $update; } else { - if($a->profile['profile_uid'] == local_user()) - $o .= '<script> $(document).ready(function() { $(\'#nav-home-link\').addClass(\'nav-selected\'); });</script>'; + if($a->profile['profile_uid'] == local_user()) { + nav_set_selected('home'); + } } $contact = null; @@ -238,7 +239,6 @@ function profile_content(&$a, $update = 0) { if(! $update) { $o .= paginate($a); - $o .= cc_license(); } return $o; diff --git a/mod/profile_photo.php b/mod/profile_photo.php index 8dc8966532..4de3aaa3e0 100644 --- a/mod/profile_photo.php +++ b/mod/profile_photo.php @@ -155,9 +155,15 @@ function profile_photo_content(&$a) { notice( t('Permission denied.') . EOL ); return; } + $havescale = false; + foreach($r as $rr) { + if($rr['scale'] == 5) + $havescale = true; + } + // set an already uloaded photo as profile photo // if photo is in 'Profile Photos', change it in db - if ($r[0]['album']== t('Profile Photos')){ + if (($r[0]['album']== t('Profile Photos')) && ($havescale)){ $r=q("UPDATE `photo` SET `profile`=0 WHERE `profile`=1 AND `uid`=%d", intval(local_user())); diff --git a/mod/profiles.php b/mod/profiles.php index b269fa30c7..f5f335c7e4 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -220,7 +220,7 @@ function profiles_post(&$a) { function profiles_content(&$a) { $o = ''; - $o .= '<script> $(document).ready(function() { $(\'#nav-profiles-link\').addClass(\'nav-selected\'); });</script>'; + nav_set_selected('profiles'); if(! local_user()) { notice( t('Permission denied.') . EOL); @@ -359,7 +359,7 @@ function profiles_content(&$a) { $a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl())); - $a->page['htmlhead'] .= "<script type=\"text/javascript\" src=\"include/country.js\" ></script>"; + $a->page['htmlhead'] .= "<script type=\"text/javascript\" src=\"js/country.js\" ></script>"; $f = get_config('system','birthday_input_format'); if(! $f) diff --git a/mod/pubsub.php b/mod/pubsub.php index 4dff5d531a..b2f0069271 100644 --- a/mod/pubsub.php +++ b/mod/pubsub.php @@ -44,7 +44,7 @@ function pubsub_init(&$a) { $subscribe = (($hub_mode === 'subscribe') ? 1 : 0); - $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' LIMIT 1", + $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1", dbesc($nick) ); if(! count($r)) @@ -99,7 +99,7 @@ function pubsub_post(&$a) { $nick = (($a->argc > 1) ? notags(trim($a->argv[1])) : ''); $contact_id = (($a->argc > 2) ? intval($a->argv[2]) : 0 ); - $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' LIMIT 1", + $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1", dbesc($nick) ); if(! count($r)) diff --git a/mod/receive.php b/mod/receive.php index 34128518b5..950bf0bd38 100644 --- a/mod/receive.php +++ b/mod/receive.php @@ -12,18 +12,26 @@ require_once('include/diaspora.php'); function receive_post(&$a) { - if($a->argc != 3 || $a->argv[1] !== 'users') - http_status_exit(500); + $public = false; - $guid = $a->argv[2]; + if(($a->argc == 2) && ($a->argv[1] === 'public')) { + $public = true; + } + else { - $r = q("SELECT * FROM `user` WHERE `guid` = '%s' LIMIT 1", - dbesc($guid) - ); - if(! count($r)) - http_status_exit(500); + if($a->argc != 3 || $a->argv[1] !== 'users') + http_status_exit(500); - $importer = $r[0]; + $guid = $a->argv[2]; + + $r = q("SELECT * FROM `user` WHERE `guid` = '%s' AND `account_expired` = 0 LIMIT 1", + dbesc($guid) + ); + if(! count($r)) + http_status_exit(500); + + $importer = $r[0]; + } // It is an application/x-www-form-urlencoded @@ -41,9 +49,13 @@ function receive_post(&$a) { if(! is_array($msg)) http_status_exit(500); - diaspora_dispatch($importer,$msg); + $ret = 0; + if($public) + diaspora_dispatch_public($msg); + else + $ret = diaspora_dispatch($importer,$msg); - http_status_exit(200); + http_status_exit(($ret) ? $ret : 200); // NOTREACHED } diff --git a/mod/register.php b/mod/register.php index 5fceebd4bd..85e1f9faa0 100644 --- a/mod/register.php +++ b/mod/register.php @@ -501,8 +501,7 @@ function register_content(&$a) { } - $license = cc_license(); - + $license = ''; $o = get_markup_template("register.tpl"); $o = replace_macros($o, array( diff --git a/mod/salmon.php b/mod/salmon.php index 0264e820db..6172d17a1d 100644 --- a/mod/salmon.php +++ b/mod/salmon.php @@ -25,12 +25,12 @@ function salmon_post(&$a) { $xml = file_get_contents('php://input'); - logger('mod-salmon: new salmon ' . $xml); + logger('mod-salmon: new salmon ' . $xml, LOGGER_DATA); $nick = (($a->argc > 1) ? notags(trim($a->argv[1])) : ''); $mentions = (($a->argc > 2 && $a->argv[2] === 'mention') ? true : false); - $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' LIMIT 1", + $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1", dbesc($nick) ); if(! count($r)) diff --git a/mod/search.php b/mod/search.php index 88ff9bbb73..034794e179 100644 --- a/mod/search.php +++ b/mod/search.php @@ -1,5 +1,60 @@ <?php +function search_saved_searches() { + + $o = ''; + + $r = q("select `term` from `search` WHERE `uid` = %d", + intval(local_user()) + ); + + if(count($r)) { + $o .= '<div id="saved-search-list" class="widget">'; + $o .= '<h3>' . t('Saved Searches') . '</h3>' . "\r\n"; + $o .= '<ul id="saved-search-ul">' . "\r\n"; + foreach($r as $rr) { + $o .= '<li class="saved-search-li clear"><a href="search/?f=&remove=1&search=' . $rr['term'] . '" class="icon drophide savedsearchdrop" title="' . t('Remove term') . '" onclick="return confirmDelete();" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> <a href="search/?f=&search=' . $rr['term'] . '" class="savedsearchterm" >' . $rr['term'] . '</a></li>' . "\r\n"; + } + $o .= '</ul></div>' . "\r\n"; + } + + return $o; + +} + + +function search_init(&$a) { + + $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); + + if(local_user()) { + if(x($_GET,'save') && $search) { + $r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1", + intval(local_user()), + dbesc($search) + ); + if(! count($r)) { + q("insert into `search` ( `uid`,`term` ) values ( %d, '%s') ", + intval(local_user()), + dbesc($search) + ); + } + } + if(x($_GET,'remove') && $search) { + q("delete from `search` where `uid` = %d and `term` = '%s' limit 1", + intval(local_user()), + dbesc($search) + ); + } + + $a->page['aside'] .= search_saved_searches(); + + } + + +} + + function search_post(&$a) { if(x($_POST,'search')) @@ -13,6 +68,8 @@ function search_content(&$a) { notice( t('Public access denied.') . EOL); return; } + + nav_set_selected('search'); require_once("include/bbcode.php"); require_once('include/security.php'); @@ -30,7 +87,7 @@ function search_content(&$a) { else $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); - $o .= search($search); + $o .= search($search,'search-box','/search',((local_user()) ? true : false)); if(! $search) return $o; @@ -86,12 +143,11 @@ function search_content(&$a) { ); - + $o .= '<h2>Search results for: ' . $search . '</h2>'; $o .= conversation($a,$r,'search',false); $o .= paginate($a); - $o .= cc_license(); return $o; } diff --git a/mod/settings.php b/mod/settings.php index 1b4098de8f..44ebdd77b1 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -299,7 +299,7 @@ if(! function_exists('settings_content')) { function settings_content(&$a) { $o = ''; - $o .= '<script> $(document).ready(function() { $(\'#nav-settings-link\').addClass(\'nav-selected\'); });</script>'; + nav_set_selected('settings'); if(! local_user()) { notice( t('Permission denied.') . EOL ); diff --git a/mod/tagmatch.php b/mod/tagmatch.php new file mode 100644 index 0000000000..8023fa433b --- /dev/null +++ b/mod/tagmatch.php @@ -0,0 +1,52 @@ +<?php + + +function tagmatch_content(&$a) { + + $search = notags(trim($_REQUEST['search'])); + + $o = ''; + + $o .= '<h2>' . t('Tag Match') . ' - ' . $search . '</h2>'; + + if($search) { + + $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : ''); + + if(strlen(get_config('system','directory_submit_url'))) + $x = fetch_url('http://dir.friendika.com/lsearch?f=' . $p . '&search=' . urlencode($search)); + +//TODO fallback local search if global dir not available. +// else +// $x = post_url($a->get_baseurl() . '/lsearch', $params); + + $j = json_decode($x); + + if($j->total) { + $a->set_pager_total($j->total); + $a->set_pager_itemspage($j->items_page); + } + + if(count($j->results)) { + + $tpl = get_markup_template('match.tpl'); + foreach($j->results as $jj) { + + $o .= replace_macros($tpl,array( + '$url' => $jj->url, + '$name' => $jj->name, + '$photo' => $jj->photo, + '$tags' => $jj->tags + )); + } + } + else { + info( t('No matches') . EOL); + } + + } + + $o .= '<div class="clear"></div>'; + $o .= paginate($a); + return $o; +} diff --git a/mod/update_notes.php b/mod/update_notes.php new file mode 100644 index 0000000000..90cc5bc69c --- /dev/null +++ b/mod/update_notes.php @@ -0,0 +1,60 @@ +<?php + +/** + * Module: update_profile + * Purpose: AJAX synchronisation of profile page + * + */ + + +require_once('mod/notes.php'); + +function update_notes_content(&$a) { + + $profile_uid = intval($_GET['p']); + + header("Content-type: text/html"); + echo "<!DOCTYPE html><html><body>\r\n"; + + /** + * We can remove this hack once Internet Explorer recognises HTML5 natively + */ + + echo (($_GET['msie'] == 1) ? '<div>' : '<section>'); + + /** + * + * Grab the page inner contents by calling the content function from the profile module directly, + * but move any image src attributes to another attribute name. This is because + * some browsers will prefetch all the images for the page even if we don't need them. + * The only ones we need to fetch are those for new page additions, which we'll discover + * on the client side and then swap the image back. + * + */ + + $text = notes_content($a,$profile_uid); + + $pattern = "/<img([^>]*) src=\"([^\"]*)\"/"; + $replace = "<img\${1} dst=\"\${2}\""; + $text = preg_replace($pattern, $replace, $text); + + $replace = '<br />' . t('[Embedded content - reload page to view]') . '<br />'; + $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; + $text = preg_replace($pattern, $replace, $text); + $pattern = "/<\s*video[^>]*>(.*?)<\s*\/\s*video>/i"; + $text = preg_replace($pattern, $replace, $text); + $pattern = "/<\s*embed[^>]*>(.*?)<\s*\/\s*embed>/i"; + $text = preg_replace($pattern, $replace, $text); + $pattern = "/<\s*iframe[^>]*>(.*?)<\s*\/\s*iframe>/i"; + $text = preg_replace($pattern, $replace, $text); + + /** + * reportedly some versions of MSIE don't handle tabs in XMLHttpRequest documents very well + */ + + echo str_replace("\t",' ',$text); + echo (($_GET['msie'] == 1) ? '</div>' : '</section>'); + echo "</body></html>\r\n"; + killme(); + +} \ No newline at end of file diff --git a/mod/wall_attach.php b/mod/wall_attach.php index ef6554df39..a66ed0d059 100644 --- a/mod/wall_attach.php +++ b/mod/wall_attach.php @@ -61,7 +61,7 @@ function wall_attach_post(&$a) { $filedata = @file_get_contents($src); $mimetype = z_mime_content_type($filename); - if((! strlen($mimetype)) || ($mimetype === 'application/octet-stream') && function_exists('mime_content_type')) + if(((! strlen($mimetype)) || ($mimetype === 'application/octet-stream')) && function_exists('mime_content_type')) $mimetype = mime_content_type($filename); $hash = random_string(); $created = datetime_convert(); diff --git a/mod/xrd.php b/mod/xrd.php index fcec74336e..a416a2cf3f 100644 --- a/mod/xrd.php +++ b/mod/xrd.php @@ -41,15 +41,18 @@ function xrd_init(&$a) { $tpl = file_get_contents('view/xrd_person.tpl'); $o = replace_macros($tpl, array( + '$nick' => $r[0]['nickname'], '$accturi' => $uri, '$profile_url' => $a->get_baseurl() . '/profile/' . $r[0]['nickname'], '$hcard_url' => $a->get_baseurl() . '/hcard/' . $r[0]['nickname'], '$atom' => $a->get_baseurl() . '/dfrn_poll/' . $r[0]['nickname'], + '$zot_post' => $a->get_baseurl() . '/post/' . $r[0]['nickname'], '$photo' => $a->get_baseurl() . '/photo/profile/' . $r[0]['uid'] . '.jpg', '$dspr' => $dspr, '$salmon' => $a->get_baseurl() . '/salmon/' . $r[0]['nickname'], '$salmen' => $a->get_baseurl() . '/salmon/' . $r[0]['nickname'] . '/mention', - '$modexp' => 'data:application/magic-public-key,' . $salmon_key + '$modexp' => 'data:application/magic-public-key,' . $salmon_key, + '$bigkey' => salmon_key($r[0]['pubkey']) )); diff --git a/update.php b/update.php index ef036008fc..723f12c1ac 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ <?php -define( 'UPDATE_VERSION' , 1082 ); +define( 'UPDATE_VERSION' , 1094 ); /** * @@ -676,8 +676,16 @@ function update_1080() { } function update_1081() { - q("ALTER TABLE `photo` ADD `guid` CHAR( 64 ) NOT NULL AFTER `contact`id`, + // there was a typo in update 1081 so it was corrected and moved up to 1082 +} + +function update_1082() { + q("ALTER TABLE `photo` ADD `guid` CHAR( 64 ) NOT NULL AFTER `contact-id`, ADD INDEX ( `guid` ) "); + // make certain the following code is only executed once + $r = q("select `id` from `photo` where `guid` != '' limit 1"); + if($r && count($r)) + return; $r = q("SELECT distinct(`resource-id`) FROM `photo` WHERE 1 group by `id`"); if(count($r)) { foreach($r as $rr) { @@ -689,3 +697,93 @@ function update_1081() { } } } + +function update_1083() { + q("CREATE TABLE IF NOT EXISTS `deliverq` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `cmd` CHAR( 32 ) NOT NULL , + `item` INT NOT NULL , + `contact` INT NOT NULL + ) ENGINE = MYISAM "); + +} + +function update_1084() { + q("ALTER TABLE `contact` ADD `attag` CHAR( 255 ) NOT NULL AFTER `nick` "); +} + +function update_1085() { + q("CREATE TABLE IF NOT EXISTS `search` ( + `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , + `uid` INT NOT NULL , + `term` CHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + INDEX ( `uid` ), + INDEX ( `term` ) + ) ENGINE = MYISAM "); +} + +function update_1086() { + q("ALTER TABLE `item` ADD `bookmark` tinyint(1) NOT NULL DEFAULT '0' AFTER `starred` "); +} + +function update_1087() { + q("ALTER TABLE `item` ADD `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `edited` "); + + $r = q("SELECT `id` FROM `item` WHERE `parent` = `id` "); + if(count($r)) { + foreach($r as $rr) { + $x = q("SELECT max(`created`) AS `cdate` FROM `item` WHERE `parent` = %d LIMIT 1", + intval($rr['id']) + ); + if(count($x)) + q("UPDATE `item` SET `commented` = '%s' WHERE `id` = %d LIMIT 1", + dbesc($x[0]['cdate']), + intval($rr['id']) + ); + } + } +} + +function update_1088() { + q("ALTER TABLE `user` ADD `account_expired` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `expire` , + ADD `account_expires_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `account_expired` , + ADD `expire_notification_sent` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `account_expires_on` "); +} + +function update_1089() { + q("ALTER TABLE `user` ADD `blocktags` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `hidewall` "); +} + +function update_1090() { + q("ALTER TABLE `contact` ADD `batch` char(255) NOT NULL AFTER `prvkey` "); + + q("UPDATE `contact` SET `batch` = concat(substring_index(`url`,'/',3),'/receive/public') WHERE `network` = 'dspr' "); + +} + +function update_1091() { + + // catch a few stragglers that may have crept in before we added this on remote connects + q("UPDATE `contact` SET `batch` = concat(substring_index(`url`,'/',3),'/receive/public') WHERE `network` = 'dspr' AND `batch` = '' "); + q("ALTER TABLE `queue` ADD `batch` TINYINT( 1 ) NOT NULL DEFAULT '0' "); + q("ALTER TABLE `fcontact` ADD `batch` char(255) NOT NULL AFTER `addr` "); + +} + +function update_1092() { + q("ALTER TABLE `user` ADD INDEX ( `login_date` ) "); + q("ALTER TABLE `user` ADD INDEX ( `account_expired` ) "); +} + +function update_1093() { + q("CREATE TABLE IF NOT EXISTS `fserver` ( + `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , + `server` CHAR( 255 ) NOT NULL , + `posturl` CHAR( 255 ) NOT NULL , + `key` TEXT NOT NULL, + INDEX ( `server` ) + ) ENGINE = MYISAM "); + + q("ALTER TABLE `group` ADD `visible` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `uid` "); + +} \ No newline at end of file diff --git a/util/po2php.php b/util/po2php.php index 1a86bb38d0..c703172af7 100644 --- a/util/po2php.php +++ b/util/po2php.php @@ -10,7 +10,14 @@ function po2php_run($argv, $argc) { $pofile = $argv[1]; $outfile = dirname($pofile)."/strings.php"; - + + if(strstr($outfile,'util')) + $lang = 'en'; + else + $lang = str_replace('-','_',basename(dirname($pofile))); + + + if (!file_exists($pofile)){ print "Unable to find '$pofile'\n"; return; @@ -37,7 +44,7 @@ function po2php_run($argv, $argc) { $match=Array(); preg_match("|nplurals=([0-9]*); *plural=(.*)[;\\\\]|", $l, $match); $cond = str_replace('n','$n',$match[2]); - $out .= 'function string_plural_select($n){'."\n"; + $out .= 'function string_plural_select_' . $lang . '($n){'."\n"; $out .= ' return '.$cond.';'."\n"; $out .= '}'."\n"; } diff --git a/view/404.tpl b/view/404.tpl new file mode 100644 index 0000000000..bf4d4e949c --- /dev/null +++ b/view/404.tpl @@ -0,0 +1 @@ +<h1>$message</h1> diff --git a/view/admin_aside.tpl b/view/admin_aside.tpl index 63f109d7f7..a10c06f4ee 100644 --- a/view/admin_aside.tpl +++ b/view/admin_aside.tpl @@ -12,26 +12,26 @@ </script> <h4><a href="$admurl">Admin</a></h4> <ul class='admin linklist'> - <li class='admin link $admin.site.2'><a href='$admin.site.0'>$admin.site.1</a></li> - <li class='admin link $admin.users.2'><a href='$admin.users.0'>$admin.users.1</a><span id='pending-update' title='$h_pending'></span></li> - <li class='admin link $admin.plugins.2'><a href='$admin.plugins.0'>$admin.plugins.1</a></li> + <li class='admin link button $admin.site.2'><a href='$admin.site.0'>$admin.site.1</a></li> + <li class='admin link button $admin.users.2'><a href='$admin.users.0'>$admin.users.1</a><span id='pending-update' title='$h_pending'></span></li> + <li class='admin link button $admin.plugins.2'><a href='$admin.plugins.0'>$admin.plugins.1</a></li> </ul> <ul class='admin linklist'> - <li class='admin link $admin.update.2'><a href='$admin.update.0'>$admin.update.1</a></li> + <li class='admin link button $admin.update.2'><a href='$admin.update.0'>$admin.update.1</a></li> </ul> {{ if $admin.plugins_admin }}<h4>Plugins</h4>{{ endif }} <ul class='admin linklist'> {{ for $admin.plugins_admin as $l }} - <li class='admin link $l.2'><a href='$l.0'>$l.1</a></li> + <li class='admin link button $l.2'><a href='$l.0'>$l.1</a></li> {{ endfor }} </ul> <h4>Logs</h4> <ul class='admin linklist'> - <li class='admin link $admin.logs.2'><a href='$admin.logs.0'>$admin.logs.1</a></li> + <li class='admin link button $admin.logs.2'><a href='$admin.logs.0'>$admin.logs.1</a></li> </ul> diff --git a/view/admin_remoteupdate.tpl b/view/admin_remoteupdate.tpl index 0c15692c23..41ecfaf85c 100644 --- a/view/admin_remoteupdate.tpl +++ b/view/admin_remoteupdate.tpl @@ -1,4 +1,4 @@ -<script src="include/jquery.htmlstream.js"></script> +<script src="js/jquery.htmlstream.js"></script> <script> /* ajax updater */ function updateEnd(data){ diff --git a/view/admin_site.tpl b/view/admin_site.tpl index 061656df76..9a12298454 100644 --- a/view/admin_site.tpl +++ b/view/admin_site.tpl @@ -43,6 +43,7 @@ {{ inc field_input.tpl with $field=$proxy }}{{ endinc }} {{ inc field_input.tpl with $field=$proxyuser }}{{ endinc }} {{ inc field_input.tpl with $field=$timeout }}{{ endinc }} + {{ inc field_input.tpl with $field=$abandon_days }}{{ endinc }} <div class="submit"><input type="submit" name="page_site" value="$submit" /></div> diff --git a/view/apps.tpl b/view/apps.tpl new file mode 100644 index 0000000000..4c7f8c94cc --- /dev/null +++ b/view/apps.tpl @@ -0,0 +1,7 @@ +<h3>$title</h3> + +<ul> + {{ for $apps as $ap }} + <li>$ap</li> + {{ endfor }} +</ul> diff --git a/view/auto_request.tpl b/view/auto_request.tpl index b8d2d1a729..377da25c53 100644 --- a/view/auto_request.tpl +++ b/view/auto_request.tpl @@ -4,8 +4,9 @@ <p id="dfrn-request-intro"> $page_desc<br /> <ul id="dfrn-request-networks"> -<li><a href="http://friendika.com" title="$private_net">$friendika</a> <img src="images/lock_icon.gif" alt="$private_net" title="$private_net" /></li> -<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a> <img src="images/unlock_icon.gif" alt="$public_net" title="$public_net"/></li> +<li><a href="http://friendika.com" title="$friendika">$friendika</a></li> +<li><a href="http://joindiaspora.com" title="$diaspora">$diaspora</a> $diasnote</li> +<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a></li> </ul> </p> diff --git a/view/contact_block.tpl b/view/contact_block.tpl new file mode 100644 index 0000000000..eb46c6c43c --- /dev/null +++ b/view/contact_block.tpl @@ -0,0 +1,11 @@ +<div id="contact-block"> +<h4 class="contact-block-h4">$contacts</h4> +{{ if $micropro }} + <a class="allcontact-link" href="viewcontacts/$nickname">$viewcontacts</a> + <div class='contact-block-content'> + {{ for $micropro as $m }} + $m + {{ endfor }} + </div> +{{ endif }} +</div> diff --git a/view/contact_edit.tpl b/view/contact_edit.tpl index 66479210ff..248140a6bd 100644 --- a/view/contact_edit.tpl +++ b/view/contact_edit.tpl @@ -3,6 +3,8 @@ <div id="contact-edit-banner-name">$name</div> +$nettype + <form action="contacts/$contact_id" method="post" > <input type="hidden" name="contact_id" value="$contact_id"> @@ -28,13 +30,14 @@ </div> <div id="contact-edit-nav-end"></div> - + {{ if $poll_enabled }} <div id="contact-edit-poll-wrapper"> <div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span></div> <div id="contact-edit-poll-text">$updpub</div> $poll_interval - <div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div> + <div id="contact-edit-update-now" class="button"><a href="contacts/$contact_id/update" >$udnow</a></div> </div> + {{ endif }} </div> <div id="contact-edit-end" ></div> @@ -42,8 +45,6 @@ $insecure $blocked $ignored -$grps - <div id="view-recent-wrapper"><a href="network/?cid=$contact_id" id="contact-view-recent">$lblrecent</a></div> $lblsuggest @@ -65,24 +66,5 @@ $profile_select <input class="contact-edit-submit" type="submit" name="submit" value="$submit" /> - -<div id="contact-edit-rating-wrapper"> -<h4>$lbl_rep1</h4> -<p> -$lbl_rep2 $lbl_rep3 -</p> -<div id="contact-edit-rating-select-wrapper"> -$rating -</div> -<div id="contact-edit-rating-explain"> -<p> -$lbl_rep4 -</p> -<textarea id="contact-edit-rating-text" name="reason" rows="3" cols="64" >$reason</textarea> -</div> -</div> -$groups - -<input class="contact-edit-submit" type="submit" name="submit" value="$submit" /> </form> </div> diff --git a/view/contact_template.tpl b/view/contact_template.tpl index e9f616760d..e1a080b675 100644 --- a/view/contact_template.tpl +++ b/view/contact_template.tpl @@ -1,19 +1,18 @@ <div class="contact-entry-wrapper" id="contact-entry-wrapper-$id" > <div class="contact-entry-photo-wrapper" > - <div class="contact-entry-nav-wrapper" > - <div class="contact-entry-direction-wrapper" > - <img class="contact-entry-direction-icon" src="$dir_icon" alt="$alt_text" title="$alt_text" /> - </div> - <div class="contact-entry-direction-end" ></div> - <div class="contact-entry-edit-links" > - <a class="icon pencil" href="contacts/$id" class="contact-entry-edit-link" title="$edit_hover"></a> - </div> - <div class="contact-entry-edit-end"></div> - </div> - <div class="contact-entry-nav-end"></div> - <div class="contact-entry-photo" id="contact-entry-photo-$id" > + <div class="contact-entry-photo mframe" id="contact-entry-photo-$id" + onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('contact-photo-menu-button-$id')" onmouseout="t$id=setTimeout('closeMenu(\'contact-photo-menu-button-$id\'); closeMenu(\'contact-photo-menu-$id\');',200)" > + <a href="$url" title="$img_hover" /><img src="$thumb" $sparkle alt="$name" /></a> + + <span onclick="openClose('contact-photo-menu-$id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$id">menu</span> + <div class="contact-photo-menu" id="contact-photo-menu-$id"> + <ul> + $contact_photo_menu + </ul> + </div> + </div> </div> diff --git a/view/conversation.tpl b/view/conversation.tpl new file mode 100644 index 0000000000..446814959b --- /dev/null +++ b/view/conversation.tpl @@ -0,0 +1,13 @@ +{{ for $threads as $thread }} +<div class="tread-wrapper"> + $thread +</div> +{{ endfor }} + +{{ if $dropping }} +<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();"> + <div id="item-delete-selected-icon" class="icon drophide" title="$dropping" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div> + <div id="item-delete-selected-desc" >$dropping</div> +</div> +<div id="item-delete-selected-end"></div> +{{ endif }} diff --git a/view/crepair.tpl b/view/crepair.tpl index 5870bac60a..c73fd0fdf1 100644 --- a/view/crepair.tpl +++ b/view/crepair.tpl @@ -7,6 +7,10 @@ <input type="text" id="crepair-nick" name="nick" value="$contact_nick" /> <div class="clear"></div> +<label id="crepair-attag-label" for="crepair-attag">$label_attag</label> +<input type="text" id="crepair-attag" name="attag" value="$contact_attag" /> +<div class="clear"></div> + <label id="crepair-url-label" for="crepair-url">$label_url</label> <input type="text" id="crepair-url" name="url" value="$contact_url" /> <div class="clear"></div> diff --git a/view/cs/htconfig.tpl b/view/cs/htconfig.tpl index 15fe8402b2..dca34f4824 100644 --- a/view/cs/htconfig.tpl +++ b/view/cs/htconfig.tpl @@ -24,6 +24,10 @@ $default_timezone = '$timezone'; $a->config['sitename'] = "Moje síť přátel"; +// Nastavení defaultního jazyka webu + +$a->config['system']['language'] = 'cs'; + // Vaše možnosti jsou REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED. // Ujistěte se, že jste si vytvořili Váš osobníúčet dříve, než nastavíte // REGISTER_CLOSED. 'register_text' (pokud je nastaven) se bude zobrazovat jako první text na diff --git a/view/cs/lostpass_eml.tpl b/view/cs/lostpass_eml.tpl index b9ca68ba64..05042ddce0 100644 --- a/view/cs/lostpass_eml.tpl +++ b/view/cs/lostpass_eml.tpl @@ -15,7 +15,7 @@ Následně si toto heslo můžete změnit z vašeho účtu na stránce Nastaven Přihlašovací údaje jsou tato: -Adresa webu: $siteurl +Adresa webu: $siteurl Přihlašovací jméno: $email S pozdravem, diff --git a/view/cs/mail_received_html_body_eml.tpl b/view/cs/mail_received_html_body_eml.tpl index 0909b450c2..427c6c98da 100644 --- a/view/cs/mail_received_html_body_eml.tpl +++ b/view/cs/mail_received_html_body_eml.tpl @@ -16,7 +16,7 @@ <td style="padding-top:22px;"><a href="$url">$from</a></td></tr> <tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr> <tr><td style="padding-right:22px;">$htmlversion</td></tr> - <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Přihlaste se na <a href="$siteurl">$siteurl$<a/> pro čtení a zaslání odpovědí na Vaše soukromé zprávy.</td></tr> + <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Přihlaste se na <a href="$siteurl">$siteurl<a/> pro čtení a zaslání odpovědí na Vaše soukromé zprávy.</td></tr> <tr><td></td><td>Díky,</td></tr> <tr><td></td><td>$siteName administrátor</td></tr> </tbody> diff --git a/view/cs/messages.po b/view/cs/messages.po index ac83cca4e9..82f6f2fb9f 100644 --- a/view/cs/messages.po +++ b/view/cs/messages.po @@ -2,13 +2,13 @@ # Copyright (C) 2010, 2011 Mike Macgirvin # This file is distributed under the same license as the Friendika package. # -# Michal Šupler <msupler@gmail.com>, 2011, 2011.0 +# Michal Šupler <msupler@gmail.com>, 2011. msgid "" msgstr "" "Project-Id-Version: friendika\n" "Report-Msgid-Bugs-To: http://bugs.friendika.com/\n" -"POT-Creation-Date: 2011-05-26 06:46-0700\n" -"PO-Revision-Date: 2011-05-29 22:49+0000\n" +"POT-Creation-Date: 2011-08-14 21:17-0700\n" +"PO-Revision-Date: 2011-09-03 04:29+0000\n" "Last-Translator: michal_s <msupler@gmail.com>\n" "Language-Team: Czech (http://www.transifex.net/projects/p/friendika/team/cs/)\n" "MIME-Version: 1.0\n" @@ -23,33 +23,34 @@ msgstr "Příspěvek úspěšně odeslán" #: ../../mod/crepair.php:42 msgid "Contact settings applied." -msgstr "Opravit nastavení kontaktu" +msgstr "Nastavení kontaktu změněno" #: ../../mod/crepair.php:44 msgid "Contact update failed." msgstr "Aktualizace kontaktu selhala." #: ../../mod/crepair.php:54 ../../mod/wall_attach.php:43 -#: ../../mod/photos.php:89 ../../mod/photos.php:802 ../../mod/editpost.php:10 -#: ../../mod/install.php:93 ../../mod/notifications.php:56 -#: ../../mod/contacts.php:106 ../../mod/settings.php:15 -#: ../../mod/settings.php:20 ../../mod/settings.php:251 -#: ../../mod/manage.php:75 ../../mod/network.php:6 ../../mod/notes.php:20 -#: ../../mod/attach.php:64 ../../mod/group.php:19 +#: ../../mod/fsuggest.php:78 ../../mod/events.php:102 ../../mod/photos.php:122 +#: ../../mod/photos.php:849 ../../mod/editpost.php:10 ../../mod/install.php:96 +#: ../../mod/notifications.php:62 ../../mod/contacts.php:132 +#: ../../mod/settings.php:41 ../../mod/settings.php:46 +#: ../../mod/settings.php:305 ../../mod/manage.php:75 ../../mod/network.php:6 +#: ../../mod/notes.php:20 ../../mod/attach.php:33 ../../mod/group.php:19 #: ../../mod/viewcontacts.php:21 ../../mod/register.php:27 -#: ../../mod/regmod.php:18 ../../mod/item.php:57 ../../mod/item.php:801 +#: ../../mod/regmod.php:111 ../../mod/item.php:110 #: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:133 #: ../../mod/profile_photo.php:144 ../../mod/profile_photo.php:155 -#: ../../mod/message.php:8 ../../mod/message.php:116 +#: ../../mod/message.php:8 ../../mod/message.php:116 ../../mod/admin.php:10 #: ../../mod/wall_upload.php:42 ../../mod/follow.php:8 -#: ../../mod/display.php:138 ../../mod/profiles.php:7 -#: ../../mod/profiles.php:230 ../../mod/invite.php:13 ../../mod/invite.php:54 -#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:242 -#: ../../index.php:256 +#: ../../mod/display.php:108 ../../mod/profiles.php:7 +#: ../../mod/profiles.php:226 ../../mod/invite.php:13 ../../mod/invite.php:81 +#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:308 +#: ../../include/items.php:1930 ../../index.php:266 msgid "Permission denied." msgstr "Přístup odmítnut." -#: ../../mod/crepair.php:68 ../../mod/contacts.php:214 +#: ../../mod/crepair.php:68 ../../mod/fsuggest.php:20 +#: ../../mod/fsuggest.php:92 ../../mod/contacts.php:240 #: ../../mod/dfrn_confirm.php:114 msgid "Contact not found." msgstr "Kontakt nenalezen." @@ -70,9 +71,11 @@ msgstr "" msgid "" "Please use your browser 'Back' button <strong>now</strong> if you are " "uncertain what to do on this page." -msgstr "Aktualizace kontaktu selhala" +msgstr "" +"Prosím použijte <strong>ihned</strong> v prohlížeči tlačítko \"zpět\" pokud " +"si nejste jistí co dělat na této stránce." -#: ../../mod/crepair.php:85 +#: ../../mod/crepair.php:85 ../../mod/admin.php:464 ../../mod/admin.php:473 msgid "Name" msgstr "Jméno" @@ -98,25 +101,27 @@ msgstr "Notifikační URL adresa" #: ../../mod/crepair.php:91 msgid "Poll/Feed URL" -msgstr "" -"Sdílený obsah v síti Friendika je poskytována pod <a " -"href=\"http://creativecommons.org/licenses/by/3.0/cz/\">licencí Creative " -"Commons Attribution 3.0</a>" +msgstr "Poll/Feed URL adresa" -#: ../../mod/crepair.php:100 ../../mod/photos.php:830 ../../mod/photos.php:887 -#: ../../mod/photos.php:1095 ../../mod/photos.php:1135 -#: ../../mod/photos.php:1174 ../../mod/photos.php:1205 -#: ../../mod/install.php:133 ../../mod/contacts.php:264 -#: ../../mod/settings.php:426 ../../mod/manage.php:106 ../../mod/group.php:76 -#: ../../mod/group.php:159 ../../mod/profiles.php:383 ../../mod/invite.php:68 -#: ../../addon/facebook/facebook.php:289 -#: ../../addon/randplace/randplace.php:179 ../../addon/oembed/oembed.php:49 -#: ../../addon/statusnet/statusnet.php:216 -#: ../../addon/statusnet/statusnet.php:230 -#: ../../addon/statusnet/statusnet.php:256 -#: ../../addon/statusnet/statusnet.php:263 -#: ../../addon/statusnet/statusnet.php:285 ../../addon/twitter/twitter.php:156 -#: ../../addon/twitter/twitter.php:175 ../../include/conversation.php:383 +#: ../../mod/crepair.php:100 ../../mod/fsuggest.php:107 +#: ../../mod/events.php:333 ../../mod/photos.php:877 ../../mod/photos.php:934 +#: ../../mod/photos.php:1144 ../../mod/photos.php:1184 +#: ../../mod/photos.php:1223 ../../mod/photos.php:1254 +#: ../../mod/install.php:137 ../../mod/contacts.php:296 +#: ../../mod/settings.php:482 ../../mod/manage.php:106 ../../mod/group.php:84 +#: ../../mod/group.php:167 ../../mod/admin.php:298 ../../mod/admin.php:461 +#: ../../mod/admin.php:587 ../../mod/admin.php:652 ../../mod/profiles.php:372 +#: ../../mod/invite.php:106 ../../addon/facebook/facebook.php:366 +#: ../../addon/randplace/randplace.php:178 +#: ../../addon/impressum/impressum.php:69 ../../addon/oembed/oembed.php:41 +#: ../../addon/statusnet/statusnet.php:274 +#: ../../addon/statusnet/statusnet.php:288 +#: ../../addon/statusnet/statusnet.php:314 +#: ../../addon/statusnet/statusnet.php:321 +#: ../../addon/statusnet/statusnet.php:343 +#: ../../addon/statusnet/statusnet.php:468 ../../addon/piwik/piwik.php:76 +#: ../../addon/twitter/twitter.php:171 ../../addon/twitter/twitter.php:194 +#: ../../addon/twitter/twitter.php:280 ../../include/conversation.php:409 msgid "Submit" msgstr "Odeslat" @@ -137,8 +142,112 @@ msgstr "Velikost souboru přesáhla limit %d" msgid "File upload failed." msgstr "Nahrání souboru se nezdařilo." +#: ../../mod/fsuggest.php:63 +msgid "Friend suggestion sent." +msgstr "Návrhy přátelství odeslány " + +#: ../../mod/fsuggest.php:97 +msgid "Suggest Friends" +msgstr "Navrhněte přátelé" + +#: ../../mod/fsuggest.php:99 +#, php-format +msgid "Suggest a friend for %s" +msgstr "Navrhněte přátelé pro uživatele %s" + +#: ../../mod/events.php:112 ../../mod/photos.php:834 ../../mod/notes.php:46 +#: ../../mod/profile.php:116 +msgid "Status" +msgstr "Stav" + +#: ../../mod/events.php:113 ../../mod/photos.php:835 ../../mod/notes.php:47 +#: ../../mod/profperm.php:103 ../../mod/profile.php:117 +#: ../../include/profile_advanced.php:7 +msgid "Profile" +msgstr "Profil" + +#: ../../mod/events.php:114 ../../mod/photos.php:836 ../../mod/notes.php:48 +#: ../../mod/profile.php:118 +msgid "Photos" +msgstr "Fotografie" + +#: ../../mod/events.php:115 ../../mod/events.php:120 ../../mod/photos.php:837 +#: ../../mod/notes.php:49 ../../mod/profile.php:119 +msgid "Events" +msgstr "Události" + +#: ../../mod/events.php:116 ../../mod/photos.php:838 ../../mod/notes.php:50 +#: ../../mod/notes.php:55 ../../mod/profile.php:120 +msgid "Personal Notes" +msgstr "Osobní poznámky" + +#: ../../mod/events.php:210 +msgid "Create New Event" +msgstr "Vytvořit novou událost" + +#: ../../mod/events.php:213 +msgid "Previous" +msgstr "Předchozí" + +#: ../../mod/events.php:216 +msgid "Next" +msgstr "Následující" + +#: ../../mod/events.php:223 +msgid "l, F j" +msgstr "l, F j" + +#: ../../mod/events.php:235 +msgid "Edit event" +msgstr "Editovat událost" + +#: ../../mod/events.php:237 ../../include/text.php:846 +msgid "link to source" +msgstr "odkaz na zdroj" + +#: ../../mod/events.php:305 +msgid "hour:minute" +msgstr "hodina:minuta" + +#: ../../mod/events.php:314 +msgid "Event details" +msgstr "Detaily události" + +#: ../../mod/events.php:315 +#, php-format +msgid "Format is %s %s. Starting date and Description are required." +msgstr "Formát je %s %s. Datum zahájení a popis jsou povinné." + +#: ../../mod/events.php:316 +msgid "Event Starts:" +msgstr "Událost začíná:" + +#: ../../mod/events.php:319 +msgid "Finish date/time is not known or not relevant" +msgstr "Datum/čas konce není zadán nebo není relevantní" + +#: ../../mod/events.php:321 +msgid "Event Finishes:" +msgstr "Akce končí:" + +#: ../../mod/events.php:324 +msgid "Adjust for viewer timezone" +msgstr "Nastavit časové pásmo pro uživatele s právem pro čtení" + +#: ../../mod/events.php:326 +msgid "Description:" +msgstr "Popis:" + +#: ../../mod/events.php:328 ../../include/event.php:37 ../../boot.php:868 +msgid "Location:" +msgstr "Místo:" + +#: ../../mod/events.php:330 +msgid "Share this event" +msgstr "Sdílet tuto událost" + #: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94 -#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:41 +#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:45 msgid "Cancel" msgstr "Zrušit" @@ -163,205 +272,231 @@ msgstr "Odstranit" msgid "%s welcomes %s" msgstr "%s vítá %s " -#: ../../mod/photos.php:34 +#: ../../mod/photos.php:37 msgid "Photo Albums" msgstr "Fotoalba" -#: ../../mod/photos.php:38 ../../mod/photos.php:110 ../../mod/photos.php:810 -#: ../../mod/photos.php:879 ../../mod/photos.php:894 ../../mod/photos.php:1282 -#: ../../mod/photos.php:1293 ../../include/Photo.php:233 -#: ../../include/Photo.php:240 ../../include/Photo.php:247 -#: ../../include/items.php:1041 ../../include/items.php:1044 -#: ../../include/items.php:1047 +#: ../../mod/photos.php:45 ../../mod/photos.php:143 ../../mod/photos.php:857 +#: ../../mod/photos.php:926 ../../mod/photos.php:941 ../../mod/photos.php:1332 +#: ../../mod/photos.php:1344 msgid "Contact Photos" msgstr "Fotogalerie kontaktu" -#: ../../mod/photos.php:99 +#: ../../mod/photos.php:57 ../../mod/settings.php:9 +msgid "everybody" +msgstr "Žádost o připojení selhala nebo byla zrušena." + +#: ../../mod/photos.php:132 msgid "Contact information unavailable" msgstr "Kontakt byl zablokován" -#: ../../mod/photos.php:110 ../../mod/photos.php:535 ../../mod/photos.php:879 -#: ../../mod/photos.php:894 ../../mod/register.php:290 -#: ../../mod/register.php:297 ../../mod/register.php:304 +#: ../../mod/photos.php:143 ../../mod/photos.php:577 ../../mod/photos.php:926 +#: ../../mod/photos.php:941 ../../mod/register.php:316 +#: ../../mod/register.php:323 ../../mod/register.php:330 #: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65 #: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:160 #: ../../mod/profile_photo.php:236 ../../mod/profile_photo.php:245 msgid "Profile Photos" msgstr "Profilové fotografie" -#: ../../mod/photos.php:120 +#: ../../mod/photos.php:153 msgid "Album not found." msgstr "Album nenalezeno." -#: ../../mod/photos.php:138 ../../mod/photos.php:888 +#: ../../mod/photos.php:171 ../../mod/photos.php:935 msgid "Delete Album" msgstr "Smazat album" -#: ../../mod/photos.php:201 ../../mod/photos.php:1096 +#: ../../mod/photos.php:234 ../../mod/photos.php:1145 msgid "Delete Photo" msgstr "Smazat fotografii" -#: ../../mod/photos.php:473 +#: ../../mod/photos.php:508 msgid "was tagged in a" msgstr "štítek byl přidán v" -#: ../../mod/photos.php:473 ../../mod/like.php:110 -#: ../../include/conversation.php:20 +#: ../../mod/photos.php:508 ../../mod/like.php:110 +#: ../../include/diaspora.php:446 ../../include/conversation.php:31 msgid "photo" msgstr "fotografie" -#: ../../mod/photos.php:473 +#: ../../mod/photos.php:508 msgid "by" msgstr "od" -#: ../../mod/photos.php:563 ../../addon/js_upload/js_upload.php:306 +#: ../../mod/photos.php:608 ../../addon/js_upload/js_upload.php:310 msgid "Image exceeds size limit of " msgstr "Velikost obrázku překračuje limit velikosti" -#: ../../mod/photos.php:577 ../../mod/profile_photo.php:118 +#: ../../mod/photos.php:616 +msgid "Image file is empty." +msgstr "Soubor obrázku je prázdný." + +#: ../../mod/photos.php:630 ../../mod/profile_photo.php:118 #: ../../mod/wall_upload.php:65 msgid "Unable to process image." -msgstr "Kontakt byl odblokován" +msgstr "Obrázek není možné zprocesovat" -#: ../../mod/photos.php:597 ../../mod/profile_photo.php:241 -#: ../../mod/wall_upload.php:82 +#: ../../mod/photos.php:650 ../../mod/profile_photo.php:241 +#: ../../mod/wall_upload.php:84 msgid "Image upload failed." msgstr "Nahrání obrázku selhalo." -#: ../../mod/photos.php:680 ../../mod/dfrn_request.php:591 -#: ../../mod/viewcontacts.php:16 ../../mod/display.php:7 -#: ../../mod/search.php:13 ../../mod/directory.php:20 +#: ../../mod/photos.php:733 ../../mod/community.php:9 +#: ../../mod/dfrn_request.php:591 ../../mod/viewcontacts.php:16 +#: ../../mod/display.php:7 ../../mod/search.php:13 ../../mod/directory.php:20 msgid "Public access denied." msgstr "Veřejný přístup odepřen." -#: ../../mod/photos.php:690 +#: ../../mod/photos.php:743 msgid "No photos selected" msgstr "Není vybrána žádná fotografie" -#: ../../mod/photos.php:837 +#: ../../mod/photos.php:820 +msgid "Access to this item is restricted." +msgstr "Přístup k této položce je omezen." + +#: ../../mod/photos.php:884 msgid "Upload Photos" msgstr "Nahrání fotografií " -#: ../../mod/photos.php:840 ../../mod/photos.php:883 +#: ../../mod/photos.php:887 ../../mod/photos.php:930 msgid "New album name: " msgstr "Název nového alba:" -#: ../../mod/photos.php:841 +#: ../../mod/photos.php:888 msgid "or existing album name: " msgstr "nebo stávající název alba:" -#: ../../mod/photos.php:843 ../../mod/photos.php:1091 +#: ../../mod/photos.php:890 ../../mod/photos.php:1140 msgid "Permissions" msgstr "Oprávnění:" -#: ../../mod/photos.php:898 +#: ../../mod/photos.php:945 msgid "Edit Album" msgstr "Edituj album" -#: ../../mod/photos.php:908 ../../mod/photos.php:1311 +#: ../../mod/photos.php:955 ../../mod/photos.php:1362 msgid "View Photo" msgstr "Zobraz fotografii" -#: ../../mod/photos.php:937 +#: ../../mod/photos.php:984 msgid "Photo not available" msgstr "Fotografie není k dispozici" -#: ../../mod/photos.php:986 +#: ../../mod/photos.php:1033 msgid "Edit photo" msgstr "Editovat fotografii" -#: ../../mod/photos.php:987 +#: ../../mod/photos.php:1034 msgid "Use as profile photo" msgstr "Použít jako profilovou fotografii" -#: ../../mod/photos.php:993 ../../include/conversation.php:316 +#: ../../mod/photos.php:1040 ../../include/conversation.php:342 msgid "Private Message" msgstr "Soukromá zpráva" -#: ../../mod/photos.php:1000 -msgid "<< Prev" -msgstr "<< Předchozí" - -#: ../../mod/photos.php:1004 +#: ../../mod/photos.php:1051 msgid "View Full Size" msgstr "Zobrazit v plné velikosti" -#: ../../mod/photos.php:1009 -msgid "Next >>" -msgstr "Následující >>" - -#: ../../mod/photos.php:1071 +#: ../../mod/photos.php:1119 msgid "Tags: " msgstr "Štítky:" -#: ../../mod/photos.php:1074 +#: ../../mod/photos.php:1122 msgid "[Remove any tag]" msgstr "[Odstranit všechny štítky]" -#: ../../mod/photos.php:1084 +#: ../../mod/photos.php:1133 msgid "New album name" msgstr "Nové jméno alba" -#: ../../mod/photos.php:1087 +#: ../../mod/photos.php:1136 msgid "Caption" msgstr "Titulek" -#: ../../mod/photos.php:1089 +#: ../../mod/photos.php:1138 msgid "Add a Tag" msgstr "Přidat štítek" -#: ../../mod/photos.php:1093 +#: ../../mod/photos.php:1142 msgid "" "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -msgstr "Kontakt byl ignorován" +msgstr "" +"Příklad: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -#: ../../mod/photos.php:1113 ../../include/conversation.php:364 +#: ../../mod/photos.php:1162 ../../include/conversation.php:390 msgid "I like this (toggle)" msgstr "Líbí se mi to (přepínač)" -#: ../../mod/photos.php:1114 ../../include/conversation.php:365 +#: ../../mod/photos.php:1163 ../../include/conversation.php:391 msgid "I don't like this (toggle)" msgstr "Nelíbí se mi to (přepínač)" -#: ../../mod/photos.php:1115 ../../include/conversation.php:366 -#: ../../include/conversation.php:731 +#: ../../mod/photos.php:1164 ../../include/conversation.php:392 +#: ../../include/conversation.php:746 msgid "Share" msgstr "Sdílet" -#: ../../mod/photos.php:1116 ../../mod/editpost.php:97 +#: ../../mod/photos.php:1165 ../../mod/editpost.php:99 #: ../../mod/message.php:190 ../../mod/message.php:324 -#: ../../include/conversation.php:367 ../../include/conversation.php:741 +#: ../../include/conversation.php:393 ../../include/conversation.php:756 msgid "Please wait" msgstr "Čekejte prosím" -#: ../../mod/photos.php:1132 ../../mod/photos.php:1171 -#: ../../mod/photos.php:1202 ../../include/conversation.php:380 +#: ../../mod/photos.php:1181 ../../mod/photos.php:1220 +#: ../../mod/photos.php:1251 ../../include/conversation.php:406 msgid "This is you" msgstr "To je Vy" -#: ../../mod/photos.php:1134 ../../mod/photos.php:1173 -#: ../../mod/photos.php:1204 ../../include/conversation.php:382 -#: ../../boot.php:386 +#: ../../mod/photos.php:1183 ../../mod/photos.php:1222 +#: ../../mod/photos.php:1253 ../../include/conversation.php:408 +#: ../../boot.php:411 msgid "Comment" msgstr "Okomentovat" -#: ../../mod/photos.php:1232 ../../mod/group.php:146 -#: ../../include/conversation.php:179 ../../include/conversation.php:393 +#: ../../mod/photos.php:1281 ../../mod/group.php:154 ../../mod/admin.php:468 +#: ../../include/conversation.php:427 msgid "Delete" msgstr "Odstranit" -#: ../../mod/photos.php:1298 +#: ../../mod/photos.php:1349 msgid "Recent Photos" msgstr "Aktuální fotografie" -#: ../../mod/photos.php:1302 +#: ../../mod/photos.php:1353 msgid "Upload New Photos" msgstr "Nahrát nové fotografie" -#: ../../mod/photos.php:1315 +#: ../../mod/photos.php:1366 msgid "View Album" msgstr "Zobrazit album" +#: ../../mod/community.php:14 +msgid "Not available." +msgstr "Není k dispozici." + +#: ../../mod/community.php:26 ../../include/nav.php:79 +msgid "Community" +msgstr "Komunita" + +#: ../../mod/community.php:56 ../../mod/search.php:65 +msgid "No results." +msgstr "Žádné výsledky." + +#: ../../mod/community.php:83 ../../mod/network.php:302 +#: ../../mod/register.php:504 ../../mod/profile.php:241 +#: ../../mod/display.php:117 +msgid "" +"Shared content is covered by the <a " +"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons " +"Attribution 3.0</a> license." +msgstr "" +"Sdílený obsah je v souladu s <a " +"href=\"http://creativecommons.org/licenses/by/3.0/\">Commons Creative " +"3.0</a> licencí." + #: ../../mod/editpost.php:17 ../../mod/editpost.php:27 msgid "Item not found" msgstr "Položka nenalezena" @@ -370,72 +505,72 @@ msgstr "Položka nenalezena" msgid "Edit post" msgstr "Upravit příspěvek" -#: ../../mod/editpost.php:75 ../../include/conversation.php:717 +#: ../../mod/editpost.php:75 ../../include/conversation.php:732 msgid "Post to Email" msgstr "Poslat příspěvek na e-mail" -#: ../../mod/editpost.php:88 ../../include/group.php:169 -#: ../../include/conversation.php:391 +#: ../../mod/editpost.php:90 ../../include/group.php:171 +#: ../../include/group.php:172 ../../include/conversation.php:417 msgid "Edit" msgstr "Upravit" -#: ../../mod/editpost.php:89 ../../mod/message.php:188 -#: ../../mod/message.php:322 ../../include/conversation.php:732 +#: ../../mod/editpost.php:91 ../../mod/message.php:188 +#: ../../mod/message.php:322 ../../include/conversation.php:747 msgid "Upload photo" msgstr "Nahrát fotografii" -#: ../../mod/editpost.php:90 ../../include/conversation.php:733 +#: ../../mod/editpost.php:92 ../../include/conversation.php:748 msgid "Attach file" msgstr "Přiložit soubor" -#: ../../mod/editpost.php:91 ../../mod/message.php:189 -#: ../../mod/message.php:323 ../../include/conversation.php:734 +#: ../../mod/editpost.php:93 ../../mod/message.php:189 +#: ../../mod/message.php:323 ../../include/conversation.php:749 msgid "Insert web link" msgstr "Vložit webový odkaz" -#: ../../mod/editpost.php:92 ../../include/conversation.php:735 +#: ../../mod/editpost.php:94 ../../include/conversation.php:750 msgid "Insert YouTube video" msgstr "Vložit YouTube video" -#: ../../mod/editpost.php:93 ../../include/conversation.php:736 +#: ../../mod/editpost.php:95 ../../include/conversation.php:751 msgid "Insert Vorbis [.ogg] video" msgstr "Vložit Vorbis [.ogg] video" -#: ../../mod/editpost.php:94 ../../include/conversation.php:737 +#: ../../mod/editpost.php:96 ../../include/conversation.php:752 msgid "Insert Vorbis [.ogg] audio" msgstr "Vložit Vorbis [.ogg] audio" -#: ../../mod/editpost.php:95 ../../include/conversation.php:738 +#: ../../mod/editpost.php:97 ../../include/conversation.php:753 msgid "Set your location" -msgstr "Kontakt přestal být ignorován" +msgstr "Nastavte vaši polohu" -#: ../../mod/editpost.php:96 ../../include/conversation.php:739 +#: ../../mod/editpost.php:98 ../../include/conversation.php:754 msgid "Clear browser location" -msgstr "Kontakt byl odstraněn" +msgstr "Odstranit adresu v prohlížeči" -#: ../../mod/editpost.php:98 ../../include/conversation.php:742 +#: ../../mod/editpost.php:100 ../../include/conversation.php:757 msgid "Permission settings" msgstr "Nastavení oprávnění" -#: ../../mod/editpost.php:106 ../../include/conversation.php:750 +#: ../../mod/editpost.php:108 ../../include/conversation.php:765 msgid "CC: email addresses" msgstr "skrytá kopie: e-mailové adresy" -#: ../../mod/editpost.php:107 ../../include/conversation.php:751 +#: ../../mod/editpost.php:109 ../../include/conversation.php:766 msgid "Public post" msgstr "Veřejný příspěvek" -#: ../../mod/editpost.php:109 ../../include/conversation.php:753 +#: ../../mod/editpost.php:111 ../../include/conversation.php:768 msgid "Example: bob@example.com, mary@example.com" -msgstr "Editor kontaktu" +msgstr "Příklad: bob@example.com, mary@example.com" #: ../../mod/dfrn_request.php:96 msgid "This introduction has already been accepted." -msgstr "Kontaktní informace / poznámky" +msgstr "Toto pozvání již bylo přijato" #: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:351 msgid "Profile location is not valid or does not contain profile information." -msgstr "Zablokovat/Odblokovat kontakt" +msgstr "Adresa profilu není platná nebo neobsahuje profilové informace" #: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356 msgid "Warning: profile location has no identifiable owner name." @@ -460,7 +595,7 @@ msgstr "Představení dokončeno." #: ../../mod/dfrn_request.php:192 msgid "Unrecoverable protocol error." -msgstr "Smazat kontakt" +msgstr "Neopravitelná chyba protokolu" #: ../../mod/dfrn_request.php:220 msgid "Profile unavailable." @@ -473,7 +608,7 @@ msgstr "%s dnes obdržel příliš mnoho požadavků na připojení." #: ../../mod/dfrn_request.php:246 msgid "Spam protection measures have been invoked." -msgstr "Blokovat tento kontakt" +msgstr "Ochrana proti spamu byla aktivována" #: ../../mod/dfrn_request.php:247 msgid "Friends are advised to please try again in 24 hours." @@ -504,7 +639,7 @@ msgstr "Neplatné URL profilu." msgid "Disallowed profile URL." msgstr "Nepovolené URL profilu." -#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:90 +#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:116 msgid "Failed to update contact record." msgstr "Nepodařilo se aktualizovat kontakt." @@ -538,7 +673,7 @@ msgstr "Prosím potvrďte Vaši žádost o představení/spojení %s." msgid "Confirm" msgstr "Potvrdit" -#: ../../mod/dfrn_request.php:542 ../../include/items.php:1440 +#: ../../mod/dfrn_request.php:542 ../../include/items.php:1519 msgid "[Name Withheld]" msgstr "[Jméno odepřeno]" @@ -546,13 +681,13 @@ msgstr "[Jméno odepřeno]" msgid "Introduction received at " msgstr "Pozvánka přijata v" -#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:40 -#: ../../mod/lostpass.php:102 ../../mod/register.php:335 -#: ../../mod/register.php:385 ../../mod/regmod.php:98 -#: ../../mod/dfrn_notify.php:191 ../../mod/dfrn_notify.php:443 -#: ../../mod/dfrn_confirm.php:658 ../../include/items.php:1449 +#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:44 +#: ../../mod/lostpass.php:106 ../../mod/register.php:369 +#: ../../mod/register.php:423 ../../mod/regmod.php:54 +#: ../../mod/dfrn_notify.php:291 ../../mod/dfrn_notify.php:547 +#: ../../mod/dfrn_confirm.php:674 ../../include/items.php:1528 msgid "Administrator" -msgstr "Správce" +msgstr "Administrátor" #: ../../mod/dfrn_request.php:630 msgid "Friend/Connection Request" @@ -571,18 +706,21 @@ msgid "Please answer the following:" msgstr "Odpovězte, prosím, následující:" #: ../../mod/dfrn_request.php:633 -msgid "Does $name know you?" -msgstr "Zná Vás $name?" +#, php-format +msgid "Does %s know you?" +msgstr "Zná Vás uživatel %s ?" -#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:350 -#: ../../mod/settings.php:362 ../../mod/register.php:459 -#: ../../mod/profiles.php:358 ../../mod/profiles.php:367 +#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:415 +#: ../../mod/settings.php:421 ../../mod/settings.php:429 +#: ../../mod/settings.php:433 ../../mod/register.php:498 +#: ../../mod/profiles.php:354 msgid "Yes" msgstr "Ano" -#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:351 -#: ../../mod/settings.php:363 ../../mod/register.php:460 -#: ../../mod/profiles.php:359 ../../mod/profiles.php:368 +#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:415 +#: ../../mod/settings.php:421 ../../mod/settings.php:429 +#: ../../mod/settings.php:433 ../../mod/register.php:499 +#: ../../mod/profiles.php:355 msgid "No" msgstr "Ne" @@ -622,41 +760,41 @@ msgstr "Adresa Vaší identity :" msgid "Submit Request" msgstr "Odeslat žádost" -#: ../../mod/install.php:33 +#: ../../mod/install.php:34 msgid "Could not create/connect to database." msgstr "Nelze vytvořit / připojit se k databázi." -#: ../../mod/install.php:38 +#: ../../mod/install.php:39 msgid "Connected to database." msgstr "Připojeno k databázi." -#: ../../mod/install.php:72 +#: ../../mod/install.php:75 msgid "Proceed with Installation" msgstr "Pokračovat v instalaci" -#: ../../mod/install.php:74 +#: ../../mod/install.php:77 msgid "Your Friendika site database has been installed." msgstr "Vaše databáze Friendiky byla nainstalována." -#: ../../mod/install.php:75 +#: ../../mod/install.php:78 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the " "poller." msgstr "Důležité: Budete si muset [ručně] plánovat úlohu pro poller." -#: ../../mod/install.php:76 ../../mod/install.php:86 ../../mod/install.php:199 +#: ../../mod/install.php:79 ../../mod/install.php:89 ../../mod/install.php:207 msgid "Please see the file \"INSTALL.txt\"." msgstr "Přečtěte si prosím informace v souboru \"INSTALL.txt\"." -#: ../../mod/install.php:78 +#: ../../mod/install.php:81 msgid "Proceed to registration" msgstr "Pokračovat k registraci" -#: ../../mod/install.php:84 +#: ../../mod/install.php:87 msgid "Database import failed." msgstr "Import databáze se nezdařil." -#: ../../mod/install.php:85 +#: ../../mod/install.php:88 msgid "" "You may need to import the file \"database.sql\" manually using phpmyadmin " "or mysql." @@ -664,65 +802,73 @@ msgstr "" "Možná budete muset importovat soubor \"database.sql\" ručně pomocí " "phpMyAdmin či MySQL." -#: ../../mod/install.php:98 +#: ../../mod/install.php:101 msgid "Welcome to Friendika." msgstr "Vítejte na Friendice." -#: ../../mod/install.php:121 +#: ../../mod/install.php:124 msgid "Friendika Social Network" msgstr "Sociální síť Friendika " -#: ../../mod/install.php:122 +#: ../../mod/install.php:125 msgid "Installation" msgstr "Instalace" -#: ../../mod/install.php:123 +#: ../../mod/install.php:126 msgid "" -"In order to install Friendika we need to know how to contact your database." -msgstr "" -"Pro instalaci Friendiky musíme vědět, jak se připojit k Vaší databázi." +"In order to install Friendika we need to know how to connect to your " +"database." +msgstr "Pro instalaci Friendika musíme vědět, jak se připojit k databázi." -#: ../../mod/install.php:124 +#: ../../mod/install.php:127 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." msgstr "" -"Obraťte se na svého poskytovatele hostingu nebo správce serveru, pokud máte " -"dotazy týkající se těchto nastavení." +"Obraťte se na svého poskytovatele hostingu nebo administrátora serveru , " +"pokud máte dotazy týkající se těchto nastavení." -#: ../../mod/install.php:125 +#: ../../mod/install.php:128 msgid "" -"The database you specify below must already exist. If it does not, please " +"The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "" -"Databáze zadáte níže již musí existovat. Pokud ještě neexistuje, vytvořte " -"ji, prosím, aby bylo možné pokračovat." +"Databázi, kterou uvedete níže by již měla existovat. Pokud tak není, " +"prosíme, vytvořte ji před pokračováním." -#: ../../mod/install.php:126 +#: ../../mod/install.php:129 msgid "Database Server Name" msgstr "Jméno databázového serveru" -#: ../../mod/install.php:127 +#: ../../mod/install.php:130 msgid "Database Login Name" msgstr "Přihlašovací jméno k databázi" -#: ../../mod/install.php:128 +#: ../../mod/install.php:131 msgid "Database Login Password" msgstr "Heslo k databázovému účtu " -#: ../../mod/install.php:129 +#: ../../mod/install.php:132 msgid "Database Name" msgstr "Jméno databáze" -#: ../../mod/install.php:130 +#: ../../mod/install.php:133 msgid "Please select a default timezone for your website" msgstr "Prosím, vyberte výchozí časové pásmo pro vaše webové stránky" -#: ../../mod/install.php:148 +#: ../../mod/install.php:134 +msgid "" +"Site administrator email address. Your account email address must match this" +" in order to use the web admin panel." +msgstr "" +"e-mailová adresa administrárota webu. E-mailová adresa vašeho účtu se musí " +"shodovat, aby bylo možné využívat panel webové administrace." + +#: ../../mod/install.php:153 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "Nelze najít verzi PHP pro příkazový řádek v PATH webového serveru." -#: ../../mod/install.php:149 +#: ../../mod/install.php:154 msgid "" "This is required. Please adjust the configuration file .htconfig.php " "accordingly." @@ -730,7 +876,7 @@ msgstr "" "Tento krok je nutný. Upravte příslušným způsobem konfigurační soubor " ".htconfig.php." -#: ../../mod/install.php:156 +#: ../../mod/install.php:161 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." @@ -738,11 +884,11 @@ msgstr "" "Verze PHP pro příkazový řádek na vašem systému nemá povolen " "\"register_argc_argv\"." -#: ../../mod/install.php:157 +#: ../../mod/install.php:162 msgid "This is required for message delivery to work." msgstr "Toto je nutné pro fungování doručování zpráv." -#: ../../mod/install.php:179 +#: ../../mod/install.php:184 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" @@ -750,7 +896,7 @@ msgstr "" "Chyba: funkce \"openssl_pkey_new\" na tomto systému není schopna generovat " "šifrovací klíče" -#: ../../mod/install.php:180 +#: ../../mod/install.php:185 msgid "" "If running under Windows, please see " "\"http://www.php.net/manual/en/openssl.installation.php\"." @@ -758,30 +904,34 @@ msgstr "" "Pokud systém běží na Windows, seznamte se s " "\"http://www.php.net/manual/en/openssl.installation.php\"." -#: ../../mod/install.php:189 +#: ../../mod/install.php:194 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "" "Chyba: Požadovaný Apache webserver mod-rewrite modul není nainstalován." -#: ../../mod/install.php:191 +#: ../../mod/install.php:196 msgid "Error: libCURL PHP module required but not installed." msgstr "Chyba: požadovaný libcurl PHP modul není nainstalován." -#: ../../mod/install.php:193 +#: ../../mod/install.php:198 msgid "" "Error: GD graphics PHP module with JPEG support required but not installed." msgstr "Chyba: požadovaný GD graphics PHP modul není nainstalován." -#: ../../mod/install.php:195 +#: ../../mod/install.php:200 msgid "Error: openssl PHP module required but not installed." msgstr "Chyba: požadovaný openssl PHP modul není nainstalován." -#: ../../mod/install.php:197 +#: ../../mod/install.php:202 msgid "Error: mysqli PHP module required but not installed." msgstr "Chyba: požadovaný mysqli PHP modul není nainstalován." -#: ../../mod/install.php:208 +#: ../../mod/install.php:204 +msgid "Error: mb_string PHP module required but not installed." +msgstr "Chyba: PHP modul mb_string je vyžadován, ale není nainstalován." + +#: ../../mod/install.php:216 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." @@ -790,7 +940,7 @@ msgstr "" "\".htconfig.php\" v hlavním adresáři vašeho webového serveru ale nyní mu to " "není umožněno." -#: ../../mod/install.php:209 +#: ../../mod/install.php:217 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." @@ -798,7 +948,7 @@ msgstr "" "Toto je nejčastěji nastavením oprávnění, kdy webový server nemusí být " "schopen zapisovat soubory do vašeho adresáře - i když Vy můžete." -#: ../../mod/install.php:210 +#: ../../mod/install.php:218 msgid "" "Please check with your site documentation or support people to see if this " "situation can be corrected." @@ -806,7 +956,7 @@ msgstr "" "Prosím, poraďte se s dokumentací k Vašemu hostingu nebo s technickou " "podporou, zda-li lze tuto situaci napravit." -#: ../../mod/install.php:211 +#: ../../mod/install.php:219 msgid "" "If not, you may be required to perform a manual installation. Please see the" " file \"INSTALL.txt\" for instructions." @@ -814,7 +964,7 @@ msgstr "" "Pokud ne, může být vyžadováno provedení ruční instalace. Prosím, seznamte se" " s návodem popsaným v souboru \"INSTALL.txt\"." -#: ../../mod/install.php:220 +#: ../../mod/install.php:228 msgid "" "The database configuration file \".htconfig.php\" could not be written. " "Please use the enclosed text to create a configuration file in your web " @@ -824,15 +974,26 @@ msgstr "" "použijte přiložený text k vytvoření konfiguračního souboru ve vašem " "kořenovém adresáři webového serveru." -#: ../../mod/install.php:235 +#: ../../mod/install.php:243 msgid "Errors encountered creating database tables." msgstr "Při vytváření databázových tabulek došlo k chybám." +#: ../../mod/update_community.php:18 ../../mod/update_network.php:22 +#: ../../mod/update_profile.php:41 +msgid "[Embedded content - reload page to view]" +msgstr "[Vložený obsah - obnovení stránky pro zobrazení]" + #: ../../mod/match.php:10 msgid "Profile Match" msgstr "Shoda profilu" -#: ../../mod/match.php:50 +#: ../../mod/match.php:18 +msgid "No keywords to match. Please add keywords to your default profile." +msgstr "" +"Žádná klíčová slova k porovnání. Prosím, přidejte klíčová slova do Vašeho " +"výchozího profilu." + +#: ../../mod/match.php:54 msgid "No matches" msgstr "Žádné shody" @@ -849,183 +1010,195 @@ msgstr "Viditelné pro:" msgid "Welcome to %s" msgstr "Vítá Vás %s" -#: ../../mod/notifications.php:28 +#: ../../mod/notifications.php:26 msgid "Invalid request identifier." msgstr "Neplatný identifikátor požadavku." -#: ../../mod/notifications.php:31 ../../mod/notifications.php:133 +#: ../../mod/notifications.php:35 ../../mod/notifications.php:118 +#: ../../mod/notifications.php:162 msgid "Discard" msgstr "Odstranit" -#: ../../mod/notifications.php:41 ../../mod/notifications.php:132 +#: ../../mod/notifications.php:47 ../../mod/notifications.php:117 +#: ../../mod/notifications.php:161 msgid "Ignore" msgstr "Ignorovat" -#: ../../mod/notifications.php:68 +#: ../../mod/notifications.php:74 msgid "Pending Friend/Connect Notifications" msgstr "Čekající požadavky na Přátelství / Připojení " -#: ../../mod/notifications.php:72 +#: ../../mod/notifications.php:78 msgid "Show Ignored Requests" msgstr "Zobrazit ignorované žádosti" -#: ../../mod/notifications.php:72 +#: ../../mod/notifications.php:78 msgid "Hide Ignored Requests" msgstr "Skrýt ignorované žádosti" -#: ../../mod/notifications.php:104 -msgid "Claims to be known to you: " -msgstr "Vaši údajní známí:" - -#: ../../mod/notifications.php:104 -msgid "yes" -msgstr "ano" - -#: ../../mod/notifications.php:104 -msgid "no" -msgstr "ne" - -#: ../../mod/notifications.php:110 -msgid "Approve as: " -msgstr "Schválit jako:" - -#: ../../mod/notifications.php:111 -msgid "Friend" -msgstr "Přítel" - -#: ../../mod/notifications.php:112 -msgid "Fan/Admirer" -msgstr "Fanoušek / obdivovatel" - -#: ../../mod/notifications.php:119 +#: ../../mod/notifications.php:105 ../../mod/notifications.php:148 msgid "Notification type: " msgstr "Typ oznámení:" -#: ../../mod/notifications.php:120 -msgid "Friend/Connect Request" -msgstr "Přítel / žádost o připojení" +#: ../../mod/notifications.php:106 +msgid "Friend Suggestion" +msgstr "Návrh přátelství" -#: ../../mod/notifications.php:120 -msgid "New Follower" -msgstr "Nový následovník" +#: ../../mod/notifications.php:108 +#, php-format +msgid "suggested by %s" +msgstr "navrhl %s" -#: ../../mod/notifications.php:130 ../../mod/notifications.php:153 +#: ../../mod/notifications.php:114 ../../mod/notifications.php:159 +#: ../../mod/admin.php:466 msgid "Approve" msgstr "Schválit" +#: ../../mod/notifications.php:133 +msgid "Claims to be known to you: " +msgstr "Vaši údajní známí:" + +#: ../../mod/notifications.php:133 +msgid "yes" +msgstr "ano" + +#: ../../mod/notifications.php:133 +msgid "no" +msgstr "ne" + #: ../../mod/notifications.php:139 +msgid "Approve as: " +msgstr "Schválit jako:" + +#: ../../mod/notifications.php:140 +msgid "Friend" +msgstr "Přítel" + +#: ../../mod/notifications.php:141 +msgid "Fan/Admirer" +msgstr "Fanoušek / obdivovatel" + +#: ../../mod/notifications.php:149 +msgid "Friend/Connect Request" +msgstr "Přítel / žádost o připojení" + +#: ../../mod/notifications.php:149 +msgid "New Follower" +msgstr "Nový následovník" + +#: ../../mod/notifications.php:168 msgid "No notifications." msgstr "Žádné oznámení." -#: ../../mod/notifications.php:143 -msgid "User registrations waiting for confirm" -msgstr "Registrace uživatele čeká na potvrzení" - -#: ../../mod/notifications.php:154 -msgid "Deny" -msgstr "Odmítnout" - -#: ../../mod/notifications.php:159 -msgid "No registrations." -msgstr "Žádné registrace." - -#: ../../mod/contacts.php:12 +#: ../../mod/contacts.php:26 msgid "Invite Friends" msgstr "Pozvat přátele" -#: ../../mod/contacts.php:15 +#: ../../mod/contacts.php:32 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "Pozvánka %d k dispozici" +msgstr[1] "Pozvánky %d k dispozici" +msgstr[2] "Pozvánky %d k dispozici" + +#: ../../mod/contacts.php:41 msgid "Find People With Shared Interests" msgstr "Najít lidi se společnými zájmy" -#: ../../mod/contacts.php:19 +#: ../../mod/contacts.php:45 msgid "Connect/Follow" msgstr "Připojit / Následovat" -#: ../../mod/contacts.php:20 +#: ../../mod/contacts.php:46 msgid "Example: bob@example.com, http://example.com/barbara" msgstr "Příklad: jan@příklad.cz, http://příklad.cz/jana" -#: ../../mod/contacts.php:21 +#: ../../mod/contacts.php:47 msgid "Follow" msgstr "Následovat" -#: ../../mod/contacts.php:43 ../../mod/contacts.php:124 +#: ../../mod/contacts.php:69 ../../mod/contacts.php:150 msgid "Could not access contact record." msgstr "Nelze získat přístup k záznamu kontaktu." -#: ../../mod/contacts.php:57 +#: ../../mod/contacts.php:83 msgid "Could not locate selected profile." msgstr "Nelze nalézt vybraný profil." -#: ../../mod/contacts.php:88 +#: ../../mod/contacts.php:114 msgid "Contact updated." msgstr "Kontakt aktualizován." -#: ../../mod/contacts.php:146 +#: ../../mod/contacts.php:172 msgid "Contact has been blocked" msgstr "Kontakt byl zablokován" -#: ../../mod/contacts.php:146 +#: ../../mod/contacts.php:172 msgid "Contact has been unblocked" msgstr "Kontakt byl odblokován" -#: ../../mod/contacts.php:160 +#: ../../mod/contacts.php:186 msgid "Contact has been ignored" msgstr "Kontakt bude ignorován" -#: ../../mod/contacts.php:160 +#: ../../mod/contacts.php:186 msgid "Contact has been unignored" msgstr "Kontakt přestal být ignorován" -#: ../../mod/contacts.php:181 +#: ../../mod/contacts.php:207 msgid "stopped following" msgstr "následování zastaveno" -#: ../../mod/contacts.php:200 +#: ../../mod/contacts.php:226 msgid "Contact has been removed." msgstr "Kontakt byl odstraněn." -#: ../../mod/contacts.php:228 ../../mod/contacts.php:363 +#: ../../mod/contacts.php:254 ../../mod/contacts.php:397 msgid "Mutual Friendship" msgstr "Vzájemné přátelství" -#: ../../mod/contacts.php:232 ../../mod/contacts.php:367 +#: ../../mod/contacts.php:258 ../../mod/contacts.php:401 msgid "is a fan of yours" msgstr "je Váš fanoušek" -#: ../../mod/contacts.php:237 ../../mod/contacts.php:371 +#: ../../mod/contacts.php:263 ../../mod/contacts.php:405 msgid "you are a fan of" msgstr "jste fanouškem" -#: ../../mod/contacts.php:252 +#: ../../mod/contacts.php:280 msgid "Privacy Unavailable" msgstr "Ochrana soukromí není k dispozici" -#: ../../mod/contacts.php:253 +#: ../../mod/contacts.php:281 msgid "Private communications are not available for this contact." msgstr "Soukromá komunikace není dostupná pro tento kontakt." -#: ../../mod/contacts.php:256 +#: ../../mod/contacts.php:284 msgid "Never" msgstr "Nikdy" -#: ../../mod/contacts.php:260 +#: ../../mod/contacts.php:288 msgid "(Update was successful)" msgstr "(Aktualizace byla úspěšná)" -#: ../../mod/contacts.php:260 +#: ../../mod/contacts.php:288 msgid "(Update was not successful)" msgstr "(Aktualizace nebyla úspěšná)" -#: ../../mod/contacts.php:263 +#: ../../mod/contacts.php:291 +msgid "Suggest friends" +msgstr "Navrhněte přátelé" + +#: ../../mod/contacts.php:295 msgid "Contact Editor" msgstr "Editor kontaktu" -#: ../../mod/contacts.php:265 +#: ../../mod/contacts.php:297 msgid "Profile Visibility" msgstr "Viditelnost profilu" -#: ../../mod/contacts.php:266 +#: ../../mod/contacts.php:298 #, php-format msgid "" "Please choose the profile you would like to display to %s when viewing your " @@ -1034,22 +1207,22 @@ msgstr "" "Vyberte prosím profil, který chcete zobrazit %s při zabezpečeném prohlížení " "vašeho profilu." -#: ../../mod/contacts.php:267 +#: ../../mod/contacts.php:299 msgid "Contact Information / Notes" msgstr "Kontaktní informace / poznámky" -#: ../../mod/contacts.php:268 +#: ../../mod/contacts.php:300 msgid "Online Reputation" msgstr "Online pověst" -#: ../../mod/contacts.php:269 +#: ../../mod/contacts.php:301 msgid "" "Occasionally your friends may wish to inquire about this person's online " "legitimacy." msgstr "" "Občas mohou vaši přátelé chtít informovat o online legitimitě této osoby." -#: ../../mod/contacts.php:270 +#: ../../mod/contacts.php:302 msgid "" "You may help them choose whether or not to interact with this person by " "providing a <em>reputation</em> to guide them." @@ -1057,7 +1230,7 @@ msgstr "" "Poskytnutím <em>pověsti</em> jim můžete pomoci se rozhodnout, zda-li s touto" " osobou komunikovat či nikoliv." -#: ../../mod/contacts.php:271 +#: ../../mod/contacts.php:303 msgid "" "Please take a moment to elaborate on this selection if you feel it could be " "helpful to others." @@ -1065,110 +1238,111 @@ msgstr "" "Věnujte prosím chvilku vyplnění této volby, pokud máte pocit, že by mohlo " "být užitečné pro ostatní." -#: ../../mod/contacts.php:272 -msgid "Visit $name's profile" -msgstr "Navštívit profil $name" +#: ../../mod/contacts.php:304 ../../mod/contacts.php:421 +#: ../../mod/viewcontacts.php:61 +#, php-format +msgid "Visit %s's profile [%s]" +msgstr "Navštivte profil uživatele %s [%s]" -#: ../../mod/contacts.php:273 +#: ../../mod/contacts.php:305 msgid "Block/Unblock contact" msgstr "Blokovat / Odblokovat kontakt" -#: ../../mod/contacts.php:274 +#: ../../mod/contacts.php:306 msgid "Ignore contact" msgstr "Ignorovat kontakt" -#: ../../mod/contacts.php:275 +#: ../../mod/contacts.php:307 msgid "Repair contact URL settings" msgstr "Opravit nastavení URL kontaktu" -#: ../../mod/contacts.php:276 +#: ../../mod/contacts.php:308 msgid "Repair contact URL settings (WARNING: Advanced)" msgstr "Opravit nastavení URL kontaktu (Varování: Pokročilé)" -#: ../../mod/contacts.php:277 +#: ../../mod/contacts.php:309 msgid "View conversations" msgstr "Zobrazit konverzace" -#: ../../mod/contacts.php:278 +#: ../../mod/contacts.php:312 msgid "Delete contact" msgstr "Odstranit kontakt" -#: ../../mod/contacts.php:280 +#: ../../mod/contacts.php:314 msgid "Last updated: " msgstr "Poslední aktualizace:" -#: ../../mod/contacts.php:281 +#: ../../mod/contacts.php:315 msgid "Update public posts: " msgstr "Aktualizace veřejných příspěvků:" -#: ../../mod/contacts.php:283 +#: ../../mod/contacts.php:317 ../../mod/admin.php:701 msgid "Update now" msgstr "Aktualizovat" -#: ../../mod/contacts.php:286 +#: ../../mod/contacts.php:320 msgid "Unblock this contact" msgstr "Odblokovat tento kontakt" -#: ../../mod/contacts.php:286 +#: ../../mod/contacts.php:320 msgid "Block this contact" msgstr "Blokovat tento kontakt" -#: ../../mod/contacts.php:287 +#: ../../mod/contacts.php:321 msgid "Unignore this contact" msgstr "Přestat ignorovat tento kontakt" -#: ../../mod/contacts.php:287 +#: ../../mod/contacts.php:321 msgid "Ignore this contact" msgstr "Ignorovat tento kontakt" -#: ../../mod/contacts.php:290 +#: ../../mod/contacts.php:324 msgid "Currently blocked" msgstr "V současnosti zablokováno" -#: ../../mod/contacts.php:291 +#: ../../mod/contacts.php:325 msgid "Currently ignored" msgstr "V současnosti ignorováno" -#: ../../mod/contacts.php:322 ../../include/nav.php:109 -#: ../../include/acl_selectors.php:141 ../../include/acl_selectors.php:156 +#: ../../mod/contacts.php:356 ../../include/nav.php:110 msgid "Contacts" msgstr "Kontakty" -#: ../../mod/contacts.php:324 +#: ../../mod/contacts.php:358 msgid "Show Blocked Connections" msgstr "Zobrazit blokované spojení" -#: ../../mod/contacts.php:324 +#: ../../mod/contacts.php:358 msgid "Hide Blocked Connections" msgstr "Skrýt blokované spojení" -#: ../../mod/contacts.php:326 ../../mod/directory.php:55 +#: ../../mod/contacts.php:360 ../../mod/directory.php:55 msgid "Finding: " msgstr "Zjištění: " -#: ../../mod/contacts.php:327 ../../mod/directory.php:57 +#: ../../mod/contacts.php:361 ../../mod/directory.php:57 msgid "Find" msgstr "Najít" -#: ../../mod/contacts.php:387 ../../mod/viewcontacts.php:52 -msgid "Visit $username's profile" -msgstr "Navštívit profil uživatele $username" - -#: ../../mod/contacts.php:388 ../../include/conversation.php:597 +#: ../../mod/contacts.php:422 ../../include/conversation.php:612 msgid "Edit contact" msgstr "Editovat kontakt" -#: ../../mod/lostpass.php:27 +#: ../../mod/lostpass.php:16 +msgid "No valid account found." +msgstr "Nenalezen žádný platný účet." + +#: ../../mod/lostpass.php:31 msgid "Password reset request issued. Check your email." msgstr "" "Žádost o obnovení hesla vyřízena. Zkontrolujte Vaši e-mailovou schránku." -#: ../../mod/lostpass.php:38 +#: ../../mod/lostpass.php:42 #, php-format msgid "Password reset requested at %s" -msgstr "Resetování hesla vyžádáno v %s" +msgstr "Na %s bylo zažádáno o resetování hesla" -#: ../../mod/lostpass.php:60 +#: ../../mod/lostpass.php:64 msgid "" "Request could not be verified. (You may have previously submitted it.) " "Password reset failed." @@ -1176,27 +1350,27 @@ msgstr "" "Žádost nemohla být ověřena. (Možná jste ji odeslali již dříve.) Obnovení " "hesla se nezdařilo." -#: ../../mod/lostpass.php:78 ../../boot.php:852 +#: ../../mod/lostpass.php:82 ../../boot.php:654 msgid "Password Reset" -msgstr "Obnovit heslo" +msgstr "Obnovení hesla" -#: ../../mod/lostpass.php:79 +#: ../../mod/lostpass.php:83 msgid "Your password has been reset as requested." -msgstr "Vaše heslo bylo resetováno jak bylo požadováno." +msgstr "Vaše heslo bylo na Vaše přání resetováno." -#: ../../mod/lostpass.php:80 +#: ../../mod/lostpass.php:84 msgid "Your new password is" msgstr "Vaše nové heslo je" -#: ../../mod/lostpass.php:81 +#: ../../mod/lostpass.php:85 msgid "Save or copy your new password - and then" msgstr "Uložte si nebo zkopírujte nové heslo - a pak" -#: ../../mod/lostpass.php:82 +#: ../../mod/lostpass.php:86 msgid "click here to login" msgstr "klikněte zde pro přihlášení" -#: ../../mod/lostpass.php:83 +#: ../../mod/lostpass.php:87 msgid "" "Your password may be changed from the <em>Settings</em> page after " "successful login." @@ -1204,11 +1378,11 @@ msgstr "" "Vaše heslo může být změněno na stránce <em>nastavení</em> po úspěšném " "přihlášení." -#: ../../mod/lostpass.php:114 +#: ../../mod/lostpass.php:118 msgid "Forgot your Password?" msgstr "Zapomněli jste heslo?" -#: ../../mod/lostpass.php:115 +#: ../../mod/lostpass.php:119 msgid "" "Enter your email address and submit to have your password reset. Then check " "your email for further instructions." @@ -1216,246 +1390,267 @@ msgstr "" "Zadejte svůj e-mailovou adresu a odešlete žádost o zaslání Vašeho nového " "hesla. Poté zkontrolujte svůj e-mail pro další instrukce." -#: ../../mod/lostpass.php:116 +#: ../../mod/lostpass.php:120 msgid "Nickname or Email: " msgstr "Přezdívka nebo e-mail:" -#: ../../mod/lostpass.php:117 +#: ../../mod/lostpass.php:121 msgid "Reset" msgstr "Reset" -#: ../../mod/settings.php:38 +#: ../../mod/settings.php:64 msgid "Passwords do not match. Password unchanged." msgstr "Hesla se neshodují. Heslo nebylo změněno." -#: ../../mod/settings.php:43 +#: ../../mod/settings.php:69 msgid "Empty passwords are not allowed. Password unchanged." msgstr "Prázdné hesla nejsou povolena. Heslo nebylo změněno." -#: ../../mod/settings.php:54 +#: ../../mod/settings.php:80 msgid "Password changed." msgstr "Heslo bylo změněno." -#: ../../mod/settings.php:56 +#: ../../mod/settings.php:82 msgid "Password update failed. Please try again." msgstr "Aktualizace hesla se nezdařila. Zkuste to prosím znovu." -#: ../../mod/settings.php:138 +#: ../../mod/settings.php:161 +msgid "Failed to connect with email account using the settings provided." +msgstr "Nepodařilo se připojit k e-mailovému účtu pomocí dodaného nastavení." + +#: ../../mod/settings.php:188 msgid " Please use a shorter name." msgstr "Prosím použijte kratší jméno." -#: ../../mod/settings.php:140 +#: ../../mod/settings.php:190 msgid " Name too short." msgstr "Jméno je příliš krátké." -#: ../../mod/settings.php:146 +#: ../../mod/settings.php:196 msgid " Not valid email." msgstr "Neplatný e-mail." -#: ../../mod/settings.php:148 +#: ../../mod/settings.php:198 msgid " Cannot change to that email." msgstr "Nelze provést změnu na tento e-mail." -#: ../../mod/settings.php:206 +#: ../../mod/settings.php:257 ../../addon/facebook/facebook.php:297 +#: ../../addon/impressum/impressum.php:64 ../../addon/piwik/piwik.php:89 +#: ../../addon/twitter/twitter.php:275 msgid "Settings updated." msgstr "Nastavení aktualizováno." -#: ../../mod/settings.php:256 ../../mod/settings.php:418 -#: ../../addon/widgets/widgets.php:123 -msgid "Plugin Settings" -msgstr "Nastavení doplňku" - -#: ../../mod/settings.php:257 ../../mod/settings.php:417 -msgid "Account Settings" +#: ../../mod/settings.php:311 ../../include/nav.php:108 +msgid "Account settings" msgstr "Nastavení účtu" -#: ../../mod/settings.php:263 +#: ../../mod/settings.php:312 +msgid "Plugin settings" +msgstr "Nastavení pluginu" + +#: ../../mod/settings.php:322 msgid "No Plugin settings configured" msgstr "Žádný doplněk není nastaven" -#: ../../mod/settings.php:323 +#: ../../mod/settings.php:329 ../../addon/widgets/widgets.php:122 +msgid "Plugin Settings" +msgstr "Nastavení doplňku" + +#: ../../mod/settings.php:382 ../../mod/admin.php:133 ../../mod/admin.php:443 msgid "Normal Account" msgstr "Normální účet" -#: ../../mod/settings.php:324 +#: ../../mod/settings.php:383 msgid "This account is a normal personal profile" msgstr "Tento účet je běžný osobní profil" -#: ../../mod/settings.php:325 +#: ../../mod/settings.php:386 ../../mod/admin.php:134 ../../mod/admin.php:444 msgid "Soapbox Account" msgstr "Soapbox účet" -#: ../../mod/settings.php:326 +#: ../../mod/settings.php:387 msgid "Automatically approve all connection/friend requests as read-only fans" msgstr "" "Automaticky schválit všechna spojení / přátelství jako fanoušky s právem " "pouze ke čtení" -#: ../../mod/settings.php:327 +#: ../../mod/settings.php:390 ../../mod/admin.php:135 ../../mod/admin.php:445 msgid "Community/Celebrity Account" msgstr "Komunitní účet / Účet celebrity" -#: ../../mod/settings.php:328 +#: ../../mod/settings.php:391 msgid "" "Automatically approve all connection/friend requests as read-write fans" msgstr "" "Automaticky schvalovat všechny žádosti o spojení / přátelství, jako fanoušky" " s právem ke čtení." -#: ../../mod/settings.php:329 +#: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:446 msgid "Automatic Friend Account" -msgstr "Automatický účet přítele" +msgstr "Účet s automatickým schvalováním přátel" -#: ../../mod/settings.php:330 +#: ../../mod/settings.php:395 msgid "Automatically approve all connection/friend requests as friends" msgstr "" "Automaticky schvalovat všechny žádosti o spojení / přátelství jako přátele" -#: ../../mod/settings.php:339 -msgid "OpenID: " -msgstr "OpenID: " +#: ../../mod/settings.php:405 +msgid "OpenID:" +msgstr "OpenID:" -#: ../../mod/settings.php:339 -msgid " (Optional) Allow this OpenID to login to this account." -msgstr " (Volitelné) Povolit toto OpenID pro přihlášení k tomuto účtu." +#: ../../mod/settings.php:405 +msgid "(Optional) Allow this OpenID to login to this account." +msgstr "(Volitelné) Povolit OpenID pro přihlášení k tomuto účtu." -#: ../../mod/settings.php:349 -msgid "Publish your default profile in site directory?" -msgstr "Zveřejnit Váš výchozí profil v místním adresáři?" +#: ../../mod/settings.php:415 +msgid "Publish your default profile in your local site directory?" +msgstr "Publikovat Váš výchozí profil v místním adresáři webu?" -#: ../../mod/settings.php:361 -msgid "Publish your default profile in global social directory?" -msgstr "Zveřejnit Váš výchozí profil v globálním sociální adresáři?" +#: ../../mod/settings.php:421 +msgid "Publish your default profile in the global social directory?" +msgstr "Publikovat Váš výchozí profil v globální sociálním adresáři?" -#: ../../mod/settings.php:377 +#: ../../mod/settings.php:429 +msgid "Hide your contact/friend list from viewers of your default profile?" +msgstr "" +"Skrýt Vaše kontaktní údaje a seznam přátel před návštěvníky ve Vašem " +"výchozím profilu?" + +#: ../../mod/settings.php:433 +msgid "Hide profile details and all your messages from unknown viewers?" +msgstr "Skrýt detaily profilu a všechny zprávy před neznámými uživateli?" + +#: ../../mod/settings.php:442 msgid "Profile is <strong>not published</strong>." msgstr "Profil <strong>není zveřejněn</strong>." -#: ../../mod/settings.php:398 ../../mod/profile_photo.php:196 +#: ../../mod/settings.php:461 ../../mod/profile_photo.php:196 msgid "or" msgstr "nebo" -#: ../../mod/settings.php:403 +#: ../../mod/settings.php:466 msgid "Your Identity Address is" msgstr "Vaše adresa identity je" -#: ../../mod/settings.php:413 +#: ../../mod/settings.php:480 +msgid "Account Settings" +msgstr "Nastavení účtu" + +#: ../../mod/settings.php:487 msgid "Export Personal Data" msgstr "Export osobních údajů" -#: ../../mod/settings.php:419 -msgid "Basic Settings" -msgstr "Základní nastavení" - -#: ../../mod/settings.php:420 ../../include/profile_advanced.php:10 -msgid "Full Name:" -msgstr "Celé jméno:" - -#: ../../mod/settings.php:421 -msgid "Email Address:" -msgstr "E-mailová adresa:" - -#: ../../mod/settings.php:422 -msgid "Your Timezone:" -msgstr "Vaše časové pásmo:" - -#: ../../mod/settings.php:423 -msgid "Default Post Location:" -msgstr "Výchozí umístění příspěvků:" - -#: ../../mod/settings.php:424 -msgid "Use Browser Location:" -msgstr "Použijte prohlížeč Místo:" - -#: ../../mod/settings.php:425 -msgid "Display Theme:" -msgstr "Zobrazit téma:" - -#: ../../mod/settings.php:427 -msgid "Security and Privacy Settings" -msgstr "Nastavení zabezpečení a soukromí" - -#: ../../mod/settings.php:428 -msgid "Maximum Friend Requests/Day:" -msgstr "Maximální počet žádostí o přátelství za den:" - -#: ../../mod/settings.php:429 -msgid "(to prevent spam abuse)" -msgstr "(Aby se zabránilo spamu)" - -#: ../../mod/settings.php:430 -msgid "Allow friends to post to your profile page:" -msgstr "Povolit přátelům příspěvky na Vaši profilovou stránku:" - -#: ../../mod/settings.php:431 -msgid "Automatically expire (delete) posts older than" -msgstr "Automaticky smazat příspěvky starší než" - -#: ../../mod/settings.php:432 ../../include/datetime.php:154 -msgid "days" -msgstr "dnů" - -#: ../../mod/settings.php:433 -msgid "Notification Settings" -msgstr "Nastavení notifikací" - -#: ../../mod/settings.php:434 -msgid "Send a notification email when:" -msgstr "Posílat e-mailové upozornění když: " - -#: ../../mod/settings.php:435 -msgid "You receive an introduction" -msgstr "Obdržíte žádost o propojení" - -#: ../../mod/settings.php:436 -msgid "Your introductions are confirmed" -msgstr "Vaše žádosti jsou potvrzeny" - -#: ../../mod/settings.php:437 -msgid "Someone writes on your profile wall" -msgstr "Někdo píše na Vaši profilovou stránku" - -#: ../../mod/settings.php:438 -msgid "Someone writes a followup comment" -msgstr "Někdo píše následný komentář" - -#: ../../mod/settings.php:439 -msgid "You receive a private message" -msgstr "Obdržel jste soukromou zprávu" - -#: ../../mod/settings.php:440 +#: ../../mod/settings.php:490 msgid "Password Settings" msgstr "Nastavení hesla" -#: ../../mod/settings.php:441 -msgid "Leave password fields blank unless changing" -msgstr "Pokud nechcete změnit heslo, položku hesla nevyplňujte" - -#: ../../mod/settings.php:442 +#: ../../mod/settings.php:491 msgid "New Password:" msgstr "Nové heslo:" -#: ../../mod/settings.php:443 +#: ../../mod/settings.php:492 msgid "Confirm:" msgstr "Potvrďte:" -#: ../../mod/settings.php:444 -msgid "Advanced Page Settings" -msgstr "Pokročilé nastavení stránky" +#: ../../mod/settings.php:492 +msgid "Leave password fields blank unless changing" +msgstr "Pokud nechcete změnit heslo, položku hesla nevyplňujte" -#: ../../mod/settings.php:459 +#: ../../mod/settings.php:496 +msgid "Basic Settings" +msgstr "Základní nastavení" + +#: ../../mod/settings.php:497 ../../include/profile_advanced.php:10 +msgid "Full Name:" +msgstr "Celé jméno:" + +#: ../../mod/settings.php:498 +msgid "Email Address:" +msgstr "E-mailová adresa:" + +#: ../../mod/settings.php:499 +msgid "Your Timezone:" +msgstr "Vaše časové pásmo:" + +#: ../../mod/settings.php:500 +msgid "Default Post Location:" +msgstr "Výchozí umístění příspěvků:" + +#: ../../mod/settings.php:501 +msgid "Use Browser Location:" +msgstr "Používat umístění dle prohlížeče:" + +#: ../../mod/settings.php:502 +msgid "Display Theme:" +msgstr "Vybrat grafickou šablonu:" + +#: ../../mod/settings.php:506 +msgid "Security and Privacy Settings" +msgstr "Nastavení zabezpečení a soukromí" + +#: ../../mod/settings.php:508 +msgid "Maximum Friend Requests/Day:" +msgstr "Maximální počet žádostí o přátelství za den:" + +#: ../../mod/settings.php:508 +msgid "(to prevent spam abuse)" +msgstr "(Aby se zabránilo spamu)" + +#: ../../mod/settings.php:509 msgid "Default Post Permissions" msgstr "Výchozí oprávnění pro příspěvek" -#: ../../mod/settings.php:460 +#: ../../mod/settings.php:510 msgid "(click to open/close)" msgstr "(Klikněte pro otevření/zavření)" -#: ../../mod/settings.php:473 +#: ../../mod/settings.php:514 +msgid "Allow friends to post to your profile page:" +msgstr "Povolit přátelům příspěvky na Vaši profilovou stránku:" + +#: ../../mod/settings.php:515 +msgid "Automatically expire posts after days:" +msgstr "Po kolika dnech automaticky expirovat příspěvky:" + +#: ../../mod/settings.php:515 +msgid "If empty, posts will not expire. Expired posts will be deleted" +msgstr "" +"Pokud je prázdné, příspěvky nebudou nikdy expirovat. Expirované příspěvky " +"budou vymazány" + +#: ../../mod/settings.php:524 +msgid "Notification Settings" +msgstr "Nastavení notifikací" + +#: ../../mod/settings.php:525 +msgid "Send a notification email when:" +msgstr "Poslat notifikaci e-mailem, když" + +#: ../../mod/settings.php:526 +msgid "You receive an introduction" +msgstr "obdržíte žádost o propojení" + +#: ../../mod/settings.php:527 +msgid "Your introductions are confirmed" +msgstr "Vaše žádosti jsou potvrzeny" + +#: ../../mod/settings.php:528 +msgid "Someone writes on your profile wall" +msgstr "někdo Vám napíše na Vaši profilovou stránku" + +#: ../../mod/settings.php:529 +msgid "Someone writes a followup comment" +msgstr "někdo Vám napíše následný komentář" + +#: ../../mod/settings.php:530 +msgid "You receive a private message" +msgstr "obdržíte soukromou zprávu" + +#: ../../mod/settings.php:534 msgid "Email/Mailbox Setup" msgstr "Nastavení e-mailu" -#: ../../mod/settings.php:474 +#: ../../mod/settings.php:535 msgid "" "If you wish to communicate with email contacts using this service " "(optional), please specify how to connect to your mailbox." @@ -1463,37 +1658,49 @@ msgstr "" "Pokud chcete komunikovat pomocí této služby s Vašimi kontakty z e-mailu " "(volitelné), uveďte, jak se připojit k Vaší e-mailové schránce." -#: ../../mod/settings.php:475 +#: ../../mod/settings.php:536 +msgid "Last successful email check:" +msgstr "Poslední úspěšná kontrola e-mailu:" + +#: ../../mod/settings.php:537 +msgid "Email access is disabled on this site." +msgstr "Přístup k elektronické poště je na tomto serveru zakázán." + +#: ../../mod/settings.php:538 msgid "IMAP server name:" msgstr "jméno IMAP serveru:" -#: ../../mod/settings.php:477 +#: ../../mod/settings.php:539 msgid "IMAP port:" msgstr "IMAP port:" -#: ../../mod/settings.php:479 -msgid "Security (TLS or SSL):" -msgstr "Zabezpečení (TLS nebo SSL):" +#: ../../mod/settings.php:540 +msgid "Security:" +msgstr "Zabezpečení:" -#: ../../mod/settings.php:481 +#: ../../mod/settings.php:540 +msgid "None" +msgstr "Žádný" + +#: ../../mod/settings.php:541 msgid "Email login name:" msgstr "přihlašovací jméno k e-mailu:" -#: ../../mod/settings.php:483 +#: ../../mod/settings.php:542 msgid "Email password:" msgstr "heslo k Vašemu e-mailu:" -#: ../../mod/settings.php:484 -msgid "Reply-to address (Optional):" -msgstr "Odpovědět na adresu (nepovinné):" +#: ../../mod/settings.php:543 +msgid "Reply-to address:" +msgstr "Odpovědět na adresu:" -#: ../../mod/settings.php:486 +#: ../../mod/settings.php:544 msgid "Send public posts to all email contacts:" msgstr "Poslat veřejné příspěvky na všechny e-mailové kontakty:" -#: ../../mod/settings.php:488 -msgid "Email access is disabled on this site." -msgstr "Přístup k elektronické poště je na tomto serveru zakázán." +#: ../../mod/settings.php:549 +msgid "Advanced Page Settings" +msgstr "Pokročilé nastavení stránky" #: ../../mod/manage.php:37 #, php-format @@ -1516,15 +1723,23 @@ msgstr "" msgid "Select an identity to manage: " msgstr "Vyberte identitu pro správu:" -#: ../../mod/network.php:18 -msgid "Normal View" -msgstr "Normální zobrazení" +#: ../../mod/network.php:27 +msgid "View Conversations" +msgstr "Zobrazit konverzace" -#: ../../mod/network.php:20 -msgid "New Item View" -msgstr "Zobrazení nových položek" +#: ../../mod/network.php:29 +msgid "View New Items" +msgstr "Zobrazit nové položky" -#: ../../mod/network.php:64 +#: ../../mod/network.php:35 +msgid "View Any Items" +msgstr "Zobrazit všechny položky" + +#: ../../mod/network.php:43 +msgid "View Starred Items" +msgstr "Zobrazit položky označené hvězdu" + +#: ../../mod/network.php:94 #, php-format msgid "Warning: This group contains %s member from an insecure network." msgid_plural "" @@ -1533,58 +1748,167 @@ msgstr[0] "Upozornění: Tato skupina obsahuje %s člena z nezabezpečené sít msgstr[1] "Upozornění: Tato skupina obsahuje %s členy z nezabezpečené sítě." msgstr[2] "Upozornění: Tato skupina obsahuje %s členy z nezabezpečené sítě." -#: ../../mod/network.php:67 +#: ../../mod/network.php:97 msgid "Private messages to this group are at risk of public disclosure." msgstr "Soukromé zprávy této skupině jsou vystaveny riziku prozrazení." -#: ../../mod/network.php:129 +#: ../../mod/network.php:164 msgid "No such group" msgstr "Žádná taková skupina" -#: ../../mod/network.php:140 +#: ../../mod/network.php:175 msgid "Group is empty" msgstr "Skupina je prázdná" -#: ../../mod/network.php:144 +#: ../../mod/network.php:180 msgid "Group: " msgstr "Skupina:" -#: ../../mod/network.php:154 +#: ../../mod/network.php:190 msgid "Contact: " msgstr "Kontakt:" -#: ../../mod/network.php:156 +#: ../../mod/network.php:192 msgid "Private messages to this person are at risk of public disclosure." msgstr "Soukromé zprávy této osobě jsou vystaveny riziku prozrazení." -#: ../../mod/network.php:161 +#: ../../mod/network.php:197 msgid "Invalid contact." msgstr "Neplatný kontakt." -#: ../../mod/network.php:262 ../../mod/register.php:465 -#: ../../mod/profile.php:265 ../../mod/display.php:147 -msgid "" -"Shared content is covered by the <a " -"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons " -"Attribution 3.0</a> license." -msgstr "" -"Sdílený obsah je v souladu s <a " -"href=\"http://creativecommons.org/licenses/by/3.0/\">Commons Creative " -"3.0</a> licencí." - -#: ../../mod/notes.php:41 ../../mod/apps.php:8 -msgid "Private Notes" -msgstr "Soukromé poznámky" - -#: ../../mod/notes.php:60 +#: ../../mod/notes.php:74 msgid "Save" msgstr "Uložit" -#: ../../mod/attach.php:6 +#: ../../mod/newmember.php:6 +msgid "Welcome to Friendika" +msgstr "Vítejte na Friendika" + +#: ../../mod/newmember.php:8 +msgid "New Member Checklist" +msgstr "Seznam doporučení pro nového člena" + +#: ../../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." +msgstr "" +"Dovolujeme si Vám nabídnout některé tipy a odkazy, abychom Vám zpříjemnili " +"práci se systémem Friendika. Kliknutím na libovolnou položku navštívit " +"příslušnou stránku." + +#: ../../mod/newmember.php:16 +msgid "" +"On your <em>Settings</em> page - change your initial password. Also make a " +"note of your Identity Address. This will be useful in making friends." +msgstr "" +"Na stránce <em>Nastavení</em> - změnit výchozí heslo. Poznamenejte si také " +"adresu své identity. To může být užitečné při navazování přátelství." + +#: ../../mod/newmember.php:18 +msgid "" +"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 "" +"Prohlédněte si další nastavení, a to zejména nastavení soukromí. " +"Nezveřejnění svého účtu v adresáři je jako mít nezveřejněné telefonní číslo." +" Obecně platí, že je lepší mít svůj účet zveřejněný, leda by všichni vaši " +"potenciální přátelé věděli, jak vás přesně najít." + +#: ../../mod/newmember.php:20 +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 "" +"Nahrajte si svou profilovou fotku, pokud jste tak již neučinili. Studie " +"ukázaly, že lidé se skutečnými fotografiemi mají desetkrát častěji přátele " +"než lidé, kteří nemají." + +#: ../../mod/newmember.php:23 +msgid "" +"Authorise the Facebook Connector if you currently have a Facebook account " +"and we will (optionally) import all your Facebook friends and conversations." +msgstr "" +"Jestliže máte účet na Facebooku, povolte konektor na Facebook a bude možné " +"(na přání) importovat všechny Vaš přátele na Facebooku a všechny Vaše " +"konverzace." + +#: ../../mod/newmember.php:28 +msgid "" +"Enter your email access information on your Settings page if you wish to " +"import and interact with friends or mailing lists from your email INBOX" +msgstr "" +"na stránce Nastavení zadejte informace pro přístup k Vaší e-mailové stránce," +" pokud si přejete importovat a komunikovat s přáteli nebo distribučními " +"skupinami z Vaší e-mailové schránky" + +#: ../../mod/newmember.php:30 +msgid "" +"Edit your <strong>default</strong> profile to your liking. Review the " +"settings for hiding your list of friends and hiding the profile from unknown" +" visitors." +msgstr "" +"Upravit <strong>výchozí</strong> profil podle vašich představ. Prověřte " +"nastavení pro skrytí Vašeho seznamu přátel a skrytí profilu před neznámými " +"návštěvníky." + +#: ../../mod/newmember.php:32 +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 "" +"Nastavte si nějaká veřejné klíčová slova pro výchozí profil, která popisují " +"vaše zájmy. Friendika Vám může nalézt další lidi s podobnými zájmy a " +"navrhnout přátelství." + +#: ../../mod/newmember.php:34 +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 <em>Connect</em> dialog." +msgstr "" +"Stránka Kontakty je Vaším odrazovým můstkem k řízení přátelství a spojení s " +"kamarády v jiných sítích. Obvykle zadáte jejich adresu nebo adresu URL do " +"dialogu <em>Připojit</em>." + +#: ../../mod/newmember.php:36 +msgid "" +"The Directory page lets you find other people in this network or other " +"federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on " +"their profile page. Provide your own Identity Address if requested." +msgstr "" +"Stránka Adresář Vám pomůže najít další lidi na tomto serveru nebo v jiných " +"propojených serverech. Prostřednictvím odkazů <em>Připojení</em> nebo " +"<em>Následovat</em> si prohlédněte jejich profilovou stránku. Uveďte svou " +"vlastní adresu identity, je-li požadována." + +#: ../../mod/newmember.php:38 +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 "" +"Jakmile získáte nějaké přátele, uspořádejte si je do soukromých " +"konverzačních skupin na postranním panelu vaší stránky Kontakty a pak můžete" +" komunikovat s každou touto skupinu soukromě prostřednictvím stránky Síť." + +#: ../../mod/newmember.php:40 +msgid "" +"Our <strong>help</strong> pages may be consulted for detail on other program" +" features and resources." +msgstr "" +"Na stránkách <strong>Nápověda</strong> naleznete nejen další podrobnosti o " +"všech funkcích Friendika ale také další zdroje informací." + +#: ../../mod/attach.php:8 msgid "Item not available." msgstr "Položka není k dispozici." -#: ../../mod/attach.php:16 +#: ../../mod/attach.php:20 msgid "Item was not found." msgstr "Položka nebyla nalezena." @@ -1596,7 +1920,7 @@ msgstr "Skupina vytvořena." msgid "Could not create group." msgstr "Nelze vytvořit skupinu." -#: ../../mod/group.php:43 ../../mod/group.php:115 +#: ../../mod/group.php:43 ../../mod/group.php:123 msgid "Group not found." msgstr "Skupina nenalezena." @@ -1604,64 +1928,59 @@ msgstr "Skupina nenalezena." msgid "Group name changed." msgstr "Název skupiny byl změněn." -#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:255 +#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:265 msgid "Permission denied" msgstr "Nedostatečné oprávnění" -#: ../../mod/group.php:74 +#: ../../mod/group.php:82 msgid "Create a group of contacts/friends." msgstr "Vytvořit skupinu kontaktů / přátel." -#: ../../mod/group.php:75 ../../mod/group.php:158 +#: ../../mod/group.php:83 ../../mod/group.php:166 msgid "Group Name: " msgstr "Název skupiny:" -#: ../../mod/group.php:90 +#: ../../mod/group.php:98 msgid "Group removed." msgstr "Skupina odstraněna. " -#: ../../mod/group.php:92 +#: ../../mod/group.php:100 msgid "Unable to remove group." msgstr "Nelze odstranit skupinu." -#: ../../mod/group.php:156 ../../mod/profperm.php:96 +#: ../../mod/group.php:164 ../../mod/profperm.php:105 msgid "Click on a contact to add or remove." msgstr "Klikněte na kontakt pro přidání nebo odebrání" -#: ../../mod/group.php:157 +#: ../../mod/group.php:165 msgid "Group Editor" msgstr "Editor skupin" -#: ../../mod/group.php:172 +#: ../../mod/group.php:180 msgid "Members" msgstr "Členové" -#: ../../mod/group.php:186 +#: ../../mod/group.php:195 msgid "All Contacts" msgstr "Všechny kontakty" -#: ../../mod/profperm.php:25 ../../mod/profperm.php:46 +#: ../../mod/profperm.php:25 ../../mod/profperm.php:55 msgid "Invalid profile identifier." msgstr "Neplatný identifikátor profilu." -#: ../../mod/profperm.php:92 +#: ../../mod/profperm.php:101 msgid "Profile Visibility Editor" msgstr "Editor viditelnosti profilu " -#: ../../mod/profperm.php:94 ../../mod/profile.php:116 -#: ../../include/profile_advanced.php:7 -msgid "Profile" -msgstr "Profil" - -#: ../../mod/profperm.php:105 +#: ../../mod/profperm.php:114 msgid "Visible To" msgstr "Viditelný pro" -#: ../../mod/profperm.php:116 +#: ../../mod/profperm.php:128 msgid "All Contacts (with secure profile access)" msgstr "Všechny kontakty (se zabezpečeným přístupovým profilem )" -#: ../../mod/viewcontacts.php:25 ../../boot.php:2059 +#: ../../mod/viewcontacts.php:25 ../../include/text.php:555 msgid "View Contacts" msgstr "Zobrazit kontakty" @@ -1669,39 +1988,47 @@ msgstr "Zobrazit kontakty" msgid "No contacts." msgstr "Žádné kontakty." -#: ../../mod/register.php:49 +#: ../../mod/register.php:53 +msgid "An invitation is required." +msgstr "Pozvánka je vyžadována." + +#: ../../mod/register.php:58 +msgid "Invitation could not be verified." +msgstr "Pozvánka nemohla být ověřena." + +#: ../../mod/register.php:66 msgid "Invalid OpenID url" msgstr "Neplatný odkaz OpenID" -#: ../../mod/register.php:64 +#: ../../mod/register.php:81 msgid "Please enter the required information." msgstr "Zadejte prosím požadované informace." -#: ../../mod/register.php:76 +#: ../../mod/register.php:95 msgid "Please use a shorter name." msgstr "Použijte prosím kratší jméno." -#: ../../mod/register.php:78 +#: ../../mod/register.php:97 msgid "Name too short." msgstr "Jméno je příliš krátké." -#: ../../mod/register.php:93 +#: ../../mod/register.php:112 msgid "That doesn't appear to be your full (First Last) name." msgstr "Nezdá se, že by to bylo vaše celé jméno (křestní jméno a příjmení)." -#: ../../mod/register.php:97 +#: ../../mod/register.php:117 msgid "Your email domain is not among those allowed on this site." msgstr "Váš e-mailová doména není na tomto serveru mezi povolenými." -#: ../../mod/register.php:100 +#: ../../mod/register.php:120 msgid "Not a valid email address." msgstr "Neplatná e-mailová adresa." -#: ../../mod/register.php:106 +#: ../../mod/register.php:130 msgid "Cannot use that email." msgstr "Tento e-mail nelze použít." -#: ../../mod/register.php:111 +#: ../../mod/register.php:136 msgid "" "Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and " "must also begin with a letter." @@ -1709,55 +2036,55 @@ msgstr "" "Vaše \"přezdívka\" může obsahovat pouze \"a-z\", \"0-9\", \"-\", a \"_\", a " "musí začínat písmenem." -#: ../../mod/register.php:117 ../../mod/register.php:217 +#: ../../mod/register.php:142 ../../mod/register.php:243 msgid "Nickname is already registered. Please choose another." msgstr "Přezdívka je již registrována. Prosím vyberte jinou." -#: ../../mod/register.php:136 +#: ../../mod/register.php:161 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "Závažná chyba: Generování bezpečnostních klíčů se nezdařilo." -#: ../../mod/register.php:203 +#: ../../mod/register.php:229 msgid "An error occurred during registration. Please try again." msgstr "Došlo k chybě při registraci. Zkuste to prosím znovu." -#: ../../mod/register.php:239 +#: ../../mod/register.php:265 msgid "An error occurred creating your default profile. Please try again." msgstr "" "Došlo k chybě při vytváření Vašeho výchozího profilu. Zkuste to prosím " "znovu." -#: ../../mod/register.php:333 ../../mod/regmod.php:96 +#: ../../mod/register.php:367 ../../mod/regmod.php:52 #, php-format msgid "Registration details for %s" msgstr "Registrační údaje pro %s" -#: ../../mod/register.php:341 +#: ../../mod/register.php:375 msgid "" "Registration successful. Please check your email for further instructions." msgstr "" "Registrace úspěšná. Zkontrolujte prosím svůj e-mail pro další instrukce." -#: ../../mod/register.php:345 +#: ../../mod/register.php:379 msgid "Failed to send email message. Here is the message that failed." msgstr "" "Nepodařilo se odeslat zprávu na e-mail. Zde je zpráva, která nebyla " "odeslána." -#: ../../mod/register.php:350 +#: ../../mod/register.php:384 msgid "Your registration can not be processed." msgstr "Vaši registraci nelze zpracovat." -#: ../../mod/register.php:383 +#: ../../mod/register.php:421 #, php-format msgid "Registration request at %s" msgstr "Žádost o registraci na %s" -#: ../../mod/register.php:392 +#: ../../mod/register.php:430 msgid "Your registration is pending approval by the site owner." msgstr "Vaše registrace čeká na schválení vlastníkem serveru." -#: ../../mod/register.php:440 +#: ../../mod/register.php:479 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking 'Register'." @@ -1765,7 +2092,7 @@ msgstr "" "Tento formulář můžete (volitelně) vyplnit s pomocí OpenID tím, že vyplníte " "své OpenID a kliknutete na tlačítko 'Zaregistrovat'." -#: ../../mod/register.php:441 +#: ../../mod/register.php:480 msgid "" "If you are not familiar with OpenID, please leave that field blank and fill " "in the rest of the items." @@ -1773,27 +2100,35 @@ msgstr "" "Pokud nepoužíváte OpenID, nechte prosím toto pole prázdné a vyplňte zbylé " "položky." -#: ../../mod/register.php:442 +#: ../../mod/register.php:481 msgid "Your OpenID (optional): " msgstr "Vaše OpenID (nepovinné):" -#: ../../mod/register.php:456 +#: ../../mod/register.php:495 msgid "Include your profile in member directory?" msgstr "Uvést Váš profil v adresáři členů?" -#: ../../mod/register.php:472 +#: ../../mod/register.php:511 +msgid "Membership on this site is by invitation only." +msgstr "Členství na tomto webu je pouze na pozvání." + +#: ../../mod/register.php:512 +msgid "Your invitation ID: " +msgstr "Vaše pozvání ID:" + +#: ../../mod/register.php:515 ../../mod/admin.php:299 msgid "Registration" msgstr "Registrace" -#: ../../mod/register.php:480 +#: ../../mod/register.php:523 msgid "Your Full Name (e.g. Joe Smith): " msgstr "Vaše celé jméno (např. Jan Novák):" -#: ../../mod/register.php:481 +#: ../../mod/register.php:524 msgid "Your Email Address: " msgstr "Vaše e-mailová adresa:" -#: ../../mod/register.php:482 +#: ../../mod/register.php:525 msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be " @@ -1802,39 +2137,41 @@ msgstr "" "Vyberte přezdívku k profilu. Ta musí začít s textovým znakem. Vaše profilová" " adresa na tomto webu pak bude \"<strong>přezdívka@$sitename</strong>\"." -#: ../../mod/register.php:483 +#: ../../mod/register.php:526 msgid "Choose a nickname: " msgstr "Vyberte přezdívku:" -#: ../../mod/register.php:486 ../../include/nav.php:59 ../../boot.php:835 +#: ../../mod/register.php:529 ../../include/nav.php:59 ../../boot.php:637 msgid "Register" msgstr "Registrovat" -#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:774 -#: ../../include/conversation.php:20 +#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:954 +#: ../../include/diaspora.php:446 ../../include/conversation.php:26 +#: ../../include/conversation.php:35 msgid "status" msgstr "Stav" -#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:778 -#: ../../include/conversation.php:25 +#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:958 +#: ../../include/diaspora.php:463 ../../include/conversation.php:43 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$s má rád %2$s' na %3$s" -#: ../../mod/like.php:129 ../../include/conversation.php:28 +#: ../../mod/like.php:129 ../../include/diaspora.php:465 +#: ../../include/conversation.php:46 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "%1$s nemá rád %2$s na %3$s" -#: ../../mod/friendika.php:43 +#: ../../mod/friendika.php:42 msgid "This is Friendika version" msgstr "Toto je Friendika verze" -#: ../../mod/friendika.php:44 +#: ../../mod/friendika.php:43 msgid "running at web location" msgstr "běžící na webu" -#: ../../mod/friendika.php:46 +#: ../../mod/friendika.php:45 msgid "" "Shared content within the Friendika network is provided under the <a " "href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons " @@ -1844,7 +2181,7 @@ msgstr "" "href=\"http://creativecommons.org/licenses/by/3.0/cz/\">licencí Creative " "Commons Attribution 3.0</a>" -#: ../../mod/friendika.php:48 +#: ../../mod/friendika.php:47 msgid "" "Please visit <a " "href=\"http://project.friendika.com\">Project.Friendika.com</a> to learn " @@ -1853,11 +2190,11 @@ msgstr "" "Pokud se chcete dozvědět více o projektu Friendika, navštivte, prosím, <a " "href=\"http://project.friendika.com\">Project.Friendika.com</a>" -#: ../../mod/friendika.php:50 +#: ../../mod/friendika.php:49 msgid "Bug reports and issues: please visit" msgstr "Pro hlášení chyb a námětů na změny navštivte:" -#: ../../mod/friendika.php:51 +#: ../../mod/friendika.php:50 msgid "" "Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - " "dot com" @@ -1865,84 +2202,80 @@ msgstr "" "Návrhy, chválu, dary, atd. - prosím pošlete na e-mail \"Info\" na Friendika " "tečka com" -#: ../../mod/friendika.php:56 +#: ../../mod/friendika.php:55 msgid "Installed plugins/addons/apps" msgstr "Nainstalované doplňky/aplikace" -#: ../../mod/friendika.php:64 +#: ../../mod/friendika.php:63 msgid "No installed plugins/addons/apps" msgstr "Nejsou žádné nainstalované doplňky/aplikace" -#: ../../mod/regmod.php:12 -msgid "Please login." -msgstr "Přihlaste se, prosím." +#: ../../mod/regmod.php:61 +msgid "Account approved." +msgstr "Účet schválen." -#: ../../mod/regmod.php:56 +#: ../../mod/regmod.php:93 #, php-format msgid "Registration revoked for %s" msgstr "Registrace zrušena pro %s" #: ../../mod/regmod.php:105 -msgid "Account approved." -msgstr "Účet schválen." +msgid "Please login." +msgstr "Přihlaste se, prosím." -#: ../../mod/update_network.php:22 ../../mod/update_profile.php:41 -msgid "[Embedded content - reload page to view]" -msgstr "[Vložený obsah - obnovení stránky pro zobrazení]" - -#: ../../mod/item.php:37 +#: ../../mod/item.php:81 msgid "Unable to locate original post." msgstr "Nelze nalézt původní příspěvek." -#: ../../mod/item.php:128 +#: ../../mod/item.php:196 msgid "Empty post discarded." msgstr "Prázdný příspěvek odstraněn." -#: ../../mod/item.php:214 ../../mod/message.php:93 -#: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88 -#: ../../mod/wall_upload.php:95 +#: ../../mod/item.php:296 ../../mod/message.php:93 +#: ../../mod/wall_upload.php:81 ../../mod/wall_upload.php:90 +#: ../../mod/wall_upload.php:97 msgid "Wall Photos" msgstr "Fotografie na zdi" -#: ../../mod/item.php:517 ../../mod/item.php:560 ../../mod/item.php:583 -#: ../../mod/item.php:624 ../../mod/dfrn_notify.php:193 -#: ../../mod/dfrn_notify.php:401 ../../mod/dfrn_notify.php:444 -#: ../../mod/dfrn_notify.php:530 ../../mod/dfrn_notify.php:571 +#: ../../mod/item.php:623 ../../mod/item.php:668 ../../mod/item.php:691 +#: ../../mod/item.php:734 ../../mod/dfrn_notify.php:293 +#: ../../mod/dfrn_notify.php:503 ../../mod/dfrn_notify.php:548 +#: ../../mod/dfrn_notify.php:634 ../../mod/dfrn_notify.php:677 msgid "noreply" msgstr "bez odpovědi" -#: ../../mod/item.php:559 ../../mod/item.php:623 ../../mod/dfrn_notify.php:570 +#: ../../mod/item.php:667 ../../mod/item.php:733 ../../mod/dfrn_notify.php:676 msgid "Administrator@" -msgstr "Správce@" +msgstr "Administrator@" -#: ../../mod/item.php:562 ../../mod/dfrn_notify.php:446 -#: ../../mod/dfrn_notify.php:573 +#: ../../mod/item.php:670 ../../mod/dfrn_notify.php:550 +#: ../../mod/dfrn_notify.php:679 #, php-format msgid "%s commented on an item at %s" msgstr "%s okomentoval položku v %s" -#: ../../mod/item.php:626 +#: ../../mod/item.php:736 #, php-format msgid "%s posted to your profile wall at %s" msgstr "%s přidal příspěvek na vaší profilovou zeď v %s" -#: ../../mod/item.php:655 +#: ../../mod/item.php:765 msgid "System error. Post not saved." msgstr "Chyba systému. Příspěvek nebyl uložen." -#: ../../mod/item.php:674 +#: ../../mod/item.php:784 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendika social " "network." msgstr "Tuto zprávu Vám zaslal %s, člen sociální sítě Friendika." -#: ../../mod/item.php:676 +#: ../../mod/item.php:786 #, php-format msgid "You may visit them online at %s" msgstr "Můžete je navštívit online na adrese %s" -#: ../../mod/item.php:677 +#: ../../mod/item.php:787 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." @@ -1950,15 +2283,11 @@ msgstr "" "Pokud nechcete dostávat tyto zprávy, kontaktujte prosím odesilatele odpovědí" " na tento záznam." -#: ../../mod/item.php:679 +#: ../../mod/item.php:789 #, php-format msgid "%s posted an update." msgstr "%s poslal aktualizaci." -#: ../../mod/item.php:730 ../../mod/display.php:25 ../../mod/display.php:142 -msgid "Item not found." -msgstr "Položka nenalezena." - #: ../../mod/profile_photo.php:28 msgid "Image uploaded but image cropping failed." msgstr "Obrázek byl odeslán, ale jeho oříznutí se nesdařilo." @@ -2014,6 +2343,10 @@ msgstr "Editace dokončena" msgid "Image uploaded successfully." msgstr "Obrázek byl úspěšně nahrán." +#: ../../mod/hcard.php:11 ../../mod/profile.php:11 ../../boot.php:792 +msgid "No profile" +msgstr "Žádný profil" + #: ../../mod/removeme.php:42 ../../mod/removeme.php:45 msgid "Remove My Account" msgstr "Odstranit můj účet" @@ -2050,7 +2383,7 @@ msgstr "Zpráva odeslána." msgid "Message could not be sent." msgstr "Zprávu se nepodařilo odeslat." -#: ../../mod/message.php:125 ../../include/nav.php:101 +#: ../../mod/message.php:125 ../../include/nav.php:102 msgid "Messages" msgstr "Zprávy" @@ -2074,7 +2407,7 @@ msgstr "Zpráva odstraněna." msgid "Conversation removed." msgstr "Konverzace odstraněna." -#: ../../mod/message.php:172 ../../include/conversation.php:684 +#: ../../mod/message.php:172 ../../include/conversation.php:699 msgid "Please enter a link URL:" msgstr "Zadejte prosím URL odkaz:" @@ -2090,7 +2423,8 @@ msgstr "Adresát:" msgid "Subject:" msgstr "Předmět:" -#: ../../mod/message.php:185 ../../mod/message.php:319 ../../mod/invite.php:63 +#: ../../mod/message.php:185 ../../mod/message.php:319 +#: ../../mod/invite.php:101 msgid "Your message:" msgstr "Vaše zpráva:" @@ -2118,56 +2452,406 @@ msgstr "Smazat zprávu" msgid "Send Reply" msgstr "Poslat odpověď" -#: ../../mod/profile.php:11 ../../boot.php:2270 -msgid "No profile" -msgstr "Žádný profil" +#: ../../mod/admin.php:66 ../../mod/admin.php:297 +msgid "Site" +msgstr "Web" -#: ../../mod/profile.php:59 +#: ../../mod/admin.php:67 ../../mod/admin.php:460 ../../mod/admin.php:472 +msgid "Users" +msgstr "Uživatelé" + +#: ../../mod/admin.php:68 ../../mod/admin.php:549 ../../mod/admin.php:586 +msgid "Plugins" +msgstr "Pluginy" + +#: ../../mod/admin.php:69 +msgid "Update" +msgstr "Aktualizace" + +#: ../../mod/admin.php:83 ../../mod/admin.php:651 +msgid "Logs" +msgstr "Logy" + +#: ../../mod/admin.php:88 +msgid "User registrations waiting for confirmation" +msgstr "Registrace uživatele čeká na potvrzení" + +#: ../../mod/admin.php:118 ../../mod/admin.php:502 ../../mod/display.php:25 +#: ../../mod/display.php:112 ../../include/items.php:1842 +msgid "Item not found." +msgstr "Položka nenalezena." + +#: ../../mod/admin.php:151 ../../mod/admin.php:296 ../../mod/admin.php:459 +#: ../../mod/admin.php:548 ../../mod/admin.php:585 ../../mod/admin.php:650 +msgid "Administration" +msgstr "Administrace" + +#: ../../mod/admin.php:152 +msgid "Summary" +msgstr "Shrnutí" + +#: ../../mod/admin.php:153 +msgid "Registered users" +msgstr "Registrovaní uživatelé" + +#: ../../mod/admin.php:155 +msgid "Pending registrations" +msgstr "Čekající registrace" + +#: ../../mod/admin.php:156 +msgid "Version" +msgstr "Verze" + +#: ../../mod/admin.php:158 +msgid "Active plugins" +msgstr "Aktivní pluginy" + +#: ../../mod/admin.php:245 +msgid "Site settings updated." +msgstr "Nastavení webu aktualizováno." + +#: ../../mod/admin.php:289 +msgid "Closed" +msgstr "Uzavřít" + +#: ../../mod/admin.php:290 +msgid "Requires approval" +msgstr "Vyžaduje schválení" + +#: ../../mod/admin.php:291 +msgid "Open" +msgstr "Otevřená" + +#: ../../mod/admin.php:300 +msgid "File upload" +msgstr "Nahrání souborů" + +#: ../../mod/admin.php:301 +msgid "Policies" +msgstr "Politiky" + +#: ../../mod/admin.php:302 +msgid "Advanced" +msgstr "Pokročilé" + +#: ../../mod/admin.php:306 ../../addon/statusnet/statusnet.php:459 +msgid "Site name" +msgstr "Název webu" + +#: ../../mod/admin.php:307 +msgid "Banner/Logo" +msgstr "Banner/logo" + +#: ../../mod/admin.php:308 +msgid "System language" +msgstr "Systémový jazyk" + +#: ../../mod/admin.php:309 +msgid "System theme" +msgstr "Grafická šablona systému " + +#: ../../mod/admin.php:311 +msgid "Maximum image size" +msgstr "Maximální velikost obrazu" + +#: ../../mod/admin.php:313 +msgid "Register policy" +msgstr "Politika registrace" + +#: ../../mod/admin.php:314 +msgid "Register text" +msgstr "Registrace textu" + +#: ../../mod/admin.php:315 +msgid "Allowed friend domains" +msgstr "Povolené domény přátel" + +#: ../../mod/admin.php:316 +msgid "Allowed email domains" +msgstr "Povolené e-mailové domény" + +#: ../../mod/admin.php:317 +msgid "Block public" +msgstr "Blokovat veřejnost" + +#: ../../mod/admin.php:318 +msgid "Force publish" +msgstr "Publikovat" + +#: ../../mod/admin.php:319 +msgid "Global directory update URL" +msgstr "aktualizace URL adresy Globálního adresáře " + +#: ../../mod/admin.php:321 +msgid "Block multiple registrations" +msgstr "Blokovat více registrací" + +#: ../../mod/admin.php:322 +msgid "OpenID support" +msgstr "podpora OpenID" + +#: ../../mod/admin.php:323 +msgid "Gravatar support" +msgstr "podpora Gravatar" + +#: ../../mod/admin.php:324 +msgid "Fullname check" +msgstr "kontrola úplného jména" + +#: ../../mod/admin.php:325 +msgid "UTF-8 Regular expressions" +msgstr "UTF-8 Regulární výrazy" + +#: ../../mod/admin.php:326 +msgid "Show Community Page" +msgstr "Zobrazit stránku komunity" + +#: ../../mod/admin.php:327 +msgid "Enable OStatus support" +msgstr "Zapnout podporu OStatus" + +#: ../../mod/admin.php:328 +msgid "Only allow Friendika contacts" +msgstr "Povolit pouze Friendika kontakty " + +#: ../../mod/admin.php:329 +msgid "Verify SSL" +msgstr "Ověřit SSL" + +#: ../../mod/admin.php:330 +msgid "Proxy user" +msgstr "Proxy uživatel" + +#: ../../mod/admin.php:331 +msgid "Proxy URL" +msgstr "Proxy URL adresa" + +#: ../../mod/admin.php:332 +msgid "Network timeout" +msgstr "čas síťového spojení vypršelo (timeout)" + +#: ../../mod/admin.php:353 +#, php-format +msgid "%s user blocked" +msgid_plural "%s users blocked/unblocked" +msgstr[0] "%s uživatel zablokován" +msgstr[1] "%s uživatelů zablokováno / odblokováno" +msgstr[2] "%s uživatelů zablokováno / odblokováno" + +#: ../../mod/admin.php:360 +#, php-format +msgid "%s user deleted" +msgid_plural "%s users deleted" +msgstr[0] "%s uživatel smazán" +msgstr[1] "%s uživatelů smazáno" +msgstr[2] "%s uživatelů smazáno" + +#: ../../mod/admin.php:394 +#, php-format +msgid "User '%s' deleted" +msgstr "Uživatel '%s' smazán" + +#: ../../mod/admin.php:401 +#, php-format +msgid "User '%s' unblocked" +msgstr "Uživatel '%s' odblokován" + +#: ../../mod/admin.php:401 +#, php-format +msgid "User '%s' blocked" +msgstr "Uživatel '%s' blokován" + +#: ../../mod/admin.php:462 +msgid "select all" +msgstr "Vybrat vše" + +#: ../../mod/admin.php:463 +msgid "User registrations waiting for confirm" +msgstr "Registrace uživatele čeká na potvrzení" + +#: ../../mod/admin.php:464 +msgid "Request date" +msgstr "Datum žádosti" + +#: ../../mod/admin.php:464 ../../mod/admin.php:473 +msgid "Email" +msgstr "E-mail" + +#: ../../mod/admin.php:465 +msgid "No registrations." +msgstr "Žádné registrace." + +#: ../../mod/admin.php:467 +msgid "Deny" +msgstr "Odmítnout" + +#: ../../mod/admin.php:469 +msgid "Block" +msgstr "Blokovat" + +#: ../../mod/admin.php:470 +msgid "Unblock" +msgstr "Odblokovat" + +#: ../../mod/admin.php:473 +msgid "Register date" +msgstr "Datum registrace" + +#: ../../mod/admin.php:473 +msgid "Last login" +msgstr "Datum posledního přihlášení" + +#: ../../mod/admin.php:473 +msgid "Last item" +msgstr "Poslední položka" + +#: ../../mod/admin.php:473 +msgid "Account" +msgstr "Účet" + +#: ../../mod/admin.php:475 +msgid "" +"Selected users will be deleted!\\n\\nEverything these users had posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" +msgstr "" +"Vybraní uživatelé budou smazáni!\\n\\n Vše, co tito uživatelé na těchto " +"stránkách vytvořili, bude trvale odstraněno!\\n\\n Opravdu pokračovat?" + +#: ../../mod/admin.php:476 +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 "" +"Uživatel {0} bude smazán!\\n\\n Vše, co tento uživatel na těchto stránkách " +"vytvořil, bude trvale odstraněno!\\n\\n Opravdu pokračovat?" + +#: ../../mod/admin.php:512 +#, php-format +msgid "Plugin %s disabled." +msgstr "Plugin %s zakázán." + +#: ../../mod/admin.php:516 +#, php-format +msgid "Plugin %s enabled." +msgstr "Plugin %s povolen." + +#: ../../mod/admin.php:526 +msgid "Disable" +msgstr "Zakázat" + +#: ../../mod/admin.php:528 +msgid "Enable" +msgstr "Povolit" + +#: ../../mod/admin.php:550 +msgid "Toggle" +msgstr "Přepnout" + +#: ../../mod/admin.php:551 ../../include/nav.php:108 +msgid "Settings" +msgstr "Nastavení" + +#: ../../mod/admin.php:613 +msgid "Log settings updated." +msgstr "Nastavení protokolu aktualizováno." + +#: ../../mod/admin.php:653 +msgid "Clear" +msgstr "Vyčistit" + +#: ../../mod/admin.php:659 +msgid "Debugging" +msgstr "Ladění" + +#: ../../mod/admin.php:660 +msgid "Log file" +msgstr "Soubor s logem" + +#: ../../mod/admin.php:660 +msgid "Must be writable by web server. Relative to your Friendika index.php." +msgstr "" +"Webový server musí mít práva zápisu . Relativní k index.php Friendika." + +#: ../../mod/admin.php:661 +msgid "Log level" +msgstr "Úroveň auditu" + +#: ../../mod/admin.php:702 +msgid "Close" +msgstr "Uzavřená" + +#: ../../mod/admin.php:708 +msgid "FTP Host" +msgstr "Hostitel FTP" + +#: ../../mod/admin.php:709 +msgid "FTP Path" +msgstr "Cesta FTP" + +#: ../../mod/admin.php:710 +msgid "FTP User" +msgstr "FTP uživatel" + +#: ../../mod/admin.php:711 +msgid "FTP Password" +msgstr "FTP heslo" + +#: ../../mod/profile.php:102 ../../mod/display.php:63 msgid "Access to this profile has been restricted." msgstr "Přístup na tento profil byl omezen." -#: ../../mod/profile.php:115 -msgid "Status" -msgstr "Stav" +#: ../../mod/profile.php:133 +msgid "Tips for New Members" +msgstr "Tipy pro nové členy" -#: ../../mod/profile.php:117 -msgid "Photos" -msgstr "Fotografie" - -#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:114 -#: ../../include/auth.php:139 ../../include/auth.php:192 +#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:120 +#: ../../include/auth.php:145 ../../include/auth.php:198 msgid "Login failed." msgstr "Přihlášení se nezdařilo." -#: ../../mod/openid.php:78 ../../include/auth.php:208 +#: ../../mod/openid.php:78 ../../include/auth.php:214 msgid "Welcome " -msgstr "Vítejte" +msgstr "Vítejte " -#: ../../mod/openid.php:79 ../../include/auth.php:209 +#: ../../mod/openid.php:79 ../../include/auth.php:215 msgid "Please upload a profile photo." msgstr "Prosím nahrejte profilovou fotografii" -#: ../../mod/openid.php:82 ../../include/auth.php:212 +#: ../../mod/openid.php:82 ../../include/auth.php:218 msgid "Welcome back " -msgstr "Vítejte zpět" +msgstr "Vítejte zpět " -#: ../../mod/follow.php:43 -msgid "The profile address specified does not provide adequate information." -msgstr "Uvedená adresa profilu neposkytuje dostatečné informace." +#: ../../mod/follow.php:39 +msgid "" +"This site is not configured to allow communications with other networks." +msgstr "" +"Tento web není nakonfigurován tak, aby umožňoval komunikaci s ostatními " +"sítěmi." -#: ../../mod/follow.php:45 +#: ../../mod/follow.php:40 ../../mod/follow.php:50 msgid "No compatible communication protocols or feeds were discovered." msgstr "Nenalezen žádný kompatibilní komunikační protokol nebo kanál." -#: ../../mod/follow.php:47 +#: ../../mod/follow.php:48 +msgid "The profile address specified does not provide adequate information." +msgstr "Uvedená adresa profilu neposkytuje dostatečné informace." + +#: ../../mod/follow.php:52 msgid "An author or name was not found." msgstr "Autor nebo jméno nenalezeno" -#: ../../mod/follow.php:49 +#: ../../mod/follow.php:54 msgid "No browser URL could be matched to this address." msgstr "Této adrese neodpovídá žádné URL prohlížeče." -#: ../../mod/follow.php:57 +#: ../../mod/follow.php:61 +msgid "" +"The profile address specified belongs to a network which has been disabled " +"on this site." +msgstr "" +"Zadaná adresa profilu patří do sítě, která byla na tomto serveru zakázána." + +#: ../../mod/follow.php:66 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." @@ -2175,19 +2859,19 @@ msgstr "" "Omezený profil. Tato osoba nebude schopna od Vás přijímat přímé / osobní " "sdělení." -#: ../../mod/follow.php:112 +#: ../../mod/follow.php:122 msgid "Unable to retrieve contact information." msgstr "Nepodařilo se získat kontaktní informace." -#: ../../mod/follow.php:158 +#: ../../mod/follow.php:168 msgid "following" msgstr "následující" -#: ../../mod/display.php:135 +#: ../../mod/display.php:105 msgid "Item has been removed." msgstr "Položka byla odstraněna." -#: ../../mod/dfrn_notify.php:251 +#: ../../mod/dfrn_notify.php:353 msgid "New mail received at " msgstr "Přišel nový e-mail v" @@ -2195,16 +2879,16 @@ msgstr "Přišel nový e-mail v" msgid "Applications" msgstr "Aplikace" -#: ../../mod/search.php:26 ../../include/nav.php:70 ../../boot.php:2114 +#: ../../mod/apps.php:11 +msgid "No installed applications." +msgstr "Žádné nainstalované aplikace." + +#: ../../mod/search.php:26 ../../include/text.php:610 ../../include/nav.php:69 msgid "Search" msgstr "Vyhledávání" -#: ../../mod/search.php:69 -msgid "No results." -msgstr "Žádné výsledky." - -#: ../../mod/profiles.php:21 ../../mod/profiles.php:240 -#: ../../mod/profiles.php:345 ../../mod/dfrn_confirm.php:62 +#: ../../mod/profiles.php:21 ../../mod/profiles.php:236 +#: ../../mod/profiles.php:341 ../../mod/dfrn_confirm.php:62 msgid "Profile not found." msgstr "Profil nenalezen" @@ -2212,187 +2896,184 @@ msgstr "Profil nenalezen" msgid "Profile Name is required." msgstr "Jméno profilu je povinné." -#: ../../mod/profiles.php:202 +#: ../../mod/profiles.php:198 msgid "Profile updated." msgstr "Profil aktualizován." -#: ../../mod/profiles.php:257 +#: ../../mod/profiles.php:253 msgid "Profile deleted." msgstr "Profil smazán." -#: ../../mod/profiles.php:273 ../../mod/profiles.php:304 +#: ../../mod/profiles.php:269 ../../mod/profiles.php:300 msgid "Profile-" msgstr "Profil-" -#: ../../mod/profiles.php:292 ../../mod/profiles.php:331 +#: ../../mod/profiles.php:288 ../../mod/profiles.php:327 msgid "New profile created." msgstr "Nový profil vytvořen." -#: ../../mod/profiles.php:310 +#: ../../mod/profiles.php:306 msgid "Profile unavailable to clone." msgstr "Profil není možné naklonovat." -#: ../../mod/profiles.php:357 +#: ../../mod/profiles.php:353 msgid "Hide your contact/friend list from viewers of this profile?" msgstr "" "Skrýt u tohoto profilu vaše kontakty / seznam přátel před před dalšími " "uživateli zobrazující si tento profil?" -#: ../../mod/profiles.php:366 -msgid "Hide profile details and all your messages from unknown viewers?" -msgstr "Skrýt detaily profilu a všechny zprávy před neznámými uživateli?" - -#: ../../mod/profiles.php:382 +#: ../../mod/profiles.php:371 msgid "Edit Profile Details" msgstr "Upravit podrobnosti profilu " -#: ../../mod/profiles.php:384 +#: ../../mod/profiles.php:373 msgid "View this profile" msgstr "Zobrazit tento profil" -#: ../../mod/profiles.php:385 +#: ../../mod/profiles.php:374 msgid "Create a new profile using these settings" msgstr "Vytvořit nový profil pomocí tohoto nastavení" -#: ../../mod/profiles.php:386 +#: ../../mod/profiles.php:375 msgid "Clone this profile" msgstr "Klonovat tento profil" -#: ../../mod/profiles.php:387 +#: ../../mod/profiles.php:376 msgid "Delete this profile" msgstr "Smazat tento profil" -#: ../../mod/profiles.php:388 +#: ../../mod/profiles.php:377 msgid "Profile Name:" msgstr "Jméno profilu:" -#: ../../mod/profiles.php:389 +#: ../../mod/profiles.php:378 msgid "Your Full Name:" msgstr "Vaše celé jméno:" -#: ../../mod/profiles.php:390 +#: ../../mod/profiles.php:379 msgid "Title/Description:" msgstr "Název / Popis:" -#: ../../mod/profiles.php:391 +#: ../../mod/profiles.php:380 msgid "Your Gender:" msgstr "Vaše pohlaví:" -#: ../../mod/profiles.php:392 -msgid "Birthday (y/m/d):" -msgstr "Narozeniny (rok/měsíc/den):" +#: ../../mod/profiles.php:381 +#, php-format +msgid "Birthday (%s):" +msgstr "Narozeniny uživatele (%s):" -#: ../../mod/profiles.php:393 +#: ../../mod/profiles.php:382 msgid "Street Address:" msgstr "Ulice:" -#: ../../mod/profiles.php:394 +#: ../../mod/profiles.php:383 msgid "Locality/City:" msgstr "Město:" -#: ../../mod/profiles.php:395 +#: ../../mod/profiles.php:384 msgid "Postal/Zip Code:" msgstr "PSČ:" -#: ../../mod/profiles.php:396 +#: ../../mod/profiles.php:385 msgid "Country:" msgstr "Země:" -#: ../../mod/profiles.php:397 +#: ../../mod/profiles.php:386 msgid "Region/State:" msgstr "Region / stát:" -#: ../../mod/profiles.php:398 +#: ../../mod/profiles.php:387 msgid "<span class=\"heart\">♥</span> Marital Status:" msgstr "<span class=\"heart\">♥</span> Rodinný stav:" -#: ../../mod/profiles.php:399 +#: ../../mod/profiles.php:388 msgid "Who: (if applicable)" msgstr "Kdo: (pokud je možné)" -#: ../../mod/profiles.php:400 +#: ../../mod/profiles.php:389 msgid "Examples: cathy123, Cathy Williams, cathy@example.com" msgstr "Příklady: jan123, Jan Novák, jan@seznam.cz" -#: ../../mod/profiles.php:401 ../../include/profile_advanced.php:90 +#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:90 msgid "Sexual Preference:" msgstr "Sexuální preference:" -#: ../../mod/profiles.php:402 +#: ../../mod/profiles.php:391 msgid "Homepage URL:" msgstr "Odkaz na domovskou stránku:" -#: ../../mod/profiles.php:403 ../../include/profile_advanced.php:115 +#: ../../mod/profiles.php:392 ../../include/profile_advanced.php:115 msgid "Political Views:" msgstr "Politické přesvědčení:" -#: ../../mod/profiles.php:404 +#: ../../mod/profiles.php:393 msgid "Religious Views:" msgstr "Náboženské přesvědčení:" -#: ../../mod/profiles.php:405 +#: ../../mod/profiles.php:394 msgid "Public Keywords:" msgstr "Veřejná klíčová slova:" -#: ../../mod/profiles.php:406 +#: ../../mod/profiles.php:395 msgid "Private Keywords:" msgstr "Soukromá klíčová slova:" -#: ../../mod/profiles.php:407 +#: ../../mod/profiles.php:396 msgid "Example: fishing photography software" msgstr "Příklad: fishing photography software" -#: ../../mod/profiles.php:408 +#: ../../mod/profiles.php:397 msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "" "(Používá se pro doporučování potenciálních přátel, může být viděno " "ostatními)" -#: ../../mod/profiles.php:409 +#: ../../mod/profiles.php:398 msgid "(Used for searching profiles, never shown to others)" msgstr "(Používá se pro vyhledávání profilů, není nikdy zobrazeno ostatním)" -#: ../../mod/profiles.php:410 +#: ../../mod/profiles.php:399 msgid "Tell us about yourself..." msgstr "Řekněte nám něco o sobě ..." -#: ../../mod/profiles.php:411 +#: ../../mod/profiles.php:400 msgid "Hobbies/Interests" msgstr "Koníčky/zájmy" -#: ../../mod/profiles.php:412 +#: ../../mod/profiles.php:401 msgid "Contact information and Social Networks" msgstr "Kontaktní informace a sociální sítě" -#: ../../mod/profiles.php:413 +#: ../../mod/profiles.php:402 msgid "Musical interests" msgstr "Hudební vkus" -#: ../../mod/profiles.php:414 +#: ../../mod/profiles.php:403 msgid "Books, literature" msgstr "Knihy, literatura" -#: ../../mod/profiles.php:415 +#: ../../mod/profiles.php:404 msgid "Television" msgstr "Televize" -#: ../../mod/profiles.php:416 +#: ../../mod/profiles.php:405 msgid "Film/dance/culture/entertainment" msgstr "Film/tanec/kultura/zábava" -#: ../../mod/profiles.php:417 +#: ../../mod/profiles.php:406 msgid "Love/romance" msgstr "Láska/romantika" -#: ../../mod/profiles.php:418 +#: ../../mod/profiles.php:407 msgid "Work/employment" msgstr "Práce/zaměstnání" -#: ../../mod/profiles.php:419 +#: ../../mod/profiles.php:408 msgid "School/education" msgstr "Škola/vzdělání" -#: ../../mod/profiles.php:424 +#: ../../mod/profiles.php:413 msgid "" "This is your <strong>public</strong> profile.<br />It <strong>may</strong> " "be visible to anybody using the internet." @@ -2400,31 +3081,31 @@ msgstr "" "Toto je váš <strong>veřejný</strong> profil.<br />Ten <strong>může</strong> " "být viditelný kýmkoliv na internetu." -#: ../../mod/profiles.php:435 ../../mod/directory.php:112 +#: ../../mod/profiles.php:423 ../../mod/directory.php:112 msgid "Age: " msgstr "Věk: " -#: ../../mod/profiles.php:470 ../../include/nav.php:108 +#: ../../mod/profiles.php:458 ../../include/nav.php:109 msgid "Profiles" msgstr "Profily" -#: ../../mod/profiles.php:471 +#: ../../mod/profiles.php:459 msgid "Change profile photo" msgstr "Změnit profilovou fotografii" -#: ../../mod/profiles.php:472 +#: ../../mod/profiles.php:460 msgid "Create New Profile" msgstr "Vytvořit nový profil" -#: ../../mod/profiles.php:482 +#: ../../mod/profiles.php:470 msgid "Profile Image" msgstr "Profilový obrázek" -#: ../../mod/profiles.php:484 -msgid "Visible to everybody" -msgstr "Viditelné pro všechny" +#: ../../mod/profiles.php:472 +msgid "visible to everybody" +msgstr "viditelné pro všechny" -#: ../../mod/profiles.php:485 +#: ../../mod/profiles.php:473 msgid "Edit visibility" msgstr "Upravit viditelnost" @@ -2452,22 +3133,22 @@ msgstr "Pohlaví: " msgid "No entries (some entries may be hidden)." msgstr "Žádné záznamy (některé položky mohou být skryty)." -#: ../../mod/invite.php:28 +#: ../../mod/invite.php:35 #, php-format msgid "%s : Not a valid email address." msgstr "%s : není platná e-mailová adresa." -#: ../../mod/invite.php:32 +#: ../../mod/invite.php:59 #, php-format msgid "Please join my network on %s" msgstr "Prosím, připojte se do mé sítě na %s" -#: ../../mod/invite.php:42 +#: ../../mod/invite.php:69 #, php-format msgid "%s : Message delivery failed." msgstr "%s : Doručení zprávy se nezdařilo." -#: ../../mod/invite.php:46 +#: ../../mod/invite.php:73 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." @@ -2475,83 +3156,91 @@ msgstr[0] "%d zpráva odeslána." msgstr[1] "%d zprávy odeslány." msgstr[2] "%d zprávy odeslány." -#: ../../mod/invite.php:61 +#: ../../mod/invite.php:92 +msgid "You have no more invitations available" +msgstr "Nemáte k dispozici žádné další pozvánky" + +#: ../../mod/invite.php:99 msgid "Send invitations" msgstr "Poslat pozvánky" -#: ../../mod/invite.php:62 +#: ../../mod/invite.php:100 msgid "Enter email addresses, one per line:" msgstr "Zadejte e-mailové adresy, jednu na řádek:" -#: ../../mod/invite.php:64 +#: ../../mod/invite.php:102 #, php-format msgid "Please join my social network on %s" msgstr "Prosím, připojte se do mé sociální sítě na %s" -#: ../../mod/invite.php:65 +#: ../../mod/invite.php:103 msgid "To accept this invitation, please visit:" msgstr "Chcete-li toto pozvání přijmout, navštivte prosím:" -#: ../../mod/invite.php:66 +#: ../../mod/invite.php:104 +msgid "You will need to supply this invitation code: $invite_code" +msgstr "Budete muset zadat kód této pozvánky: $invite_code" + +#: ../../mod/invite.php:104 msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "" "Jakmile se zaregistrujete, prosím spojte se se mnou přes mou profilovu " "stránku na:" -#: ../../mod/dfrn_confirm.php:231 +#: ../../mod/dfrn_confirm.php:233 msgid "Response from remote site was not understood." msgstr "Odpověď ze vzdáleného serveru nebyla srozumitelná." -#: ../../mod/dfrn_confirm.php:240 +#: ../../mod/dfrn_confirm.php:242 msgid "Unexpected response from remote site: " msgstr "Neočekávaná odpověď od vzdáleného serveru:" -#: ../../mod/dfrn_confirm.php:248 +#: ../../mod/dfrn_confirm.php:250 msgid "Confirmation completed successfully." msgstr "Potvrzení úspěšně dokončena." -#: ../../mod/dfrn_confirm.php:250 ../../mod/dfrn_confirm.php:264 -#: ../../mod/dfrn_confirm.php:271 +#: ../../mod/dfrn_confirm.php:252 ../../mod/dfrn_confirm.php:266 +#: ../../mod/dfrn_confirm.php:273 msgid "Remote site reported: " msgstr "Vzdálený server oznámil:" -#: ../../mod/dfrn_confirm.php:262 +#: ../../mod/dfrn_confirm.php:264 msgid "Temporary failure. Please wait and try again." msgstr "Dočasné selhání. Prosím, vyčkejte a zkuste to znovu." -#: ../../mod/dfrn_confirm.php:269 +#: ../../mod/dfrn_confirm.php:271 msgid "Introduction failed or was revoked." msgstr "Žádost o propojení selhala nebo byla zrušena." -#: ../../mod/dfrn_confirm.php:387 +#: ../../mod/dfrn_confirm.php:393 msgid "Unable to set contact photo." msgstr "Nelze nastavit fotografii kontaktu." -#: ../../mod/dfrn_confirm.php:430 ../../include/conversation.php:61 +#: ../../mod/dfrn_confirm.php:436 ../../include/conversation.php:79 #, php-format msgid "%1$s is now friends with %2$s" msgstr "%1$s je nyní přítel s %2$s" -#: ../../mod/dfrn_confirm.php:501 +#: ../../mod/dfrn_confirm.php:507 #, php-format msgid "No user record found for '%s' " msgstr "Pro '%s' nenalezen žádný uživatelský záznam " -#: ../../mod/dfrn_confirm.php:511 +#: ../../mod/dfrn_confirm.php:517 msgid "Our site encryption key is apparently messed up." msgstr "Náš šifrovací klíč zřejmě přestal správně fungovat." -#: ../../mod/dfrn_confirm.php:522 +#: ../../mod/dfrn_confirm.php:528 msgid "Empty site URL was provided or URL could not be decrypted by us." msgstr "" "Byla poskytnuta prázdná URL adresa nebo se nepodařilo URL adresu dešifrovat." -#: ../../mod/dfrn_confirm.php:534 +#: ../../mod/dfrn_confirm.php:549 msgid "Contact record was not found for you on our site." msgstr "Kontakt záznam nebyl nalezen pro vás na našich stránkách." -#: ../../mod/dfrn_confirm.php:562 +#: ../../mod/dfrn_confirm.php:578 msgid "" "The ID provided by your system is a duplicate on our system. It should work " "if you try again." @@ -2559,103 +3248,131 @@ msgstr "" "Váš systém poskytl duplicitní ID vůči našemu systému. Pokuste se akci " "zopakovat." -#: ../../mod/dfrn_confirm.php:573 +#: ../../mod/dfrn_confirm.php:589 msgid "Unable to set your contact credentials on our system." msgstr "Nelze nastavit Vaše přihlašovací údaje v našem systému." -#: ../../mod/dfrn_confirm.php:626 +#: ../../mod/dfrn_confirm.php:642 msgid "Unable to update your contact profile details on our system" msgstr "Nelze aktualizovat Váš profil v našem systému" -#: ../../mod/dfrn_confirm.php:656 +#: ../../mod/dfrn_confirm.php:672 #, php-format msgid "Connection accepted at %s" msgstr "Připojení přijato na %s" -#: ../../addon/facebook/facebook.php:248 +#: ../../addon/facebook/facebook.php:314 msgid "Facebook disabled" msgstr "Facebook zakázán" -#: ../../addon/facebook/facebook.php:253 +#: ../../addon/facebook/facebook.php:319 msgid "Updating contacts" msgstr "Aktualizace kontaktů" -#: ../../addon/facebook/facebook.php:262 +#: ../../addon/facebook/facebook.php:328 msgid "Facebook API key is missing." msgstr "Chybí Facebook API klíč." -#: ../../addon/facebook/facebook.php:269 +#: ../../addon/facebook/facebook.php:335 msgid "Facebook Connect" msgstr "Facebook připojen" -#: ../../addon/facebook/facebook.php:275 +#: ../../addon/facebook/facebook.php:341 msgid "Install Facebook connector for this account." msgstr "Nainstalovat pro tento účet Facebook konektor." -#: ../../addon/facebook/facebook.php:282 +#: ../../addon/facebook/facebook.php:348 msgid "Remove Facebook connector" msgstr "Odstranit konektor na Facebook" -#: ../../addon/facebook/facebook.php:288 +#: ../../addon/facebook/facebook.php:354 msgid "Post to Facebook by default" msgstr "Standardně posílat příspěvky na Facebook" -#: ../../addon/facebook/facebook.php:350 +#: ../../addon/facebook/facebook.php:358 +msgid "Link all your Facebook friends and conversations" +msgstr "Připojit všechny své přátele na Facebooku a konverzace" + +#: ../../addon/facebook/facebook.php:363 +msgid "Warning: Your Facebook privacy settings can not be imported." +msgstr "" +"Upozornění: nastavení ochrany osobních údajů na Facebooku nelze importovat." + +#: ../../addon/facebook/facebook.php:364 +msgid "" +"Linked Facebook items <strong>may</strong> be publicly visible, depending on" +" your privacy settings for this website/account." +msgstr "" +"Propojené položky z Facebook <strong>mohou</strong> být veřejně viditelné, v" +" závislosti na nastavení ochrany osobních údajů pro tuto webovou " +"stránku/účet." + +#: ../../addon/facebook/facebook.php:419 msgid "Facebook" msgstr "Facebook" -#: ../../addon/facebook/facebook.php:351 +#: ../../addon/facebook/facebook.php:420 msgid "Facebook Connector Settings" msgstr "Nastavení Facebook konektoru " -#: ../../addon/facebook/facebook.php:365 +#: ../../addon/facebook/facebook.php:434 msgid "Post to Facebook" msgstr "Přidat příspěvek na Facebook" -#: ../../addon/facebook/facebook.php:434 +#: ../../addon/facebook/facebook.php:507 msgid "" "Post to Facebook cancelled because of multi-network access permission " "conflict." msgstr "" "Příspěvek na Facebook zrušen kvůli konfliktu přístupových práv mezi sítěmi." -#: ../../addon/facebook/facebook.php:500 +#: ../../addon/facebook/facebook.php:580 msgid "Image: " msgstr "Obrázek: " -#: ../../addon/facebook/facebook.php:576 +#: ../../addon/facebook/facebook.php:656 msgid "View on Friendika" msgstr "Pohled na Friendiku" -#: ../../addon/widgets/widgets.php:41 -msgid "Widgets key: " -msgstr "Widgets klíč:" +#: ../../addon/facebook/facebook.php:687 +msgid "Facebook post failed. Queued for retry." +msgstr "" +"Zaslání příspěvku na Facebook selhalo. Příspěvek byl zařazen do fronty pro " +"opakované odeslání." -#: ../../addon/widgets/widgets.php:45 +#: ../../addon/widgets/widgets.php:53 msgid "Generate new key" msgstr "Generovat nové klíče" +#: ../../addon/widgets/widgets.php:56 +msgid "Widgets key" +msgstr "Widgety klíč" + +#: ../../addon/widgets/widgets.php:58 +msgid "Widgets available" +msgstr "Widgety k dispozici" + #: ../../addon/widgets/widget_friends.php:30 msgid "Connect on Friendika!" msgstr "Spojit se na Friendice!" -#: ../../addon/tictac/tictac.php:14 +#: ../../addon/tictac/tictac.php:20 msgid "Three Dimensional Tic-Tac-Toe" msgstr "Trojrozměrné Tic-Tac-Toe" -#: ../../addon/tictac/tictac.php:47 +#: ../../addon/tictac/tictac.php:53 msgid "3D Tic-Tac-Toe" msgstr "3D Tic-Tac-Toe" -#: ../../addon/tictac/tictac.php:52 +#: ../../addon/tictac/tictac.php:58 msgid "New game" msgstr "Nová hra" -#: ../../addon/tictac/tictac.php:53 +#: ../../addon/tictac/tictac.php:59 msgid "New game with handicap" msgstr "Nová hra s handicapem" -#: ../../addon/tictac/tictac.php:54 +#: ../../addon/tictac/tictac.php:60 msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " @@ -2663,7 +3380,7 @@ msgstr "" "Trojrozměrné tic-tac-toe je podobná této tradiční hře kromě toho, že se " "hraje na více úrovních současně." -#: ../../addon/tictac/tictac.php:55 +#: ../../addon/tictac/tictac.php:61 msgid "" "In this case there are three levels. You win by getting three in a row on " "any level, as well as up, down, and diagonally across the different levels." @@ -2671,7 +3388,7 @@ msgstr "" "V tomto případě existují tři úrovně. Vyhrajete tím, že dostane tři v řadě na" " jakékoli úrovni, stejně jako nahoru, dolů a šikmo na různých úrovních." -#: ../../addon/tictac/tictac.php:57 +#: ../../addon/tictac/tictac.php:63 msgid "" "The handicap game disables the center position on the middle level because " "the player claiming this square often has an unfair advantage." @@ -2679,118 +3396,141 @@ msgstr "" "Hra s handicapem zakáže centrální pozici na střední úrovni, protože hráč " "zaujímající tuto polohu má často nespravedlivou výhodu." -#: ../../addon/tictac/tictac.php:176 +#: ../../addon/tictac/tictac.php:182 msgid "You go first..." msgstr "Vy začněte ..." -#: ../../addon/tictac/tictac.php:181 +#: ../../addon/tictac/tictac.php:187 msgid "I'm going first this time..." msgstr "Tentokrát začnu já..." -#: ../../addon/tictac/tictac.php:187 +#: ../../addon/tictac/tictac.php:193 msgid "You won!" msgstr "Vyhrál jste!" -#: ../../addon/tictac/tictac.php:193 ../../addon/tictac/tictac.php:218 +#: ../../addon/tictac/tictac.php:199 ../../addon/tictac/tictac.php:224 msgid "\"Cat\" game!" msgstr "\"Kočičí\" hra!" -#: ../../addon/tictac/tictac.php:216 +#: ../../addon/tictac/tictac.php:222 msgid "I won!" msgstr "Vyhrál jsem!" -#: ../../addon/randplace/randplace.php:171 +#: ../../addon/randplace/randplace.php:170 msgid "Randplace Settings" msgstr "Randplace Nastavení" -#: ../../addon/randplace/randplace.php:173 +#: ../../addon/randplace/randplace.php:172 msgid "Enable Randplace Plugin" msgstr "Povolit Randplace Plugin" -#: ../../addon/java_upload/java_upload.php:33 -msgid "Select files to upload: " -msgstr "Vyberte soubory k nahrání:" - -#: ../../addon/java_upload/java_upload.php:35 -msgid "" -"Use the following controls only if the Java uploader [above] fails to " -"launch." -msgstr "" -"Následující ovládací prvky použijte pouze v případě, že se nezdaří hru " -"spustit s pomocí Java uploaderu [výše]." - -#: ../../addon/js_upload/js_upload.php:39 +#: ../../addon/js_upload/js_upload.php:43 msgid "Upload a file" msgstr "Nahrát soubor" -#: ../../addon/js_upload/js_upload.php:40 +#: ../../addon/js_upload/js_upload.php:44 msgid "Drop files here to upload" msgstr "Přeneste sem soubory k nahrání" -#: ../../addon/js_upload/js_upload.php:42 +#: ../../addon/js_upload/js_upload.php:46 msgid "Failed" msgstr "Neúspěch" -#: ../../addon/js_upload/js_upload.php:288 +#: ../../addon/js_upload/js_upload.php:292 msgid "No files were uploaded." msgstr "Žádné soubory nebyly nahrány." -#: ../../addon/js_upload/js_upload.php:294 +#: ../../addon/js_upload/js_upload.php:298 msgid "Uploaded file is empty" msgstr "Nahraný soubor je prázdný" -#: ../../addon/js_upload/js_upload.php:299 -msgid "Uploaded file is too large" -msgstr "Nahraný soubor je příliš velký" - -#: ../../addon/js_upload/js_upload.php:317 +#: ../../addon/js_upload/js_upload.php:321 msgid "File has an invalid extension, it should be one of " msgstr "Soubor má neplatnou příponu, ta by měla být jednou z" -#: ../../addon/js_upload/js_upload.php:328 +#: ../../addon/js_upload/js_upload.php:332 msgid "Upload was cancelled, or server error encountered" msgstr "Nahrávání bylo zrušeno nebo došlo k chybě na serveru" -#: ../../addon/oembed/oembed.php:29 +#: ../../addon/impressum/impressum.php:25 +msgid "Impressum" +msgstr "Impressum" + +#: ../../addon/impressum/impressum.php:38 +#: ../../addon/impressum/impressum.php:40 +#: ../../addon/impressum/impressum.php:70 +msgid "Site Owner" +msgstr "Vlastník webu" + +#: ../../addon/impressum/impressum.php:38 +#: ../../addon/impressum/impressum.php:74 +msgid "Email Address" +msgstr "E-mailová adresa" + +#: ../../addon/impressum/impressum.php:43 +#: ../../addon/impressum/impressum.php:72 +msgid "Postal Address" +msgstr "Poštovní adresa" + +#: ../../addon/impressum/impressum.php:49 +msgid "" +"The impressum addon needs to be configured!<br />Please add at least the " +"<tt>owner</tt> variable to your config file. For other variables please " +"refer to the README file of the addon." +msgstr "" +"Doplněk Impressum musí být nakonfigurován!<br/>Prosím, přidejte alespoň " +"proměnnou <tt>owner</tt> do konfiguračního souboru. Pro nastavení ostatních " +"proměnných se seznamte s nápovědou v souboru README tohoto doplňku." + +#: ../../addon/impressum/impressum.php:71 +msgid "Site Owners Profile" +msgstr "Profil majitele webu" + +#: ../../addon/impressum/impressum.php:73 +msgid "Notes" +msgstr "Poznámky" + +#: ../../addon/oembed/oembed.php:30 msgid "OEmbed settings updated" msgstr "OEmbed nastavení aktualizováno" -#: ../../addon/oembed/oembed.php:42 -msgid "Use OEmbed for YouTube videos: " -msgstr "Použít OEmbed pro videa YouTube:" +#: ../../addon/oembed/oembed.php:43 +msgid "Use OEmbed for YouTube videos" +msgstr "Použití OEmbed pro videa na YouTube" -#: ../../addon/oembed/oembed.php:76 +#: ../../addon/oembed/oembed.php:71 msgid "URL to embed:" msgstr "URL adresa k vložení:" -#: ../../addon/statusnet/statusnet.php:78 +#: ../../addon/statusnet/statusnet.php:133 msgid "Post to StatusNet" msgstr "Poslat příspěvek na StatusNet" -#: ../../addon/statusnet/statusnet.php:117 +#: ../../addon/statusnet/statusnet.php:175 msgid "" "Please contact your site administrator.<br />The provided API URL is not " "valid." -msgstr "Obraťte se na správce webu.<br />Poskytnutý odkaz na API není platný." +msgstr "" +"Obraťte se na administratora webu.<br />Poskytnutý odkaz na API není platný." -#: ../../addon/statusnet/statusnet.php:145 +#: ../../addon/statusnet/statusnet.php:203 msgid "We could not contact the StatusNet API with the Path you entered." msgstr "" "S cestou, kterou jste zadali, se nebylo možné spojit s API StatusNetu." -#: ../../addon/statusnet/statusnet.php:172 +#: ../../addon/statusnet/statusnet.php:230 msgid "StatusNet settings updated." msgstr "Nastavení StatusNetu aktualizováno." -#: ../../addon/statusnet/statusnet.php:195 +#: ../../addon/statusnet/statusnet.php:253 msgid "StatusNet Posting Settings" msgstr "Nastavení zasílání příspěvků na StatusNet " -#: ../../addon/statusnet/statusnet.php:209 +#: ../../addon/statusnet/statusnet.php:267 msgid "Globally Available StatusNet OAuthKeys" msgstr "Globálně dostupné StatusNet OAuth klíče" -#: ../../addon/statusnet/statusnet.php:210 +#: ../../addon/statusnet/statusnet.php:268 msgid "" "There are preconfigured OAuth key pairs for some StatusNet servers " "available. If you are useing one of them, please use these credentials. If " @@ -2800,11 +3540,11 @@ msgstr "" " Pokud používáte některý z nich, použijte toto přihlášení. Pokud ne, " "neváhejte se připojit k jiné instanci StatusNet (viz níže)." -#: ../../addon/statusnet/statusnet.php:218 +#: ../../addon/statusnet/statusnet.php:276 msgid "Provide your own OAuth Credentials" msgstr "Uveďte své vlastní OAuth přihlašovací údaje" -#: ../../addon/statusnet/statusnet.php:219 +#: ../../addon/statusnet/statusnet.php:277 msgid "" "No consumer key pair for StatusNet found. Register your Friendika Account as" " an desktop client on your StatusNet account, copy the consumer key pair " @@ -2815,23 +3555,23 @@ msgstr "" "Nenalezen žádný consumer pár klíčů pro StatusNet. Zaregistrujte svůj " "Friendika účet jako desktopový klient na svém účtu StatusNetu, zkopírujte " "níže consumer pár klíčů a zadejte API base root.<br />Než si zaregistrujete " -"svůj vlastní pár klíčů OAuth, zjistěte si od správce, zda-li už náhodou na " -"tento Friendika server nepřidal pár klíčů pro vámi požadovanou instalaci " -"StatusNetu." +"svůj vlastní pár klíčů OAuth, zjistěte si od administrátora, zda-li už " +"náhodou na tento Friendika server nepřidal pár klíčů pro vámi požadovanou " +"instalaci StatusNetu." -#: ../../addon/statusnet/statusnet.php:221 +#: ../../addon/statusnet/statusnet.php:279 msgid "OAuth Consumer Key" msgstr "OAuth Consumer Key" -#: ../../addon/statusnet/statusnet.php:224 +#: ../../addon/statusnet/statusnet.php:282 msgid "OAuth Consumer Secret" msgstr "OAuth Consumer Secret" -#: ../../addon/statusnet/statusnet.php:227 +#: ../../addon/statusnet/statusnet.php:285 msgid "Base API Path (remember the trailing /)" msgstr "Cesta k Base API (nezapomeňte na koncový /)" -#: ../../addon/statusnet/statusnet.php:248 +#: ../../addon/statusnet/statusnet.php:306 msgid "" "To connect to your StatusNet account click the button below to get a " "security code from StatusNet which you have to copy into the input box below" @@ -2843,67 +3583,98 @@ msgstr "" "vstupního pole níže a odelat formulář. Pouze Vaše <strong>veřejné</strong> " "příspěvky budou zveřejněny na StatusNetu." -#: ../../addon/statusnet/statusnet.php:249 +#: ../../addon/statusnet/statusnet.php:307 msgid "Log in with StatusNet" msgstr "Přihlásit se s StatusNet" -#: ../../addon/statusnet/statusnet.php:251 +#: ../../addon/statusnet/statusnet.php:309 msgid "Copy the security code from StatusNet here" msgstr "Zkopírujte sem bezpečnostní kód ze StatusNet" -#: ../../addon/statusnet/statusnet.php:257 +#: ../../addon/statusnet/statusnet.php:315 msgid "Cancel Connection Process" msgstr "Zrušit připojování" -#: ../../addon/statusnet/statusnet.php:259 +#: ../../addon/statusnet/statusnet.php:317 msgid "Current StatusNet API is" msgstr "Aktuální StatusNet API je" -#: ../../addon/statusnet/statusnet.php:260 +#: ../../addon/statusnet/statusnet.php:318 msgid "Cancel StatusNet Connection" msgstr "Zrušit StatusNet připojení" -#: ../../addon/statusnet/statusnet.php:271 ../../addon/twitter/twitter.php:165 +#: ../../addon/statusnet/statusnet.php:329 ../../addon/twitter/twitter.php:180 msgid "Currently connected to: " msgstr "V současné době připojen k:" -#: ../../addon/statusnet/statusnet.php:272 +#: ../../addon/statusnet/statusnet.php:330 msgid "" -"If enabled all your <strong>public</strong> postings will be posted to the " -"associated StatusNet account." +"If enabled all your <strong>public</strong> postings can be posted to the " +"associated StatusNet account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." msgstr "" -"Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky budou " -"zveřejněny na příslušném účtu StatusNetu." +"Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky mohou být " +"zaslány na související StatusNet účet. Můžete si vybrat, zda-li toto bude " +"výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované " +"chování při psaní každého příspěvku." -#: ../../addon/statusnet/statusnet.php:274 +#: ../../addon/statusnet/statusnet.php:332 msgid "Allow posting to StatusNet" msgstr "Povolit zasílání příspěvků na StatusNet" -#: ../../addon/statusnet/statusnet.php:277 +#: ../../addon/statusnet/statusnet.php:335 msgid "Send public postings to StatusNet by default" msgstr "Standardně poslílat veřejné příspěvky na StatusNet" -#: ../../addon/statusnet/statusnet.php:282 ../../addon/twitter/twitter.php:172 +#: ../../addon/statusnet/statusnet.php:340 ../../addon/twitter/twitter.php:191 msgid "Clear OAuth configuration" msgstr "Vymazat konfiguraci OAuth" -#: ../../addon/twitter/twitter.php:64 +#: ../../addon/statusnet/statusnet.php:460 +msgid "API URL" +msgstr "API URL" + +#: ../../addon/statusnet/statusnet.php:461 +msgid "Consumer Secret" +msgstr "Consumer Secret" + +#: ../../addon/statusnet/statusnet.php:462 +msgid "Consumer Key" +msgstr "Consumer Key" + +#: ../../addon/piwik/piwik.php:77 +msgid "Piwik Base URL" +msgstr "Piwik Base adresa URL" + +#: ../../addon/piwik/piwik.php:78 +msgid "Site ID" +msgstr "ID webu" + +#: ../../addon/piwik/piwik.php:79 +msgid "Show opt-out cookie link?" +msgstr "Zobrazit odkaz opt-out cookie?" + +#: ../../addon/twitter/twitter.php:70 msgid "Post to Twitter" msgstr "Poslat příspěvek na Twitter" -#: ../../addon/twitter/twitter.php:122 +#: ../../addon/twitter/twitter.php:115 +msgid "Twitter settings updated." +msgstr "Nastavení Twitteru aktualizováno." + +#: ../../addon/twitter/twitter.php:137 msgid "Twitter Posting Settings" msgstr "Nastavení zasílání příspěvků na Twitter " -#: ../../addon/twitter/twitter.php:129 +#: ../../addon/twitter/twitter.php:144 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." msgstr "" -"Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na správce" -" webu." +"Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na " +"administrátora webu." -#: ../../addon/twitter/twitter.php:148 +#: ../../addon/twitter/twitter.php:163 msgid "" "At this Friendika instance the Twitter plugin was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " @@ -2917,31 +3688,46 @@ msgstr "" "pole níže a odešlete formulář. Pouze Vaše <strong>veřejné</strong> příspěvky" " budou zveřejněny na Twitteru." -#: ../../addon/twitter/twitter.php:149 +#: ../../addon/twitter/twitter.php:164 msgid "Log in with Twitter" msgstr "Přihlásit se s Twitter" -#: ../../addon/twitter/twitter.php:151 +#: ../../addon/twitter/twitter.php:166 msgid "Copy the PIN from Twitter here" msgstr "Zkopírujte sem PIN z Twitteru" -#: ../../addon/twitter/twitter.php:166 +#: ../../addon/twitter/twitter.php:181 msgid "" -"If enabled all your <strong>public</strong> postings will be posted to the " -"associated Twitter account as well." +"If enabled all your <strong>public</strong> postings can be posted to the " +"associated Twitter account. You can choose to do so by default (here) or for" +" every posting separately in the posting options when writing the entry." msgstr "" -"Je-li povoleno, všechny <strong>veřejné</strong> příspěvky budou zároveň " -"zveřejněny na příslušný Twitter účet." +"Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky mohou být " +"zaslány na související Twitter účet. Můžete si vybrat, zda-li toto bude " +"výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované " +"chování při psaní každého příspěvku." -#: ../../addon/twitter/twitter.php:168 -msgid "Send public postings to Twitter" -msgstr "Poslat veřejné příspěvky na Twitter" +#: ../../addon/twitter/twitter.php:183 +msgid "Allow posting to Twitter" +msgstr "Povolit odesílání na Twitter" -#: ../../include/profile_advanced.php:23 ../../boot.php:2356 +#: ../../addon/twitter/twitter.php:186 +msgid "Send public postings to Twitter by default" +msgstr "Defaultně zasílat veřejné komentáře na Twitter" + +#: ../../addon/twitter/twitter.php:282 +msgid "Consumer key" +msgstr "Consumer key" + +#: ../../addon/twitter/twitter.php:283 +msgid "Consumer secret" +msgstr "Consumer secret" + +#: ../../include/profile_advanced.php:23 ../../boot.php:880 msgid "Gender:" msgstr "Pohlaví:" -#: ../../include/profile_advanced.php:36 ../../include/items.php:1086 +#: ../../include/profile_advanced.php:36 ../../include/items.php:1137 msgid "Birthday:" msgstr "Narozeniny:" @@ -2961,7 +3747,7 @@ msgstr "Věk:" msgid "<span class=\"heart\">♥</span> Status:" msgstr "<span class=\"heart\">♥</span> Status:" -#: ../../include/profile_advanced.php:103 ../../boot.php:2362 +#: ../../include/profile_advanced.php:103 ../../boot.php:886 msgid "Homepage:" msgstr "Domácí stránka:" @@ -3269,6 +4055,134 @@ msgstr "Nezajímá" msgid "Ask me" msgstr "Zeptej se mě" +#: ../../include/event.php:11 +msgid "l F d, Y \\@ g:i A" +msgstr "l F d, Y \\@ g:i A" + +#: ../../include/event.php:17 +msgid "Starts:" +msgstr "Začíná:" + +#: ../../include/event.php:27 +msgid "Finishes:" +msgstr "Končí:" + +#: ../../include/text.php:229 +msgid "prev" +msgstr "předchozí" + +#: ../../include/text.php:231 +msgid "first" +msgstr "první" + +#: ../../include/text.php:260 +msgid "last" +msgstr "poslední" + +#: ../../include/text.php:263 +msgid "next" +msgstr "další" + +#: ../../include/text.php:542 +msgid "No contacts" +msgstr "Žádné kontakty" + +#: ../../include/text.php:550 +#, php-format +msgid "%d Contact" +msgid_plural "%d Contacts" +msgstr[0] "%d kontakt" +msgstr[1] "%d kontaktů" +msgstr[2] "%d kontaktů" + +#: ../../include/text.php:711 +msgid "Monday" +msgstr "Pondělí" + +#: ../../include/text.php:711 +msgid "Tuesday" +msgstr "Úterý" + +#: ../../include/text.php:711 +msgid "Wednesday" +msgstr "Středa" + +#: ../../include/text.php:711 +msgid "Thursday" +msgstr "Čtvrtek" + +#: ../../include/text.php:711 +msgid "Friday" +msgstr "Pátek" + +#: ../../include/text.php:711 +msgid "Saturday" +msgstr "Sobota" + +#: ../../include/text.php:711 +msgid "Sunday" +msgstr "Neděle" + +#: ../../include/text.php:715 +msgid "January" +msgstr "Ledna" + +#: ../../include/text.php:715 +msgid "February" +msgstr "Února" + +#: ../../include/text.php:715 +msgid "March" +msgstr "Března" + +#: ../../include/text.php:715 +msgid "April" +msgstr "Dubna" + +#: ../../include/text.php:715 +msgid "May" +msgstr "Května" + +#: ../../include/text.php:715 +msgid "June" +msgstr "Června" + +#: ../../include/text.php:715 +msgid "July" +msgstr "Července" + +#: ../../include/text.php:715 +msgid "August" +msgstr "Srpna" + +#: ../../include/text.php:715 +msgid "September" +msgstr "Září" + +#: ../../include/text.php:715 +msgid "October" +msgstr "Října" + +#: ../../include/text.php:715 +msgid "November" +msgstr "Listopadu" + +#: ../../include/text.php:715 +msgid "December" +msgstr "Prosince" + +#: ../../include/text.php:778 +msgid "bytes" +msgstr "bytů" + +#: ../../include/text.php:861 +msgid "Select an alternate language" +msgstr "Vyběr alternativního jazyka" + +#: ../../include/diaspora.php:309 +msgid "Sharing notification from Diaspora network" +msgstr "Sdílení oznámení ze sítě Diaspora" + #: ../../include/oembed.php:95 msgid "Embedding disabled" msgstr "Vkládání zakázáno" @@ -3281,41 +4195,109 @@ msgstr "Vytvořit novou skupinu" msgid "Everybody" msgstr "Všichni" -#: ../../include/nav.php:41 ../../boot.php:865 +#: ../../include/nav.php:41 ../../boot.php:667 msgid "Logout" msgstr "Odhlásit se" -#: ../../include/nav.php:44 ../../boot.php:843 ../../boot.php:849 +#: ../../include/nav.php:41 +msgid "End this session" +msgstr "Konec této relace" + +#: ../../include/nav.php:44 ../../boot.php:645 ../../boot.php:651 msgid "Login" msgstr "Přihlásit se" -#: ../../include/nav.php:55 ../../include/nav.php:92 +#: ../../include/nav.php:44 +msgid "Sign in" +msgstr "Přihlásit se" + +#: ../../include/nav.php:55 ../../include/nav.php:93 msgid "Home" msgstr "Domů" -#: ../../include/nav.php:68 +#: ../../include/nav.php:55 +msgid "Home Page" +msgstr "Domácí stránka" + +#: ../../include/nav.php:59 +msgid "Create an account" +msgstr "Vytvořit účet" + +#: ../../include/nav.php:64 +msgid "Help and documentation" +msgstr "Nápověda a dokumentace" + +#: ../../include/nav.php:67 msgid "Apps" msgstr "Aplikace" -#: ../../include/nav.php:80 +#: ../../include/nav.php:67 +msgid "Addon applications, utilities, games" +msgstr "Doplňkové aplikace, nástroje, hry" + +#: ../../include/nav.php:69 +msgid "Search site content" +msgstr "Hledání na stránkách tohoto webu" + +#: ../../include/nav.php:79 +msgid "Conversations on this site" +msgstr "Konverzace na tomto webu" + +#: ../../include/nav.php:81 msgid "Directory" msgstr "Adresář" -#: ../../include/nav.php:90 +#: ../../include/nav.php:81 +msgid "People directory" +msgstr "Adresář" + +#: ../../include/nav.php:91 msgid "Network" msgstr "Síť" -#: ../../include/nav.php:98 +#: ../../include/nav.php:91 +msgid "Conversations from your friends" +msgstr "Konverzace od Vašich přátel" + +#: ../../include/nav.php:93 +msgid "Your posts and conversations" +msgstr "Vaše příspěvky a konverzace" + +#: ../../include/nav.php:99 msgid "Notifications" msgstr "Upozornění" -#: ../../include/nav.php:104 +#: ../../include/nav.php:99 +msgid "Friend requests" +msgstr "Požadavky přátelství" + +#: ../../include/nav.php:102 +msgid "Private mail" +msgstr "Soukromá pošta" + +#: ../../include/nav.php:105 msgid "Manage" msgstr "Spravovat" -#: ../../include/nav.php:107 -msgid "Settings" -msgstr "Nastavení" +#: ../../include/nav.php:105 +msgid "Manage other pages" +msgstr "Spravovat jiné stránky" + +#: ../../include/nav.php:109 +msgid "Manage/edit profiles" +msgstr "Spravovat/upravit profily" + +#: ../../include/nav.php:110 +msgid "Manage/edit friends and contacts" +msgstr "Spravovat/upravit přátelé a kontakty" + +#: ../../include/nav.php:117 +msgid "Admin" +msgstr "Administrace" + +#: ../../include/nav.php:117 +msgid "Site setup and configuration" +msgstr "Nastavení webu a konfigurace" #: ../../include/auth.php:27 msgid "Logged out." @@ -3325,71 +4307,79 @@ msgstr "Odhlášen." msgid "Miscellaneous" msgstr "Různé" -#: ../../include/datetime.php:148 -msgid "less than a second ago" -msgstr "méně než před sekundou" - -#: ../../include/datetime.php:151 +#: ../../include/datetime.php:105 ../../include/datetime.php:237 msgid "year" msgstr "rok" -#: ../../include/datetime.php:151 -msgid "years" -msgstr "let" - -#: ../../include/datetime.php:152 +#: ../../include/datetime.php:110 ../../include/datetime.php:238 msgid "month" msgstr "měsíc" -#: ../../include/datetime.php:152 -msgid "months" -msgstr "měsíců" - -#: ../../include/datetime.php:153 -msgid "week" -msgstr "týden" - -#: ../../include/datetime.php:153 -msgid "weeks" -msgstr "týdny" - -#: ../../include/datetime.php:154 +#: ../../include/datetime.php:115 ../../include/datetime.php:240 msgid "day" msgstr "den" -#: ../../include/datetime.php:155 +#: ../../include/datetime.php:228 +msgid "never" +msgstr "nikdy" + +#: ../../include/datetime.php:234 +msgid "less than a second ago" +msgstr "méně než před sekundou" + +#: ../../include/datetime.php:237 +msgid "years" +msgstr "let" + +#: ../../include/datetime.php:238 +msgid "months" +msgstr "měsíců" + +#: ../../include/datetime.php:239 +msgid "week" +msgstr "týden" + +#: ../../include/datetime.php:239 +msgid "weeks" +msgstr "týdny" + +#: ../../include/datetime.php:240 +msgid "days" +msgstr "dnů" + +#: ../../include/datetime.php:241 msgid "hour" msgstr "hodina" -#: ../../include/datetime.php:155 +#: ../../include/datetime.php:241 msgid "hours" msgstr "hodin" -#: ../../include/datetime.php:156 +#: ../../include/datetime.php:242 msgid "minute" msgstr "minuta" -#: ../../include/datetime.php:156 +#: ../../include/datetime.php:242 msgid "minutes" msgstr "minut" -#: ../../include/datetime.php:157 +#: ../../include/datetime.php:243 msgid "second" msgstr "sekunda" -#: ../../include/datetime.php:157 +#: ../../include/datetime.php:243 msgid "seconds" msgstr "sekund" -#: ../../include/datetime.php:164 +#: ../../include/datetime.php:250 msgid " ago" -msgstr "před" +msgstr " nazpět" -#: ../../include/poller.php:380 +#: ../../include/poller.php:418 msgid "From: " msgstr "Od:" -#: ../../include/bbcode.php:83 +#: ../../include/bbcode.php:116 msgid "Image/photo" msgstr "Obrázek/fotografie" @@ -3398,329 +4388,230 @@ msgstr "Obrázek/fotografie" msgid "Cannot locate DNS info for database server '%s'" msgstr "Nelze nalézt záznam v DNS pro databázový server '%s'" -#: ../../include/acl_selectors.php:133 -msgid "Visible To:" -msgstr "Viditelné pro:" +#: ../../include/acl_selectors.php:279 +msgid "Visible to everybody" +msgstr "Viditelné pro všechny" -#: ../../include/acl_selectors.php:133 -msgid "everybody" -msgstr "Žádost o připojení selhala nebo byla zrušena." +#: ../../include/acl_selectors.php:280 +msgid "show" +msgstr "zobrazit" -#: ../../include/acl_selectors.php:137 ../../include/acl_selectors.php:152 -msgid "Groups" -msgstr "Skupiny" +#: ../../include/acl_selectors.php:281 +msgid "don't show" +msgstr "nikdy nezobrazit" -#: ../../include/acl_selectors.php:148 -msgid "Except For:" -msgstr "S výjimkou:" - -#: ../../include/notifier.php:414 +#: ../../include/notifier.php:465 msgid "(no subject)" msgstr "(Bez předmětu)" -#: ../../include/items.php:1447 +#: ../../include/items.php:1526 msgid "You have a new follower at " msgstr "Máte nového následovníka na" -#: ../../include/conversation.php:191 ../../include/conversation.php:451 -#: ../../include/conversation.php:452 +#: ../../include/conversation.php:23 +msgid "event" +msgstr "událost" + +#: ../../include/conversation.php:213 ../../include/conversation.php:488 +#: ../../include/conversation.php:489 #, php-format msgid "View %s's profile" msgstr "Zobrazit %s profilu" -#: ../../include/conversation.php:207 +#: ../../include/conversation.php:222 ../../include/conversation.php:501 +#, php-format +msgid "%s from %s" +msgstr "%s od %s" + +#: ../../include/conversation.php:230 msgid "View in context" msgstr "Pohled v kontextu" -#: ../../include/conversation.php:278 +#: ../../include/conversation.php:301 msgid "See more posts like this" msgstr "Zobrazit více podobných příspěvků" -#: ../../include/conversation.php:303 +#: ../../include/conversation.php:329 #, php-format msgid "See all %d comments" msgstr "Zobrazit všechny komentáře %d" -#: ../../include/conversation.php:453 +#: ../../include/conversation.php:427 +msgid "Select" +msgstr "Vybrat" + +#: ../../include/conversation.php:429 +msgid "toggle star status" +msgstr "přepnout hvězdu" + +#: ../../include/conversation.php:490 msgid "to" msgstr "pro" -#: ../../include/conversation.php:454 +#: ../../include/conversation.php:491 msgid "Wall-to-Wall" msgstr "Zeď-na-Zeď" -#: ../../include/conversation.php:455 +#: ../../include/conversation.php:492 msgid "via Wall-To-Wall:" msgstr "přes Zeď-na-Zeď " -#: ../../include/conversation.php:593 +#: ../../include/conversation.php:534 +msgid "Delete Selected Items" +msgstr "Smazat vybrané položky" + +#: ../../include/conversation.php:608 msgid "View status" msgstr "Zobrazit stav" -#: ../../include/conversation.php:594 +#: ../../include/conversation.php:609 msgid "View profile" msgstr "Zobrazit profil" -#: ../../include/conversation.php:595 +#: ../../include/conversation.php:610 msgid "View photos" msgstr "Zobrazit fotografie" -#: ../../include/conversation.php:596 +#: ../../include/conversation.php:611 msgid "View recent" msgstr "Zobrazit poslední" -#: ../../include/conversation.php:598 +#: ../../include/conversation.php:613 msgid "Send PM" -msgstr "Poslat PM" +msgstr "Poslat soukromou zprávu" -#: ../../include/conversation.php:648 +#: ../../include/conversation.php:663 #, php-format msgid "%s likes this." msgstr "%s se to líbí." -#: ../../include/conversation.php:648 +#: ../../include/conversation.php:663 #, php-format msgid "%s doesn't like this." msgstr "%s se to nelíbí." -#: ../../include/conversation.php:652 +#: ../../include/conversation.php:667 #, php-format msgid "<span %1$s>%2$d people</span> like this." msgstr "<span %1$s>%2$d lidem</span> se to líbí." -#: ../../include/conversation.php:654 +#: ../../include/conversation.php:669 #, php-format msgid "<span %1$s>%2$d people</span> don't like this." msgstr "<span %1$s>%2$d lidem</span> se to nelíbí." -#: ../../include/conversation.php:660 +#: ../../include/conversation.php:675 msgid "and" msgstr "a" -#: ../../include/conversation.php:663 +#: ../../include/conversation.php:678 #, php-format msgid ", and %d other people" msgstr ", a %d dalších lidí" -#: ../../include/conversation.php:664 +#: ../../include/conversation.php:679 #, php-format msgid "%s like this." msgstr "%s se to líbí." -#: ../../include/conversation.php:664 +#: ../../include/conversation.php:679 #, php-format msgid "%s don't like this." msgstr "%s se to nelíbí." -#: ../../include/conversation.php:683 +#: ../../include/conversation.php:698 msgid "Visible to <strong>everybody</strong>" msgstr "Viditelné pro <strong>všechny</strong>" -#: ../../include/conversation.php:685 +#: ../../include/conversation.php:700 msgid "Please enter a YouTube link:" msgstr "Prosím zadejte odkaz na YouTube:" -#: ../../include/conversation.php:686 +#: ../../include/conversation.php:701 msgid "Please enter a video(.ogg) link/URL:" msgstr "Prosím, zadejte odkaz na video (ogg.):" -#: ../../include/conversation.php:687 +#: ../../include/conversation.php:702 msgid "Please enter an audio(.ogg) link/URL:" msgstr "Prosím, zadejte odkaz na audio (ogg.):" -#: ../../include/conversation.php:688 +#: ../../include/conversation.php:703 msgid "Where are you right now?" msgstr "Kde právě jste?" -#: ../../include/conversation.php:689 +#: ../../include/conversation.php:704 msgid "Enter a title for this item" msgstr "Zadejte titulek pro tuto položku" -#: ../../include/conversation.php:740 +#: ../../include/conversation.php:755 msgid "Set title" msgstr "Nastavit titulek" -#: ../../boot.php:385 +#: ../../boot.php:410 msgid "Delete this item?" msgstr "Odstranit tuto položku?" -#: ../../boot.php:834 +#: ../../boot.php:636 msgid "Create a New Account" msgstr "Vytvořit nový účet" -#: ../../boot.php:841 +#: ../../boot.php:643 msgid "Nickname or Email address: " msgstr "Přezdívka nebo e-mailová adresa:" -#: ../../boot.php:842 +#: ../../boot.php:644 msgid "Password: " msgstr "Heslo: " -#: ../../boot.php:847 +#: ../../boot.php:649 msgid "Nickname/Email/OpenID: " -msgstr "Přezdívka/Email/OpenID: " +msgstr "Přezdívka/E-mail/OpenID: " -#: ../../boot.php:848 +#: ../../boot.php:650 msgid "Password (if not OpenID): " msgstr "Heslo (pokud se nepoužívá OpenID):" -#: ../../boot.php:851 +#: ../../boot.php:653 msgid "Forgot your password?" msgstr "Zapomněli jste své heslo?" -#: ../../boot.php:1113 -msgid "prev" -msgstr "předchozí" - -#: ../../boot.php:1115 -msgid "first" -msgstr "první" - -#: ../../boot.php:1144 -msgid "last" -msgstr "poslední" - -#: ../../boot.php:1147 -msgid "next" -msgstr "další" - -#: ../../boot.php:2046 -msgid "No contacts" -msgstr "Žádné kontakty" - -#: ../../boot.php:2054 -#, php-format -msgid "%d Contact" -msgid_plural "%d Contacts" -msgstr[0] "%d kontakt" -msgstr[1] "%d kontaktů" -msgstr[2] "%d kontaktů" - -#: ../../boot.php:2329 +#: ../../boot.php:853 msgid "Connect" msgstr "Spojit" -#: ../../boot.php:2344 -msgid "Location:" -msgstr "Místo:" - -#: ../../boot.php:2348 +#: ../../boot.php:872 msgid ", " msgstr ", " -#: ../../boot.php:2360 +#: ../../boot.php:884 msgid "Status:" msgstr "Status:" -#: ../../boot.php:2457 -msgid "Monday" -msgstr "Pondělí" - -#: ../../boot.php:2457 -msgid "Tuesday" -msgstr "Úterý" - -#: ../../boot.php:2457 -msgid "Wednesday" -msgstr "Středa" - -#: ../../boot.php:2457 -msgid "Thursday" -msgstr "Čtvrtek" - -#: ../../boot.php:2457 -msgid "Friday" -msgstr "Pátek" - -#: ../../boot.php:2457 -msgid "Saturday" -msgstr "Sobota" - -#: ../../boot.php:2457 -msgid "Sunday" -msgstr "Neděle" - -#: ../../boot.php:2461 -msgid "January" -msgstr "Ledna" - -#: ../../boot.php:2461 -msgid "February" -msgstr "Února" - -#: ../../boot.php:2461 -msgid "March" -msgstr "Března" - -#: ../../boot.php:2461 -msgid "April" -msgstr "Dubna" - -#: ../../boot.php:2461 -msgid "May" -msgstr "Května" - -#: ../../boot.php:2461 -msgid "June" -msgstr "Června" - -#: ../../boot.php:2461 -msgid "July" -msgstr "Července" - -#: ../../boot.php:2461 -msgid "August" -msgstr "Srpna" - -#: ../../boot.php:2461 -msgid "September" -msgstr "Září" - -#: ../../boot.php:2461 -msgid "October" -msgstr "Října" - -#: ../../boot.php:2461 -msgid "November" -msgstr "Listopadu" - -#: ../../boot.php:2461 -msgid "December" -msgstr "Prosince" - -#: ../../boot.php:2476 +#: ../../boot.php:975 msgid "g A l F d" msgstr "g A l F d" -#: ../../boot.php:2494 +#: ../../boot.php:993 msgid "Birthday Reminders" msgstr "Připomínka narozenin" -#: ../../boot.php:2495 +#: ../../boot.php:994 msgid "Birthdays this week:" msgstr "Narozeniny tento týden:" -#: ../../boot.php:2496 +#: ../../boot.php:995 msgid "(Adjusted for local time)" msgstr "(Upraveno pro místní čas)" -#: ../../boot.php:2507 +#: ../../boot.php:1006 msgid "[today]" msgstr "[Dnes]" -#: ../../boot.php:2570 -msgid "bytes" -msgstr "bytů" - -#: ../../boot.php:2744 -msgid "link to source" -msgstr "odkaz na zdroj" - -#: ../../index.php:199 +#: ../../index.php:209 msgid "Not Found" msgstr "Nenalezen" -#: ../../index.php:200 +#: ../../index.php:210 msgid "Page not found." msgstr "Stránka nenalezena" diff --git a/view/cs/passchanged_eml.tpl b/view/cs/passchanged_eml.tpl index 7d144dbd8e..5447d2e804 100644 --- a/view/cs/passchanged_eml.tpl +++ b/view/cs/passchanged_eml.tpl @@ -4,9 +4,9 @@ Milý/Milá $username, Vaše přihlašovací údaje jsou tato: -Adresa webu: $siteurl +Adresa webu: $siteurl Přihlašovací jméno: $email -Heslo: $new_password +Heslo: $new_password Toto heslo si můžete změnit z vašeho účtu na stránce Nastavení poté, co se přihlásíte. diff --git a/view/cs/register_open_eml.tpl b/view/cs/register_open_eml.tpl index 96235e572e..f8e42678b4 100644 --- a/view/cs/register_open_eml.tpl +++ b/view/cs/register_open_eml.tpl @@ -2,9 +2,9 @@ Milý/milá $username, Díky za registraci na $sitename. Váš účet byl vytvořen. Vaše přihlašovací údaje jsou tato: -Adresa webu: $siteurl +Adresa webu: $siteurl Přihlašovací jméno: $email -Heslo: $password +Heslo: $password Toto heslo si můžete změnit z vašeho účtu na stránce "Nastavení" poté, co se přihlásíte. diff --git a/view/cs/register_verify_eml.tpl b/view/cs/register_verify_eml.tpl index a843a857e3..4b34c6b6dc 100644 --- a/view/cs/register_verify_eml.tpl +++ b/view/cs/register_verify_eml.tpl @@ -3,9 +3,9 @@ Na webu $sitename byla vytvořena nová uživatelská registrace, která vyžadu Přihlašovací údaje jsou tato: -Celé jméno: $username -Adresa webu: $siteurl -Přihlašovací jméno: $email +Celé jméno: $username +Adresa webu: $siteurl +Přihlašovací jméno: $email Pro odsouhlasení tohoto požadavku prosím klikněte na následující odkaz: diff --git a/view/cs/strings.php b/view/cs/strings.php index 32d06de99b..0c7d0d7bd8 100644 --- a/view/cs/strings.php +++ b/view/cs/strings.php @@ -1,29 +1,53 @@ <?php -function string_plural_select($n){ +function string_plural_select_cs($n){ return ($n==1) ? 0 : ($n>=2 && $n<=4) ? 1 : 2; } ; $a->strings["Post successful."] = "Příspěvek úspěšně odeslán"; -$a->strings["Contact settings applied."] = "Opravit nastavení kontaktu"; +$a->strings["Contact settings applied."] = "Nastavení kontaktu změněno"; $a->strings["Contact update failed."] = "Aktualizace kontaktu selhala."; $a->strings["Permission denied."] = "Přístup odmítnut."; $a->strings["Contact not found."] = "Kontakt nenalezen."; $a->strings["Repair Contact Settings"] = "Opravit nastavení kontaktu"; $a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working."] = "<strong>VAROVÁNÍ: Toto je velmi pokročilé nastavení,</strong> pokud zadáte nesprávné informace, komunikace s tímto kontaktem přestane fungovat."; -$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "Aktualizace kontaktu selhala"; +$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "Prosím použijte <strong>ihned</strong> v prohlížeči tlačítko \"zpět\" pokud si nejste jistí co dělat na této stránce."; $a->strings["Name"] = "Jméno"; $a->strings["Account Nickname"] = "Přezdívka účtu"; $a->strings["Account URL"] = "URL adresa účtu"; $a->strings["Friend Request URL"] = "Žádost o přátelství URL"; $a->strings["Friend Confirm URL"] = "URL adresa potvrzení přátelství"; $a->strings["Notification Endpoint URL"] = "Notifikační URL adresa"; -$a->strings["Poll/Feed URL"] = "Sdílený obsah v síti Friendika je poskytována pod <a href=\"http://creativecommons.org/licenses/by/3.0/cz/\">licencí Creative Commons Attribution 3.0</a>"; +$a->strings["Poll/Feed URL"] = "Poll/Feed URL adresa"; $a->strings["Submit"] = "Odeslat"; $a->strings["Help:"] = "Nápověda:"; $a->strings["Help"] = "Nápověda"; $a->strings["File exceeds size limit of %d"] = "Velikost souboru přesáhla limit %d"; $a->strings["File upload failed."] = "Nahrání souboru se nezdařilo."; +$a->strings["Friend suggestion sent."] = "Návrhy přátelství odeslány "; +$a->strings["Suggest Friends"] = "Navrhněte přátelé"; +$a->strings["Suggest a friend for %s"] = "Navrhněte přátelé pro uživatele %s"; +$a->strings["Status"] = "Stav"; +$a->strings["Profile"] = "Profil"; +$a->strings["Photos"] = "Fotografie"; +$a->strings["Events"] = "Události"; +$a->strings["Personal Notes"] = "Osobní poznámky"; +$a->strings["Create New Event"] = "Vytvořit novou událost"; +$a->strings["Previous"] = "Předchozí"; +$a->strings["Next"] = "Následující"; +$a->strings["l, F j"] = "l, F j"; +$a->strings["Edit event"] = "Editovat událost"; +$a->strings["link to source"] = "odkaz na zdroj"; +$a->strings["hour:minute"] = "hodina:minuta"; +$a->strings["Event details"] = "Detaily události"; +$a->strings["Format is %s %s. Starting date and Description are required."] = "Formát je %s %s. Datum zahájení a popis jsou povinné."; +$a->strings["Event Starts:"] = "Událost začíná:"; +$a->strings["Finish date/time is not known or not relevant"] = "Datum/čas konce není zadán nebo není relevantní"; +$a->strings["Event Finishes:"] = "Akce končí:"; +$a->strings["Adjust for viewer timezone"] = "Nastavit časové pásmo pro uživatele s právem pro čtení"; +$a->strings["Description:"] = "Popis:"; +$a->strings["Location:"] = "Místo:"; +$a->strings["Share this event"] = "Sdílet tuto událost"; $a->strings["Cancel"] = "Zrušit"; $a->strings["Tag removed"] = "Štítek odstraněn"; $a->strings["Remove Item Tag"] = "Odebrat štítek položky"; @@ -32,6 +56,7 @@ $a->strings["Remove"] = "Odstranit"; $a->strings["%s welcomes %s"] = "%s vítá %s "; $a->strings["Photo Albums"] = "Fotoalba"; $a->strings["Contact Photos"] = "Fotogalerie kontaktu"; +$a->strings["everybody"] = "Žádost o připojení selhala nebo byla zrušena."; $a->strings["Contact information unavailable"] = "Kontakt byl zablokován"; $a->strings["Profile Photos"] = "Profilové fotografie"; $a->strings["Album not found."] = "Album nenalezeno."; @@ -41,10 +66,12 @@ $a->strings["was tagged in a"] = "štítek byl přidán v"; $a->strings["photo"] = "fotografie"; $a->strings["by"] = "od"; $a->strings["Image exceeds size limit of "] = "Velikost obrázku překračuje limit velikosti"; -$a->strings["Unable to process image."] = "Kontakt byl odblokován"; +$a->strings["Image file is empty."] = "Soubor obrázku je prázdný."; +$a->strings["Unable to process image."] = "Obrázek není možné zprocesovat"; $a->strings["Image upload failed."] = "Nahrání obrázku selhalo."; $a->strings["Public access denied."] = "Veřejný přístup odepřen."; $a->strings["No photos selected"] = "Není vybrána žádná fotografie"; +$a->strings["Access to this item is restricted."] = "Přístup k této položce je omezen."; $a->strings["Upload Photos"] = "Nahrání fotografií "; $a->strings["New album name: "] = "Název nového alba:"; $a->strings["or existing album name: "] = "nebo stávající název alba:"; @@ -55,15 +82,13 @@ $a->strings["Photo not available"] = "Fotografie není k dispozici"; $a->strings["Edit photo"] = "Editovat fotografii"; $a->strings["Use as profile photo"] = "Použít jako profilovou fotografii"; $a->strings["Private Message"] = "Soukromá zpráva"; -$a->strings["<< Prev"] = "<< Předchozí"; $a->strings["View Full Size"] = "Zobrazit v plné velikosti"; -$a->strings["Next >>"] = "Následující >>"; $a->strings["Tags: "] = "Štítky:"; $a->strings["[Remove any tag]"] = "[Odstranit všechny štítky]"; $a->strings["New album name"] = "Nové jméno alba"; $a->strings["Caption"] = "Titulek"; $a->strings["Add a Tag"] = "Přidat štítek"; -$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Kontakt byl ignorován"; +$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Příklad: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"; $a->strings["I like this (toggle)"] = "Líbí se mi to (přepínač)"; $a->strings["I don't like this (toggle)"] = "Nelíbí se mi to (přepínač)"; $a->strings["Share"] = "Sdílet"; @@ -74,6 +99,10 @@ $a->strings["Delete"] = "Odstranit"; $a->strings["Recent Photos"] = "Aktuální fotografie"; $a->strings["Upload New Photos"] = "Nahrát nové fotografie"; $a->strings["View Album"] = "Zobrazit album"; +$a->strings["Not available."] = "Není k dispozici."; +$a->strings["Community"] = "Komunita"; +$a->strings["No results."] = "Žádné výsledky."; +$a->strings["Shared content is covered by the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."] = "Sdílený obsah je v souladu s <a href=\"http://creativecommons.org/licenses/by/3.0/\">Commons Creative 3.0</a> licencí."; $a->strings["Item not found"] = "Položka nenalezena"; $a->strings["Edit post"] = "Upravit příspěvek"; $a->strings["Post to Email"] = "Poslat příspěvek na e-mail"; @@ -84,14 +113,14 @@ $a->strings["Insert web link"] = "Vložit webový odkaz"; $a->strings["Insert YouTube video"] = "Vložit YouTube video"; $a->strings["Insert Vorbis [.ogg] video"] = "Vložit Vorbis [.ogg] video"; $a->strings["Insert Vorbis [.ogg] audio"] = "Vložit Vorbis [.ogg] audio"; -$a->strings["Set your location"] = "Kontakt přestal být ignorován"; -$a->strings["Clear browser location"] = "Kontakt byl odstraněn"; +$a->strings["Set your location"] = "Nastavte vaši polohu"; +$a->strings["Clear browser location"] = "Odstranit adresu v prohlížeči"; $a->strings["Permission settings"] = "Nastavení oprávnění"; $a->strings["CC: email addresses"] = "skrytá kopie: e-mailové adresy"; $a->strings["Public post"] = "Veřejný příspěvek"; -$a->strings["Example: bob@example.com, mary@example.com"] = "Editor kontaktu"; -$a->strings["This introduction has already been accepted."] = "Kontaktní informace / poznámky"; -$a->strings["Profile location is not valid or does not contain profile information."] = "Zablokovat/Odblokovat kontakt"; +$a->strings["Example: bob@example.com, mary@example.com"] = "Příklad: bob@example.com, mary@example.com"; +$a->strings["This introduction has already been accepted."] = "Toto pozvání již bylo přijato"; +$a->strings["Profile location is not valid or does not contain profile information."] = "Adresa profilu není platná nebo neobsahuje profilové informace"; $a->strings["Warning: profile location has no identifiable owner name."] = "Varování: umístění profilu nemá žádné identifikovatelné jméno vlastníka"; $a->strings["Warning: profile location has no profile photo."] = "Varování: umístění profilu nemá žádnou profilovou fotografii."; $a->strings["%d required parameter was not found at the given location"] = array( @@ -100,10 +129,10 @@ $a->strings["%d required parameter was not found at the given location"] = array 2 => "%d požadované parametry nebyly nalezeny na daném místě", ); $a->strings["Introduction complete."] = "Představení dokončeno."; -$a->strings["Unrecoverable protocol error."] = "Smazat kontakt"; +$a->strings["Unrecoverable protocol error."] = "Neopravitelná chyba protokolu"; $a->strings["Profile unavailable."] = "Profil není k dispozici."; $a->strings["%s has received too many connection requests today."] = "%s dnes obdržel příliš mnoho požadavků na připojení."; -$a->strings["Spam protection measures have been invoked."] = "Blokovat tento kontakt"; +$a->strings["Spam protection measures have been invoked."] = "Ochrana proti spamu byla aktivována"; $a->strings["Friends are advised to please try again in 24 hours."] = "Přátelům se doporučuje to zkusit znovu za 24 hodin."; $a->strings["Invalid locator"] = "Neplatný odkaz"; $a->strings["Unable to resolve your name at the provided location."] = "Nepodařilo se zjistit Vaše jméno na zadané adrese."; @@ -120,11 +149,11 @@ $a->strings["Please confirm your introduction/connection request to %s."] = "Pro $a->strings["Confirm"] = "Potvrdit"; $a->strings["[Name Withheld]"] = "[Jméno odepřeno]"; $a->strings["Introduction received at "] = "Pozvánka přijata v"; -$a->strings["Administrator"] = "Správce"; +$a->strings["Administrator"] = "Administrátor"; $a->strings["Friend/Connection Request"] = "Požadavek o přátelství / propojení"; $a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "Příklady: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"; $a->strings["Please answer the following:"] = "Odpovězte, prosím, následující:"; -$a->strings["Does \$name know you?"] = "Zná Vás \$name?"; +$a->strings["Does %s know you?"] = "Zná Vás uživatel %s ?"; $a->strings["Yes"] = "Ano"; $a->strings["No"] = "Ne"; $a->strings["Add a personal note:"] = "Přidat osobní poznámku:"; @@ -147,14 +176,15 @@ $a->strings["You may need to import the file \"database.sql\" manually using php $a->strings["Welcome to Friendika."] = "Vítejte na Friendice."; $a->strings["Friendika Social Network"] = "Sociální síť Friendika "; $a->strings["Installation"] = "Instalace"; -$a->strings["In order to install Friendika we need to know how to contact your database."] = "Pro instalaci Friendiky musíme vědět, jak se připojit k Vaší databázi."; -$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Obraťte se na svého poskytovatele hostingu nebo správce serveru, pokud máte dotazy týkající se těchto nastavení."; -$a->strings["The database you specify below must already exist. If it does not, please create it before continuing."] = "Databáze zadáte níže již musí existovat. Pokud ještě neexistuje, vytvořte ji, prosím, aby bylo možné pokračovat."; +$a->strings["In order to install Friendika we need to know how to connect to your database."] = "Pro instalaci Friendika musíme vědět, jak se připojit k databázi."; +$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Obraťte se na svého poskytovatele hostingu nebo administrátora serveru , pokud máte dotazy týkající se těchto nastavení."; +$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Databázi, kterou uvedete níže by již měla existovat. Pokud tak není, prosíme, vytvořte ji před pokračováním."; $a->strings["Database Server Name"] = "Jméno databázového serveru"; $a->strings["Database Login Name"] = "Přihlašovací jméno k databázi"; $a->strings["Database Login Password"] = "Heslo k databázovému účtu "; $a->strings["Database Name"] = "Jméno databáze"; $a->strings["Please select a default timezone for your website"] = "Prosím, vyberte výchozí časové pásmo pro vaše webové stránky"; +$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "e-mailová adresa administrárota webu. E-mailová adresa vašeho účtu se musí shodovat, aby bylo možné využívat panel webové administrace."; $a->strings["Could not find a command line version of PHP in the web server PATH."] = "Nelze najít verzi PHP pro příkazový řádek v PATH webového serveru."; $a->strings["This is required. Please adjust the configuration file .htconfig.php accordingly."] = "Tento krok je nutný. Upravte příslušným způsobem konfigurační soubor .htconfig.php."; $a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Verze PHP pro příkazový řádek na vašem systému nemá povolen \"register_argc_argv\"."; @@ -166,13 +196,16 @@ $a->strings["Error: libCURL PHP module required but not installed."] = "Chyba: p $a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Chyba: požadovaný GD graphics PHP modul není nainstalován."; $a->strings["Error: openssl PHP module required but not installed."] = "Chyba: požadovaný openssl PHP modul není nainstalován."; $a->strings["Error: mysqli PHP module required but not installed."] = "Chyba: požadovaný mysqli PHP modul není nainstalován."; +$a->strings["Error: mb_string PHP module required but not installed."] = "Chyba: PHP modul mb_string je vyžadován, ale není nainstalován."; $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."] = "Webový instalátor musí být schopen vytvořit soubor s názvem \".htconfig.php\" v hlavním adresáři vašeho webového serveru ale nyní mu to není umožněno."; $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."] = "Toto je nejčastěji nastavením oprávnění, kdy webový server nemusí být schopen zapisovat soubory do vašeho adresáře - i když Vy můžete."; $a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Prosím, poraďte se s dokumentací k Vašemu hostingu nebo s technickou podporou, zda-li lze tuto situaci napravit."; $a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Pokud ne, může být vyžadováno provedení ruční instalace. Prosím, seznamte se s návodem popsaným v souboru \"INSTALL.txt\"."; $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."] = "Databázový konfigurační soubor \".htconfig.php\" nemohl být uložen. Prosím, použijte přiložený text k vytvoření konfiguračního souboru ve vašem kořenovém adresáři webového serveru."; $a->strings["Errors encountered creating database tables."] = "Při vytváření databázových tabulek došlo k chybám."; +$a->strings["[Embedded content - reload page to view]"] = "[Vložený obsah - obnovení stránky pro zobrazení]"; $a->strings["Profile Match"] = "Shoda profilu"; +$a->strings["No keywords to match. Please add keywords to your default profile."] = "Žádná klíčová slova k porovnání. Prosím, přidejte klíčová slova do Vašeho výchozího profilu."; $a->strings["No matches"] = "Žádné shody"; $a->strings["Remote privacy information not available."] = "Vzdálené soukromé informace nejsou k dispozici."; $a->strings["Visible to:"] = "Viditelné pro:"; @@ -183,21 +216,25 @@ $a->strings["Ignore"] = "Ignorovat"; $a->strings["Pending Friend/Connect Notifications"] = "Čekající požadavky na Přátelství / Připojení "; $a->strings["Show Ignored Requests"] = "Zobrazit ignorované žádosti"; $a->strings["Hide Ignored Requests"] = "Skrýt ignorované žádosti"; +$a->strings["Notification type: "] = "Typ oznámení:"; +$a->strings["Friend Suggestion"] = "Návrh přátelství"; +$a->strings["suggested by %s"] = "navrhl %s"; +$a->strings["Approve"] = "Schválit"; $a->strings["Claims to be known to you: "] = "Vaši údajní známí:"; $a->strings["yes"] = "ano"; $a->strings["no"] = "ne"; $a->strings["Approve as: "] = "Schválit jako:"; $a->strings["Friend"] = "Přítel"; $a->strings["Fan/Admirer"] = "Fanoušek / obdivovatel"; -$a->strings["Notification type: "] = "Typ oznámení:"; $a->strings["Friend/Connect Request"] = "Přítel / žádost o připojení"; $a->strings["New Follower"] = "Nový následovník"; -$a->strings["Approve"] = "Schválit"; $a->strings["No notifications."] = "Žádné oznámení."; -$a->strings["User registrations waiting for confirm"] = "Registrace uživatele čeká na potvrzení"; -$a->strings["Deny"] = "Odmítnout"; -$a->strings["No registrations."] = "Žádné registrace."; $a->strings["Invite Friends"] = "Pozvat přátele"; +$a->strings["%d invitation available"] = array( + 0 => "Pozvánka %d k dispozici", + 1 => "Pozvánky %d k dispozici", + 2 => "Pozvánky %d k dispozici", +); $a->strings["Find People With Shared Interests"] = "Najít lidi se společnými zájmy"; $a->strings["Connect/Follow"] = "Připojit / Následovat"; $a->strings["Example: bob@example.com, http://example.com/barbara"] = "Příklad: jan@příklad.cz, http://příklad.cz/jana"; @@ -219,6 +256,7 @@ $a->strings["Private communications are not available for this contact."] = "Sou $a->strings["Never"] = "Nikdy"; $a->strings["(Update was successful)"] = "(Aktualizace byla úspěšná)"; $a->strings["(Update was not successful)"] = "(Aktualizace nebyla úspěšná)"; +$a->strings["Suggest friends"] = "Navrhněte přátelé"; $a->strings["Contact Editor"] = "Editor kontaktu"; $a->strings["Profile Visibility"] = "Viditelnost profilu"; $a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Vyberte prosím profil, který chcete zobrazit %s při zabezpečeném prohlížení vašeho profilu."; @@ -227,7 +265,7 @@ $a->strings["Online Reputation"] = "Online pověst"; $a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = "Občas mohou vaši přátelé chtít informovat o online legitimitě této osoby."; $a->strings["You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them."] = "Poskytnutím <em>pověsti</em> jim můžete pomoci se rozhodnout, zda-li s touto osobou komunikovat či nikoliv."; $a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = "Věnujte prosím chvilku vyplnění této volby, pokud máte pocit, že by mohlo být užitečné pro ostatní."; -$a->strings["Visit \$name's profile"] = "Navštívit profil \$name"; +$a->strings["Visit %s's profile [%s]"] = "Navštivte profil uživatele %s [%s]"; $a->strings["Block/Unblock contact"] = "Blokovat / Odblokovat kontakt"; $a->strings["Ignore contact"] = "Ignorovat kontakt"; $a->strings["Repair contact URL settings"] = "Opravit nastavení URL kontaktu"; @@ -248,13 +286,13 @@ $a->strings["Show Blocked Connections"] = "Zobrazit blokované spojení"; $a->strings["Hide Blocked Connections"] = "Skrýt blokované spojení"; $a->strings["Finding: "] = "Zjištění: "; $a->strings["Find"] = "Najít"; -$a->strings["Visit \$username's profile"] = "Navštívit profil uživatele \$username"; $a->strings["Edit contact"] = "Editovat kontakt"; +$a->strings["No valid account found."] = "Nenalezen žádný platný účet."; $a->strings["Password reset request issued. Check your email."] = "Žádost o obnovení hesla vyřízena. Zkontrolujte Vaši e-mailovou schránku."; -$a->strings["Password reset requested at %s"] = "Resetování hesla vyžádáno v %s"; +$a->strings["Password reset requested at %s"] = "Na %s bylo zažádáno o resetování hesla"; $a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Žádost nemohla být ověřena. (Možná jste ji odeslali již dříve.) Obnovení hesla se nezdařilo."; -$a->strings["Password Reset"] = "Obnovit heslo"; -$a->strings["Your password has been reset as requested."] = "Vaše heslo bylo resetováno jak bylo požadováno."; +$a->strings["Password Reset"] = "Obnovení hesla"; +$a->strings["Your password has been reset as requested."] = "Vaše heslo bylo na Vaše přání resetováno."; $a->strings["Your new password is"] = "Vaše nové heslo je"; $a->strings["Save or copy your new password - and then"] = "Uložte si nebo zkopírujte nové heslo - a pak"; $a->strings["click here to login"] = "klikněte zde pro přihlášení"; @@ -267,73 +305,82 @@ $a->strings["Passwords do not match. Password unchanged."] = "Hesla se neshoduj $a->strings["Empty passwords are not allowed. Password unchanged."] = "Prázdné hesla nejsou povolena. Heslo nebylo změněno."; $a->strings["Password changed."] = "Heslo bylo změněno."; $a->strings["Password update failed. Please try again."] = "Aktualizace hesla se nezdařila. Zkuste to prosím znovu."; +$a->strings["Failed to connect with email account using the settings provided."] = "Nepodařilo se připojit k e-mailovému účtu pomocí dodaného nastavení."; $a->strings[" Please use a shorter name."] = "Prosím použijte kratší jméno."; $a->strings[" Name too short."] = "Jméno je příliš krátké."; $a->strings[" Not valid email."] = "Neplatný e-mail."; $a->strings[" Cannot change to that email."] = "Nelze provést změnu na tento e-mail."; $a->strings["Settings updated."] = "Nastavení aktualizováno."; -$a->strings["Plugin Settings"] = "Nastavení doplňku"; -$a->strings["Account Settings"] = "Nastavení účtu"; +$a->strings["Account settings"] = "Nastavení účtu"; +$a->strings["Plugin settings"] = "Nastavení pluginu"; $a->strings["No Plugin settings configured"] = "Žádný doplněk není nastaven"; +$a->strings["Plugin Settings"] = "Nastavení doplňku"; $a->strings["Normal Account"] = "Normální účet"; $a->strings["This account is a normal personal profile"] = "Tento účet je běžný osobní profil"; $a->strings["Soapbox Account"] = "Soapbox účet"; $a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Automaticky schválit všechna spojení / přátelství jako fanoušky s právem pouze ke čtení"; $a->strings["Community/Celebrity Account"] = "Komunitní účet / Účet celebrity"; $a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Automaticky schvalovat všechny žádosti o spojení / přátelství, jako fanoušky s právem ke čtení."; -$a->strings["Automatic Friend Account"] = "Automatický účet přítele"; +$a->strings["Automatic Friend Account"] = "Účet s automatickým schvalováním přátel"; $a->strings["Automatically approve all connection/friend requests as friends"] = "Automaticky schvalovat všechny žádosti o spojení / přátelství jako přátele"; -$a->strings["OpenID: "] = "OpenID: "; -$a->strings[" (Optional) Allow this OpenID to login to this account."] = " (Volitelné) Povolit toto OpenID pro přihlášení k tomuto účtu."; -$a->strings["Publish your default profile in site directory?"] = "Zveřejnit Váš výchozí profil v místním adresáři?"; -$a->strings["Publish your default profile in global social directory?"] = "Zveřejnit Váš výchozí profil v globálním sociální adresáři?"; +$a->strings["OpenID:"] = "OpenID:"; +$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Volitelné) Povolit OpenID pro přihlášení k tomuto účtu."; +$a->strings["Publish your default profile in your local site directory?"] = "Publikovat Váš výchozí profil v místním adresáři webu?"; +$a->strings["Publish your default profile in the global social directory?"] = "Publikovat Váš výchozí profil v globální sociálním adresáři?"; +$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Skrýt Vaše kontaktní údaje a seznam přátel před návštěvníky ve Vašem výchozím profilu?"; +$a->strings["Hide profile details and all your messages from unknown viewers?"] = "Skrýt detaily profilu a všechny zprávy před neznámými uživateli?"; $a->strings["Profile is <strong>not published</strong>."] = "Profil <strong>není zveřejněn</strong>."; $a->strings["or"] = "nebo"; $a->strings["Your Identity Address is"] = "Vaše adresa identity je"; +$a->strings["Account Settings"] = "Nastavení účtu"; $a->strings["Export Personal Data"] = "Export osobních údajů"; +$a->strings["Password Settings"] = "Nastavení hesla"; +$a->strings["New Password:"] = "Nové heslo:"; +$a->strings["Confirm:"] = "Potvrďte:"; +$a->strings["Leave password fields blank unless changing"] = "Pokud nechcete změnit heslo, položku hesla nevyplňujte"; $a->strings["Basic Settings"] = "Základní nastavení"; $a->strings["Full Name:"] = "Celé jméno:"; $a->strings["Email Address:"] = "E-mailová adresa:"; $a->strings["Your Timezone:"] = "Vaše časové pásmo:"; $a->strings["Default Post Location:"] = "Výchozí umístění příspěvků:"; -$a->strings["Use Browser Location:"] = "Použijte prohlížeč Místo:"; -$a->strings["Display Theme:"] = "Zobrazit téma:"; +$a->strings["Use Browser Location:"] = "Používat umístění dle prohlížeče:"; +$a->strings["Display Theme:"] = "Vybrat grafickou šablonu:"; $a->strings["Security and Privacy Settings"] = "Nastavení zabezpečení a soukromí"; $a->strings["Maximum Friend Requests/Day:"] = "Maximální počet žádostí o přátelství za den:"; $a->strings["(to prevent spam abuse)"] = "(Aby se zabránilo spamu)"; -$a->strings["Allow friends to post to your profile page:"] = "Povolit přátelům příspěvky na Vaši profilovou stránku:"; -$a->strings["Automatically expire (delete) posts older than"] = "Automaticky smazat příspěvky starší než"; -$a->strings["days"] = "dnů"; -$a->strings["Notification Settings"] = "Nastavení notifikací"; -$a->strings["Send a notification email when:"] = "Posílat e-mailové upozornění když: "; -$a->strings["You receive an introduction"] = "Obdržíte žádost o propojení"; -$a->strings["Your introductions are confirmed"] = "Vaše žádosti jsou potvrzeny"; -$a->strings["Someone writes on your profile wall"] = "Někdo píše na Vaši profilovou stránku"; -$a->strings["Someone writes a followup comment"] = "Někdo píše následný komentář"; -$a->strings["You receive a private message"] = "Obdržel jste soukromou zprávu"; -$a->strings["Password Settings"] = "Nastavení hesla"; -$a->strings["Leave password fields blank unless changing"] = "Pokud nechcete změnit heslo, položku hesla nevyplňujte"; -$a->strings["New Password:"] = "Nové heslo:"; -$a->strings["Confirm:"] = "Potvrďte:"; -$a->strings["Advanced Page Settings"] = "Pokročilé nastavení stránky"; $a->strings["Default Post Permissions"] = "Výchozí oprávnění pro příspěvek"; $a->strings["(click to open/close)"] = "(Klikněte pro otevření/zavření)"; +$a->strings["Allow friends to post to your profile page:"] = "Povolit přátelům příspěvky na Vaši profilovou stránku:"; +$a->strings["Automatically expire posts after days:"] = "Po kolika dnech automaticky expirovat příspěvky:"; +$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Pokud je prázdné, příspěvky nebudou nikdy expirovat. Expirované příspěvky budou vymazány"; +$a->strings["Notification Settings"] = "Nastavení notifikací"; +$a->strings["Send a notification email when:"] = "Poslat notifikaci e-mailem, když"; +$a->strings["You receive an introduction"] = "obdržíte žádost o propojení"; +$a->strings["Your introductions are confirmed"] = "Vaše žádosti jsou potvrzeny"; +$a->strings["Someone writes on your profile wall"] = "někdo Vám napíše na Vaši profilovou stránku"; +$a->strings["Someone writes a followup comment"] = "někdo Vám napíše následný komentář"; +$a->strings["You receive a private message"] = "obdržíte soukromou zprávu"; $a->strings["Email/Mailbox Setup"] = "Nastavení e-mailu"; $a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Pokud chcete komunikovat pomocí této služby s Vašimi kontakty z e-mailu (volitelné), uveďte, jak se připojit k Vaší e-mailové schránce."; +$a->strings["Last successful email check:"] = "Poslední úspěšná kontrola e-mailu:"; +$a->strings["Email access is disabled on this site."] = "Přístup k elektronické poště je na tomto serveru zakázán."; $a->strings["IMAP server name:"] = "jméno IMAP serveru:"; $a->strings["IMAP port:"] = "IMAP port:"; -$a->strings["Security (TLS or SSL):"] = "Zabezpečení (TLS nebo SSL):"; +$a->strings["Security:"] = "Zabezpečení:"; +$a->strings["None"] = "Žádný"; $a->strings["Email login name:"] = "přihlašovací jméno k e-mailu:"; $a->strings["Email password:"] = "heslo k Vašemu e-mailu:"; -$a->strings["Reply-to address (Optional):"] = "Odpovědět na adresu (nepovinné):"; +$a->strings["Reply-to address:"] = "Odpovědět na adresu:"; $a->strings["Send public posts to all email contacts:"] = "Poslat veřejné příspěvky na všechny e-mailové kontakty:"; -$a->strings["Email access is disabled on this site."] = "Přístup k elektronické poště je na tomto serveru zakázán."; +$a->strings["Advanced Page Settings"] = "Pokročilé nastavení stránky"; $a->strings["Welcome back %s"] = "Vítejte zpět %s"; $a->strings["Manage Identities and/or Pages"] = "Správa identit a / nebo stránek"; $a->strings["(Toggle between different identities or community/group pages which share your account details.)"] = "(Přepínání mezi různými identitami nebo komunitními / skupinovými stránkami, které sdílejí Vaše detaily účtu.)"; $a->strings["Select an identity to manage: "] = "Vyberte identitu pro správu:"; -$a->strings["Normal View"] = "Normální zobrazení"; -$a->strings["New Item View"] = "Zobrazení nových položek"; +$a->strings["View Conversations"] = "Zobrazit konverzace"; +$a->strings["View New Items"] = "Zobrazit nové položky"; +$a->strings["View Any Items"] = "Zobrazit všechny položky"; +$a->strings["View Starred Items"] = "Zobrazit položky označené hvězdu"; $a->strings["Warning: This group contains %s member from an insecure network."] = array( 0 => "Upozornění: Tato skupina obsahuje %s člena z nezabezpečené sítě.", 1 => "Upozornění: Tato skupina obsahuje %s členy z nezabezpečené sítě.", @@ -346,9 +393,21 @@ $a->strings["Group: "] = "Skupina:"; $a->strings["Contact: "] = "Kontakt:"; $a->strings["Private messages to this person are at risk of public disclosure."] = "Soukromé zprávy této osobě jsou vystaveny riziku prozrazení."; $a->strings["Invalid contact."] = "Neplatný kontakt."; -$a->strings["Shared content is covered by the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."] = "Sdílený obsah je v souladu s <a href=\"http://creativecommons.org/licenses/by/3.0/\">Commons Creative 3.0</a> licencí."; -$a->strings["Private Notes"] = "Soukromé poznámky"; $a->strings["Save"] = "Uložit"; +$a->strings["Welcome to Friendika"] = "Vítejte na Friendika"; +$a->strings["New Member Checklist"] = "Seznam doporučení pro nového člena"; +$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = "Dovolujeme si Vám nabídnout některé tipy a odkazy, abychom Vám zpříjemnili práci se systémem Friendika. Kliknutím na libovolnou položku navštívit příslušnou stránku."; +$a->strings["On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = "Na stránce <em>Nastavení</em> - změnit výchozí heslo. Poznamenejte si také adresu své identity. To může být užitečné při navazování přátelství."; +$a->strings["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."] = "Prohlédněte si další nastavení, a to zejména nastavení soukromí. Nezveřejnění svého účtu v adresáři je jako mít nezveřejněné telefonní číslo. Obecně platí, že je lepší mít svůj účet zveřejněný, leda by všichni vaši potenciální přátelé věděli, jak vás přesně najít."; +$a->strings["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."] = "Nahrajte si svou profilovou fotku, pokud jste tak již neučinili. Studie ukázaly, že lidé se skutečnými fotografiemi mají desetkrát častěji přátele než lidé, kteří nemají."; +$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "Jestliže máte účet na Facebooku, povolte konektor na Facebook a bude možné (na přání) importovat všechny Vaš přátele na Facebooku a všechny Vaše konverzace."; +$a->strings["Enter your email access information on your Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "na stránce Nastavení zadejte informace pro přístup k Vaší e-mailové stránce, pokud si přejete importovat a komunikovat s přáteli nebo distribučními skupinami z Vaší e-mailové schránky"; +$a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "Upravit <strong>výchozí</strong> profil podle vašich představ. Prověřte nastavení pro skrytí Vašeho seznamu přátel a skrytí profilu před neznámými návštěvníky."; +$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."] = "Nastavte si nějaká veřejné klíčová slova pro výchozí profil, která popisují vaše zájmy. Friendika Vám může nalézt další lidi s podobnými zájmy a navrhnout přátelství."; +$a->strings["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 <em>Connect</em> dialog."] = "Stránka Kontakty je Vaším odrazovým můstkem k řízení přátelství a spojení s kamarády v jiných sítích. Obvykle zadáte jejich adresu nebo adresu URL do dialogu <em>Připojit</em>."; +$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = "Stránka Adresář Vám pomůže najít další lidi na tomto serveru nebo v jiných propojených serverech. Prostřednictvím odkazů <em>Připojení</em> nebo <em>Následovat</em> si prohlédněte jejich profilovou stránku. Uveďte svou vlastní adresu identity, je-li požadována."; +$a->strings["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."] = "Jakmile získáte nějaké přátele, uspořádejte si je do soukromých konverzačních skupin na postranním panelu vaší stránky Kontakty a pak můžete komunikovat s každou touto skupinu soukromě prostřednictvím stránky Síť."; +$a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "Na stránkách <strong>Nápověda</strong> naleznete nejen další podrobnosti o všech funkcích Friendika ale také další zdroje informací."; $a->strings["Item not available."] = "Položka není k dispozici."; $a->strings["Item was not found."] = "Položka nebyla nalezena."; $a->strings["Group created."] = "Skupina vytvořena."; @@ -366,11 +425,12 @@ $a->strings["Members"] = "Členové"; $a->strings["All Contacts"] = "Všechny kontakty"; $a->strings["Invalid profile identifier."] = "Neplatný identifikátor profilu."; $a->strings["Profile Visibility Editor"] = "Editor viditelnosti profilu "; -$a->strings["Profile"] = "Profil"; $a->strings["Visible To"] = "Viditelný pro"; $a->strings["All Contacts (with secure profile access)"] = "Všechny kontakty (se zabezpečeným přístupovým profilem )"; $a->strings["View Contacts"] = "Zobrazit kontakty"; $a->strings["No contacts."] = "Žádné kontakty."; +$a->strings["An invitation is required."] = "Pozvánka je vyžadována."; +$a->strings["Invitation could not be verified."] = "Pozvánka nemohla být ověřena."; $a->strings["Invalid OpenID url"] = "Neplatný odkaz OpenID"; $a->strings["Please enter the required information."] = "Zadejte prosím požadované informace."; $a->strings["Please use a shorter name."] = "Použijte prosím kratší jméno."; @@ -394,6 +454,8 @@ $a->strings["You may (optionally) fill in this form via OpenID by supplying your $a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Pokud nepoužíváte OpenID, nechte prosím toto pole prázdné a vyplňte zbylé položky."; $a->strings["Your OpenID (optional): "] = "Vaše OpenID (nepovinné):"; $a->strings["Include your profile in member directory?"] = "Uvést Váš profil v adresáři členů?"; +$a->strings["Membership on this site is by invitation only."] = "Členství na tomto webu je pouze na pozvání."; +$a->strings["Your invitation ID: "] = "Vaše pozvání ID:"; $a->strings["Registration"] = "Registrace"; $a->strings["Your Full Name (e.g. Joe Smith): "] = "Vaše celé jméno (např. Jan Novák):"; $a->strings["Your Email Address: "] = "Vaše e-mailová adresa:"; @@ -411,15 +473,14 @@ $a->strings["Bug reports and issues: please visit"] = "Pro hlášení chyb a ná $a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = "Návrhy, chválu, dary, atd. - prosím pošlete na e-mail \"Info\" na Friendika tečka com"; $a->strings["Installed plugins/addons/apps"] = "Nainstalované doplňky/aplikace"; $a->strings["No installed plugins/addons/apps"] = "Nejsou žádné nainstalované doplňky/aplikace"; -$a->strings["Please login."] = "Přihlaste se, prosím."; -$a->strings["Registration revoked for %s"] = "Registrace zrušena pro %s"; $a->strings["Account approved."] = "Účet schválen."; -$a->strings["[Embedded content - reload page to view]"] = "[Vložený obsah - obnovení stránky pro zobrazení]"; +$a->strings["Registration revoked for %s"] = "Registrace zrušena pro %s"; +$a->strings["Please login."] = "Přihlaste se, prosím."; $a->strings["Unable to locate original post."] = "Nelze nalézt původní příspěvek."; $a->strings["Empty post discarded."] = "Prázdný příspěvek odstraněn."; $a->strings["Wall Photos"] = "Fotografie na zdi"; $a->strings["noreply"] = "bez odpovědi"; -$a->strings["Administrator@"] = "Správce@"; +$a->strings["Administrator@"] = "Administrator@"; $a->strings["%s commented on an item at %s"] = "%s okomentoval položku v %s"; $a->strings["%s posted to your profile wall at %s"] = "%s přidal příspěvek na vaší profilovou zeď v %s"; $a->strings["System error. Post not saved."] = "Chyba systému. Příspěvek nebyl uložen."; @@ -427,7 +488,6 @@ $a->strings["This message was sent to you by %s, a member of the Friendika socia $a->strings["You may visit them online at %s"] = "Můžete je navštívit online na adrese %s"; $a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Pokud nechcete dostávat tyto zprávy, kontaktujte prosím odesilatele odpovědí na tento záznam."; $a->strings["%s posted an update."] = "%s poslal aktualizaci."; -$a->strings["Item not found."] = "Položka nenalezena."; $a->strings["Image uploaded but image cropping failed."] = "Obrázek byl odeslán, ale jeho oříznutí se nesdařilo."; $a->strings["Image size reduction [%s] failed."] = "Nepodařilo se snížit velikost obrázku [%s]."; $a->strings["Unable to process image"] = "Obrázek nelze zpracovat "; @@ -441,6 +501,7 @@ $a->strings["Crop Image"] = "Oříznout obrázek"; $a->strings["Please adjust the image cropping for optimum viewing."] = "Prosím, ořízněte tento obrázek pro optimální zobrazení."; $a->strings["Done Editing"] = "Editace dokončena"; $a->strings["Image uploaded successfully."] = "Obrázek byl úspěšně nahrán."; +$a->strings["No profile"] = "Žádný profil"; $a->strings["Remove My Account"] = "Odstranit můj účet"; $a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Tímto bude kompletně odstraněn váš účet. Jakmile bude účet odstraněn, nebude už možné ho obnovit."; $a->strings["Please enter your password for verification:"] = "Prosím, zadejte své heslo pro ověření:"; @@ -466,26 +527,114 @@ $a->strings["D, d M Y - g:i A"] = "D M R - g:i A"; $a->strings["Message not available."] = "Zpráva není k dispozici."; $a->strings["Delete message"] = "Smazat zprávu"; $a->strings["Send Reply"] = "Poslat odpověď"; -$a->strings["No profile"] = "Žádný profil"; +$a->strings["Site"] = "Web"; +$a->strings["Users"] = "Uživatelé"; +$a->strings["Plugins"] = "Pluginy"; +$a->strings["Update"] = "Aktualizace"; +$a->strings["Logs"] = "Logy"; +$a->strings["User registrations waiting for confirmation"] = "Registrace uživatele čeká na potvrzení"; +$a->strings["Item not found."] = "Položka nenalezena."; +$a->strings["Administration"] = "Administrace"; +$a->strings["Summary"] = "Shrnutí"; +$a->strings["Registered users"] = "Registrovaní uživatelé"; +$a->strings["Pending registrations"] = "Čekající registrace"; +$a->strings["Version"] = "Verze"; +$a->strings["Active plugins"] = "Aktivní pluginy"; +$a->strings["Site settings updated."] = "Nastavení webu aktualizováno."; +$a->strings["Closed"] = "Uzavřít"; +$a->strings["Requires approval"] = "Vyžaduje schválení"; +$a->strings["Open"] = "Otevřená"; +$a->strings["File upload"] = "Nahrání souborů"; +$a->strings["Policies"] = "Politiky"; +$a->strings["Advanced"] = "Pokročilé"; +$a->strings["Site name"] = "Název webu"; +$a->strings["Banner/Logo"] = "Banner/logo"; +$a->strings["System language"] = "Systémový jazyk"; +$a->strings["System theme"] = "Grafická šablona systému "; +$a->strings["Maximum image size"] = "Maximální velikost obrazu"; +$a->strings["Register policy"] = "Politika registrace"; +$a->strings["Register text"] = "Registrace textu"; +$a->strings["Allowed friend domains"] = "Povolené domény přátel"; +$a->strings["Allowed email domains"] = "Povolené e-mailové domény"; +$a->strings["Block public"] = "Blokovat veřejnost"; +$a->strings["Force publish"] = "Publikovat"; +$a->strings["Global directory update URL"] = "aktualizace URL adresy Globálního adresáře "; +$a->strings["Block multiple registrations"] = "Blokovat více registrací"; +$a->strings["OpenID support"] = "podpora OpenID"; +$a->strings["Gravatar support"] = "podpora Gravatar"; +$a->strings["Fullname check"] = "kontrola úplného jména"; +$a->strings["UTF-8 Regular expressions"] = "UTF-8 Regulární výrazy"; +$a->strings["Show Community Page"] = "Zobrazit stránku komunity"; +$a->strings["Enable OStatus support"] = "Zapnout podporu OStatus"; +$a->strings["Only allow Friendika contacts"] = "Povolit pouze Friendika kontakty "; +$a->strings["Verify SSL"] = "Ověřit SSL"; +$a->strings["Proxy user"] = "Proxy uživatel"; +$a->strings["Proxy URL"] = "Proxy URL adresa"; +$a->strings["Network timeout"] = "čas síťového spojení vypršelo (timeout)"; +$a->strings["%s user blocked"] = array( + 0 => "%s uživatel zablokován", + 1 => "%s uživatelů zablokováno / odblokováno", + 2 => "%s uživatelů zablokováno / odblokováno", +); +$a->strings["%s user deleted"] = array( + 0 => "%s uživatel smazán", + 1 => "%s uživatelů smazáno", + 2 => "%s uživatelů smazáno", +); +$a->strings["User '%s' deleted"] = "Uživatel '%s' smazán"; +$a->strings["User '%s' unblocked"] = "Uživatel '%s' odblokován"; +$a->strings["User '%s' blocked"] = "Uživatel '%s' blokován"; +$a->strings["select all"] = "Vybrat vše"; +$a->strings["User registrations waiting for confirm"] = "Registrace uživatele čeká na potvrzení"; +$a->strings["Request date"] = "Datum žádosti"; +$a->strings["Email"] = "E-mail"; +$a->strings["No registrations."] = "Žádné registrace."; +$a->strings["Deny"] = "Odmítnout"; +$a->strings["Block"] = "Blokovat"; +$a->strings["Unblock"] = "Odblokovat"; +$a->strings["Register date"] = "Datum registrace"; +$a->strings["Last login"] = "Datum posledního přihlášení"; +$a->strings["Last item"] = "Poslední položka"; +$a->strings["Account"] = "Účet"; +$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Vybraní uživatelé budou smazáni!\\n\\n Vše, co tito uživatelé na těchto stránkách vytvořili, bude trvale odstraněno!\\n\\n Opravdu pokračovat?"; +$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Uživatel {0} bude smazán!\\n\\n Vše, co tento uživatel na těchto stránkách vytvořil, bude trvale odstraněno!\\n\\n Opravdu pokračovat?"; +$a->strings["Plugin %s disabled."] = "Plugin %s zakázán."; +$a->strings["Plugin %s enabled."] = "Plugin %s povolen."; +$a->strings["Disable"] = "Zakázat"; +$a->strings["Enable"] = "Povolit"; +$a->strings["Toggle"] = "Přepnout"; +$a->strings["Settings"] = "Nastavení"; +$a->strings["Log settings updated."] = "Nastavení protokolu aktualizováno."; +$a->strings["Clear"] = "Vyčistit"; +$a->strings["Debugging"] = "Ladění"; +$a->strings["Log file"] = "Soubor s logem"; +$a->strings["Must be writable by web server. Relative to your Friendika index.php."] = "Webový server musí mít práva zápisu . Relativní k index.php Friendika."; +$a->strings["Log level"] = "Úroveň auditu"; +$a->strings["Close"] = "Uzavřená"; +$a->strings["FTP Host"] = "Hostitel FTP"; +$a->strings["FTP Path"] = "Cesta FTP"; +$a->strings["FTP User"] = "FTP uživatel"; +$a->strings["FTP Password"] = "FTP heslo"; $a->strings["Access to this profile has been restricted."] = "Přístup na tento profil byl omezen."; -$a->strings["Status"] = "Stav"; -$a->strings["Photos"] = "Fotografie"; +$a->strings["Tips for New Members"] = "Tipy pro nové členy"; $a->strings["Login failed."] = "Přihlášení se nezdařilo."; -$a->strings["Welcome "] = "Vítejte"; +$a->strings["Welcome "] = "Vítejte "; $a->strings["Please upload a profile photo."] = "Prosím nahrejte profilovou fotografii"; -$a->strings["Welcome back "] = "Vítejte zpět"; -$a->strings["The profile address specified does not provide adequate information."] = "Uvedená adresa profilu neposkytuje dostatečné informace."; +$a->strings["Welcome back "] = "Vítejte zpět "; +$a->strings["This site is not configured to allow communications with other networks."] = "Tento web není nakonfigurován tak, aby umožňoval komunikaci s ostatními sítěmi."; $a->strings["No compatible communication protocols or feeds were discovered."] = "Nenalezen žádný kompatibilní komunikační protokol nebo kanál."; +$a->strings["The profile address specified does not provide adequate information."] = "Uvedená adresa profilu neposkytuje dostatečné informace."; $a->strings["An author or name was not found."] = "Autor nebo jméno nenalezeno"; $a->strings["No browser URL could be matched to this address."] = "Této adrese neodpovídá žádné URL prohlížeče."; +$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Zadaná adresa profilu patří do sítě, která byla na tomto serveru zakázána."; $a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Omezený profil. Tato osoba nebude schopna od Vás přijímat přímé / osobní sdělení."; $a->strings["Unable to retrieve contact information."] = "Nepodařilo se získat kontaktní informace."; $a->strings["following"] = "následující"; $a->strings["Item has been removed."] = "Položka byla odstraněna."; $a->strings["New mail received at "] = "Přišel nový e-mail v"; $a->strings["Applications"] = "Aplikace"; +$a->strings["No installed applications."] = "Žádné nainstalované aplikace."; $a->strings["Search"] = "Vyhledávání"; -$a->strings["No results."] = "Žádné výsledky."; $a->strings["Profile not found."] = "Profil nenalezen"; $a->strings["Profile Name is required."] = "Jméno profilu je povinné."; $a->strings["Profile updated."] = "Profil aktualizován."; @@ -494,7 +643,6 @@ $a->strings["Profile-"] = "Profil-"; $a->strings["New profile created."] = "Nový profil vytvořen."; $a->strings["Profile unavailable to clone."] = "Profil není možné naklonovat."; $a->strings["Hide your contact/friend list from viewers of this profile?"] = "Skrýt u tohoto profilu vaše kontakty / seznam přátel před před dalšími uživateli zobrazující si tento profil?"; -$a->strings["Hide profile details and all your messages from unknown viewers?"] = "Skrýt detaily profilu a všechny zprávy před neznámými uživateli?"; $a->strings["Edit Profile Details"] = "Upravit podrobnosti profilu "; $a->strings["View this profile"] = "Zobrazit tento profil"; $a->strings["Create a new profile using these settings"] = "Vytvořit nový profil pomocí tohoto nastavení"; @@ -504,7 +652,7 @@ $a->strings["Profile Name:"] = "Jméno profilu:"; $a->strings["Your Full Name:"] = "Vaše celé jméno:"; $a->strings["Title/Description:"] = "Název / Popis:"; $a->strings["Your Gender:"] = "Vaše pohlaví:"; -$a->strings["Birthday (y/m/d):"] = "Narozeniny (rok/měsíc/den):"; +$a->strings["Birthday (%s):"] = "Narozeniny uživatele (%s):"; $a->strings["Street Address:"] = "Ulice:"; $a->strings["Locality/City:"] = "Město:"; $a->strings["Postal/Zip Code:"] = "PSČ:"; @@ -538,7 +686,7 @@ $a->strings["Profiles"] = "Profily"; $a->strings["Change profile photo"] = "Změnit profilovou fotografii"; $a->strings["Create New Profile"] = "Vytvořit nový profil"; $a->strings["Profile Image"] = "Profilový obrázek"; -$a->strings["Visible to everybody"] = "Viditelné pro všechny"; +$a->strings["visible to everybody"] = "viditelné pro všechny"; $a->strings["Edit visibility"] = "Upravit viditelnost"; $a->strings["Global Directory"] = "Globální adresář"; $a->strings["Normal site view"] = "Normální zobrazení stránky"; @@ -554,10 +702,12 @@ $a->strings["%d message sent."] = array( 1 => "%d zprávy odeslány.", 2 => "%d zprávy odeslány.", ); +$a->strings["You have no more invitations available"] = "Nemáte k dispozici žádné další pozvánky"; $a->strings["Send invitations"] = "Poslat pozvánky"; $a->strings["Enter email addresses, one per line:"] = "Zadejte e-mailové adresy, jednu na řádek:"; $a->strings["Please join my social network on %s"] = "Prosím, připojte se do mé sociální sítě na %s"; $a->strings["To accept this invitation, please visit:"] = "Chcete-li toto pozvání přijmout, navštivte prosím:"; +$a->strings["You will need to supply this invitation code: \$invite_code"] = "Budete muset zadat kód této pozvánky: \$invite_code"; $a->strings["Once you have registered, please connect with me via my profile page at:"] = "Jakmile se zaregistrujete, prosím spojte se se mnou přes mou profilovu stránku na:"; $a->strings["Response from remote site was not understood."] = "Odpověď ze vzdáleného serveru nebyla srozumitelná."; $a->strings["Unexpected response from remote site: "] = "Neočekávaná odpověď od vzdáleného serveru:"; @@ -582,14 +732,19 @@ $a->strings["Facebook Connect"] = "Facebook připojen"; $a->strings["Install Facebook connector for this account."] = "Nainstalovat pro tento účet Facebook konektor."; $a->strings["Remove Facebook connector"] = "Odstranit konektor na Facebook"; $a->strings["Post to Facebook by default"] = "Standardně posílat příspěvky na Facebook"; +$a->strings["Link all your Facebook friends and conversations"] = "Připojit všechny své přátele na Facebooku a konverzace"; +$a->strings["Warning: Your Facebook privacy settings can not be imported."] = "Upozornění: nastavení ochrany osobních údajů na Facebooku nelze importovat."; +$a->strings["Linked Facebook items <strong>may</strong> be publicly visible, depending on your privacy settings for this website/account."] = "Propojené položky z Facebook <strong>mohou</strong> být veřejně viditelné, v závislosti na nastavení ochrany osobních údajů pro tuto webovou stránku/účet."; $a->strings["Facebook"] = "Facebook"; $a->strings["Facebook Connector Settings"] = "Nastavení Facebook konektoru "; $a->strings["Post to Facebook"] = "Přidat příspěvek na Facebook"; $a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = "Příspěvek na Facebook zrušen kvůli konfliktu přístupových práv mezi sítěmi."; $a->strings["Image: "] = "Obrázek: "; $a->strings["View on Friendika"] = "Pohled na Friendiku"; -$a->strings["Widgets key: "] = "Widgets klíč:"; +$a->strings["Facebook post failed. Queued for retry."] = "Zaslání příspěvku na Facebook selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání."; $a->strings["Generate new key"] = "Generovat nové klíče"; +$a->strings["Widgets key"] = "Widgety klíč"; +$a->strings["Widgets available"] = "Widgety k dispozici"; $a->strings["Connect on Friendika!"] = "Spojit se na Friendice!"; $a->strings["Three Dimensional Tic-Tac-Toe"] = "Trojrozměrné Tic-Tac-Toe"; $a->strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe"; @@ -605,28 +760,32 @@ $a->strings["\"Cat\" game!"] = "\"Kočičí\" hra!"; $a->strings["I won!"] = "Vyhrál jsem!"; $a->strings["Randplace Settings"] = "Randplace Nastavení"; $a->strings["Enable Randplace Plugin"] = "Povolit Randplace Plugin"; -$a->strings["Select files to upload: "] = "Vyberte soubory k nahrání:"; -$a->strings["Use the following controls only if the Java uploader [above] fails to launch."] = "Následující ovládací prvky použijte pouze v případě, že se nezdaří hru spustit s pomocí Java uploaderu [výše]."; $a->strings["Upload a file"] = "Nahrát soubor"; $a->strings["Drop files here to upload"] = "Přeneste sem soubory k nahrání"; $a->strings["Failed"] = "Neúspěch"; $a->strings["No files were uploaded."] = "Žádné soubory nebyly nahrány."; $a->strings["Uploaded file is empty"] = "Nahraný soubor je prázdný"; -$a->strings["Uploaded file is too large"] = "Nahraný soubor je příliš velký"; $a->strings["File has an invalid extension, it should be one of "] = "Soubor má neplatnou příponu, ta by měla být jednou z"; $a->strings["Upload was cancelled, or server error encountered"] = "Nahrávání bylo zrušeno nebo došlo k chybě na serveru"; +$a->strings["Impressum"] = "Impressum"; +$a->strings["Site Owner"] = "Vlastník webu"; +$a->strings["Email Address"] = "E-mailová adresa"; +$a->strings["Postal Address"] = "Poštovní adresa"; +$a->strings["The impressum addon needs to be configured!<br />Please add at least the <tt>owner</tt> variable to your config file. For other variables please refer to the README file of the addon."] = "Doplněk Impressum musí být nakonfigurován!<br/>Prosím, přidejte alespoň proměnnou <tt>owner</tt> do konfiguračního souboru. Pro nastavení ostatních proměnných se seznamte s nápovědou v souboru README tohoto doplňku."; +$a->strings["Site Owners Profile"] = "Profil majitele webu"; +$a->strings["Notes"] = "Poznámky"; $a->strings["OEmbed settings updated"] = "OEmbed nastavení aktualizováno"; -$a->strings["Use OEmbed for YouTube videos: "] = "Použít OEmbed pro videa YouTube:"; +$a->strings["Use OEmbed for YouTube videos"] = "Použití OEmbed pro videa na YouTube"; $a->strings["URL to embed:"] = "URL adresa k vložení:"; $a->strings["Post to StatusNet"] = "Poslat příspěvek na StatusNet"; -$a->strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Obraťte se na správce webu.<br />Poskytnutý odkaz na API není platný."; +$a->strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Obraťte se na administratora webu.<br />Poskytnutý odkaz na API není platný."; $a->strings["We could not contact the StatusNet API with the Path you entered."] = "S cestou, kterou jste zadali, se nebylo možné spojit s API StatusNetu."; $a->strings["StatusNet settings updated."] = "Nastavení StatusNetu aktualizováno."; $a->strings["StatusNet Posting Settings"] = "Nastavení zasílání příspěvků na StatusNet "; $a->strings["Globally Available StatusNet OAuthKeys"] = "Globálně dostupné StatusNet OAuth klíče"; $a->strings["There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance (see below)."] = "Jsou dostupné přednastavené OAuth páry klíčů pro některé servery StatusNetu. Pokud používáte některý z nich, použijte toto přihlášení. Pokud ne, neváhejte se připojit k jiné instanci StatusNet (viz níže)."; $a->strings["Provide your own OAuth Credentials"] = "Uveďte své vlastní OAuth přihlašovací údaje"; -$a->strings["No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation."] = "Nenalezen žádný consumer pár klíčů pro StatusNet. Zaregistrujte svůj Friendika účet jako desktopový klient na svém účtu StatusNetu, zkopírujte níže consumer pár klíčů a zadejte API base root.<br />Než si zaregistrujete svůj vlastní pár klíčů OAuth, zjistěte si od správce, zda-li už náhodou na tento Friendika server nepřidal pár klíčů pro vámi požadovanou instalaci StatusNetu."; +$a->strings["No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation."] = "Nenalezen žádný consumer pár klíčů pro StatusNet. Zaregistrujte svůj Friendika účet jako desktopový klient na svém účtu StatusNetu, zkopírujte níže consumer pár klíčů a zadejte API base root.<br />Než si zaregistrujete svůj vlastní pár klíčů OAuth, zjistěte si od administrátora, zda-li už náhodou na tento Friendika server nepřidal pár klíčů pro vámi požadovanou instalaci StatusNetu."; $a->strings["OAuth Consumer Key"] = "OAuth Consumer Key"; $a->strings["OAuth Consumer Secret"] = "OAuth Consumer Secret"; $a->strings["Base API Path (remember the trailing /)"] = "Cesta k Base API (nezapomeňte na koncový /)"; @@ -637,18 +796,28 @@ $a->strings["Cancel Connection Process"] = "Zrušit připojování"; $a->strings["Current StatusNet API is"] = "Aktuální StatusNet API je"; $a->strings["Cancel StatusNet Connection"] = "Zrušit StatusNet připojení"; $a->strings["Currently connected to: "] = "V současné době připojen k:"; -$a->strings["If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account."] = "Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky budou zveřejněny na příslušném účtu StatusNetu."; +$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky mohou být zaslány na související StatusNet účet. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku."; $a->strings["Allow posting to StatusNet"] = "Povolit zasílání příspěvků na StatusNet"; $a->strings["Send public postings to StatusNet by default"] = "Standardně poslílat veřejné příspěvky na StatusNet"; $a->strings["Clear OAuth configuration"] = "Vymazat konfiguraci OAuth"; +$a->strings["API URL"] = "API URL"; +$a->strings["Consumer Secret"] = "Consumer Secret"; +$a->strings["Consumer Key"] = "Consumer Key"; +$a->strings["Piwik Base URL"] = "Piwik Base adresa URL"; +$a->strings["Site ID"] = "ID webu"; +$a->strings["Show opt-out cookie link?"] = "Zobrazit odkaz opt-out cookie?"; $a->strings["Post to Twitter"] = "Poslat příspěvek na Twitter"; +$a->strings["Twitter settings updated."] = "Nastavení Twitteru aktualizováno."; $a->strings["Twitter Posting Settings"] = "Nastavení zasílání příspěvků na Twitter "; -$a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na správce webu."; +$a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na administrátora webu."; $a->strings["At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "Na tomto Friendika serveru je Twitter plugin povolen, ale ještě nemáte svůj účet připojen ke svému Twitter účtu. Chcete-li tak učinit, klepnutím na tlačítko níže získejte PIN z Twitteru, který musíte zkopírovat do vstupního pole níže a odešlete formulář. Pouze Vaše <strong>veřejné</strong> příspěvky budou zveřejněny na Twitteru."; $a->strings["Log in with Twitter"] = "Přihlásit se s Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Zkopírujte sem PIN z Twitteru"; -$a->strings["If enabled all your <strong>public</strong> postings will be posted to the associated Twitter account as well."] = "Je-li povoleno, všechny <strong>veřejné</strong> příspěvky budou zároveň zveřejněny na příslušný Twitter účet."; -$a->strings["Send public postings to Twitter"] = "Poslat veřejné příspěvky na Twitter"; +$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky mohou být zaslány na související Twitter účet. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku."; +$a->strings["Allow posting to Twitter"] = "Povolit odesílání na Twitter"; +$a->strings["Send public postings to Twitter by default"] = "Defaultně zasílat veřejné komentáře na Twitter"; +$a->strings["Consumer key"] = "Consumer key"; +$a->strings["Consumer secret"] = "Consumer secret"; $a->strings["Gender:"] = "Pohlaví:"; $a->strings["Birthday:"] = "Narozeniny:"; $a->strings["j F, Y"] = "j F, Y"; @@ -732,78 +901,9 @@ $a->strings["Uncertain"] = "Nejistý"; $a->strings["Complicated"] = "Komplikovaný"; $a->strings["Don't care"] = "Nezajímá"; $a->strings["Ask me"] = "Zeptej se mě"; -$a->strings["Embedding disabled"] = "Vkládání zakázáno"; -$a->strings["Create a new group"] = "Vytvořit novou skupinu"; -$a->strings["Everybody"] = "Všichni"; -$a->strings["Logout"] = "Odhlásit se"; -$a->strings["Login"] = "Přihlásit se"; -$a->strings["Home"] = "Domů"; -$a->strings["Apps"] = "Aplikace"; -$a->strings["Directory"] = "Adresář"; -$a->strings["Network"] = "Síť"; -$a->strings["Notifications"] = "Upozornění"; -$a->strings["Manage"] = "Spravovat"; -$a->strings["Settings"] = "Nastavení"; -$a->strings["Logged out."] = "Odhlášen."; -$a->strings["Miscellaneous"] = "Různé"; -$a->strings["less than a second ago"] = "méně než před sekundou"; -$a->strings["year"] = "rok"; -$a->strings["years"] = "let"; -$a->strings["month"] = "měsíc"; -$a->strings["months"] = "měsíců"; -$a->strings["week"] = "týden"; -$a->strings["weeks"] = "týdny"; -$a->strings["day"] = "den"; -$a->strings["hour"] = "hodina"; -$a->strings["hours"] = "hodin"; -$a->strings["minute"] = "minuta"; -$a->strings["minutes"] = "minut"; -$a->strings["second"] = "sekunda"; -$a->strings["seconds"] = "sekund"; -$a->strings[" ago"] = "před"; -$a->strings["From: "] = "Od:"; -$a->strings["Image/photo"] = "Obrázek/fotografie"; -$a->strings["Cannot locate DNS info for database server '%s'"] = "Nelze nalézt záznam v DNS pro databázový server '%s'"; -$a->strings["Visible To:"] = "Viditelné pro:"; -$a->strings["everybody"] = "Žádost o připojení selhala nebo byla zrušena."; -$a->strings["Groups"] = "Skupiny"; -$a->strings["Except For:"] = "S výjimkou:"; -$a->strings["(no subject)"] = "(Bez předmětu)"; -$a->strings["You have a new follower at "] = "Máte nového následovníka na"; -$a->strings["View %s's profile"] = "Zobrazit %s profilu"; -$a->strings["View in context"] = "Pohled v kontextu"; -$a->strings["See more posts like this"] = "Zobrazit více podobných příspěvků"; -$a->strings["See all %d comments"] = "Zobrazit všechny komentáře %d"; -$a->strings["to"] = "pro"; -$a->strings["Wall-to-Wall"] = "Zeď-na-Zeď"; -$a->strings["via Wall-To-Wall:"] = "přes Zeď-na-Zeď "; -$a->strings["View status"] = "Zobrazit stav"; -$a->strings["View profile"] = "Zobrazit profil"; -$a->strings["View photos"] = "Zobrazit fotografie"; -$a->strings["View recent"] = "Zobrazit poslední"; -$a->strings["Send PM"] = "Poslat PM"; -$a->strings["%s likes this."] = "%s se to líbí."; -$a->strings["%s doesn't like this."] = "%s se to nelíbí."; -$a->strings["<span %1\$s>%2\$d people</span> like this."] = "<span %1\$s>%2\$d lidem</span> se to líbí."; -$a->strings["<span %1\$s>%2\$d people</span> don't like this."] = "<span %1\$s>%2\$d lidem</span> se to nelíbí."; -$a->strings["and"] = "a"; -$a->strings[", and %d other people"] = ", a %d dalších lidí"; -$a->strings["%s like this."] = "%s se to líbí."; -$a->strings["%s don't like this."] = "%s se to nelíbí."; -$a->strings["Visible to <strong>everybody</strong>"] = "Viditelné pro <strong>všechny</strong>"; -$a->strings["Please enter a YouTube link:"] = "Prosím zadejte odkaz na YouTube:"; -$a->strings["Please enter a video(.ogg) link/URL:"] = "Prosím, zadejte odkaz na video (ogg.):"; -$a->strings["Please enter an audio(.ogg) link/URL:"] = "Prosím, zadejte odkaz na audio (ogg.):"; -$a->strings["Where are you right now?"] = "Kde právě jste?"; -$a->strings["Enter a title for this item"] = "Zadejte titulek pro tuto položku"; -$a->strings["Set title"] = "Nastavit titulek"; -$a->strings["Delete this item?"] = "Odstranit tuto položku?"; -$a->strings["Create a New Account"] = "Vytvořit nový účet"; -$a->strings["Nickname or Email address: "] = "Přezdívka nebo e-mailová adresa:"; -$a->strings["Password: "] = "Heslo: "; -$a->strings["Nickname/Email/OpenID: "] = "Přezdívka/Email/OpenID: "; -$a->strings["Password (if not OpenID): "] = "Heslo (pokud se nepoužívá OpenID):"; -$a->strings["Forgot your password?"] = "Zapomněli jste své heslo?"; +$a->strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A"; +$a->strings["Starts:"] = "Začíná:"; +$a->strings["Finishes:"] = "Končí:"; $a->strings["prev"] = "předchozí"; $a->strings["first"] = "první"; $a->strings["last"] = "poslední"; @@ -814,10 +914,6 @@ $a->strings["%d Contact"] = array( 1 => "%d kontaktů", 2 => "%d kontaktů", ); -$a->strings["Connect"] = "Spojit"; -$a->strings["Location:"] = "Místo:"; -$a->strings[", "] = ", "; -$a->strings["Status:"] = "Status:"; $a->strings["Monday"] = "Pondělí"; $a->strings["Tuesday"] = "Úterý"; $a->strings["Wednesday"] = "Středa"; @@ -837,12 +933,111 @@ $a->strings["September"] = "Září"; $a->strings["October"] = "Října"; $a->strings["November"] = "Listopadu"; $a->strings["December"] = "Prosince"; +$a->strings["bytes"] = "bytů"; +$a->strings["Select an alternate language"] = "Vyběr alternativního jazyka"; +$a->strings["Sharing notification from Diaspora network"] = "Sdílení oznámení ze sítě Diaspora"; +$a->strings["Embedding disabled"] = "Vkládání zakázáno"; +$a->strings["Create a new group"] = "Vytvořit novou skupinu"; +$a->strings["Everybody"] = "Všichni"; +$a->strings["Logout"] = "Odhlásit se"; +$a->strings["End this session"] = "Konec této relace"; +$a->strings["Login"] = "Přihlásit se"; +$a->strings["Sign in"] = "Přihlásit se"; +$a->strings["Home"] = "Domů"; +$a->strings["Home Page"] = "Domácí stránka"; +$a->strings["Create an account"] = "Vytvořit účet"; +$a->strings["Help and documentation"] = "Nápověda a dokumentace"; +$a->strings["Apps"] = "Aplikace"; +$a->strings["Addon applications, utilities, games"] = "Doplňkové aplikace, nástroje, hry"; +$a->strings["Search site content"] = "Hledání na stránkách tohoto webu"; +$a->strings["Conversations on this site"] = "Konverzace na tomto webu"; +$a->strings["Directory"] = "Adresář"; +$a->strings["People directory"] = "Adresář"; +$a->strings["Network"] = "Síť"; +$a->strings["Conversations from your friends"] = "Konverzace od Vašich přátel"; +$a->strings["Your posts and conversations"] = "Vaše příspěvky a konverzace"; +$a->strings["Notifications"] = "Upozornění"; +$a->strings["Friend requests"] = "Požadavky přátelství"; +$a->strings["Private mail"] = "Soukromá pošta"; +$a->strings["Manage"] = "Spravovat"; +$a->strings["Manage other pages"] = "Spravovat jiné stránky"; +$a->strings["Manage/edit profiles"] = "Spravovat/upravit profily"; +$a->strings["Manage/edit friends and contacts"] = "Spravovat/upravit přátelé a kontakty"; +$a->strings["Admin"] = "Administrace"; +$a->strings["Site setup and configuration"] = "Nastavení webu a konfigurace"; +$a->strings["Logged out."] = "Odhlášen."; +$a->strings["Miscellaneous"] = "Různé"; +$a->strings["year"] = "rok"; +$a->strings["month"] = "měsíc"; +$a->strings["day"] = "den"; +$a->strings["never"] = "nikdy"; +$a->strings["less than a second ago"] = "méně než před sekundou"; +$a->strings["years"] = "let"; +$a->strings["months"] = "měsíců"; +$a->strings["week"] = "týden"; +$a->strings["weeks"] = "týdny"; +$a->strings["days"] = "dnů"; +$a->strings["hour"] = "hodina"; +$a->strings["hours"] = "hodin"; +$a->strings["minute"] = "minuta"; +$a->strings["minutes"] = "minut"; +$a->strings["second"] = "sekunda"; +$a->strings["seconds"] = "sekund"; +$a->strings[" ago"] = " nazpět"; +$a->strings["From: "] = "Od:"; +$a->strings["Image/photo"] = "Obrázek/fotografie"; +$a->strings["Cannot locate DNS info for database server '%s'"] = "Nelze nalézt záznam v DNS pro databázový server '%s'"; +$a->strings["Visible to everybody"] = "Viditelné pro všechny"; +$a->strings["show"] = "zobrazit"; +$a->strings["don't show"] = "nikdy nezobrazit"; +$a->strings["(no subject)"] = "(Bez předmětu)"; +$a->strings["You have a new follower at "] = "Máte nového následovníka na"; +$a->strings["event"] = "událost"; +$a->strings["View %s's profile"] = "Zobrazit %s profilu"; +$a->strings["%s from %s"] = "%s od %s"; +$a->strings["View in context"] = "Pohled v kontextu"; +$a->strings["See more posts like this"] = "Zobrazit více podobných příspěvků"; +$a->strings["See all %d comments"] = "Zobrazit všechny komentáře %d"; +$a->strings["Select"] = "Vybrat"; +$a->strings["toggle star status"] = "přepnout hvězdu"; +$a->strings["to"] = "pro"; +$a->strings["Wall-to-Wall"] = "Zeď-na-Zeď"; +$a->strings["via Wall-To-Wall:"] = "přes Zeď-na-Zeď "; +$a->strings["Delete Selected Items"] = "Smazat vybrané položky"; +$a->strings["View status"] = "Zobrazit stav"; +$a->strings["View profile"] = "Zobrazit profil"; +$a->strings["View photos"] = "Zobrazit fotografie"; +$a->strings["View recent"] = "Zobrazit poslední"; +$a->strings["Send PM"] = "Poslat soukromou zprávu"; +$a->strings["%s likes this."] = "%s se to líbí."; +$a->strings["%s doesn't like this."] = "%s se to nelíbí."; +$a->strings["<span %1\$s>%2\$d people</span> like this."] = "<span %1\$s>%2\$d lidem</span> se to líbí."; +$a->strings["<span %1\$s>%2\$d people</span> don't like this."] = "<span %1\$s>%2\$d lidem</span> se to nelíbí."; +$a->strings["and"] = "a"; +$a->strings[", and %d other people"] = ", a %d dalších lidí"; +$a->strings["%s like this."] = "%s se to líbí."; +$a->strings["%s don't like this."] = "%s se to nelíbí."; +$a->strings["Visible to <strong>everybody</strong>"] = "Viditelné pro <strong>všechny</strong>"; +$a->strings["Please enter a YouTube link:"] = "Prosím zadejte odkaz na YouTube:"; +$a->strings["Please enter a video(.ogg) link/URL:"] = "Prosím, zadejte odkaz na video (ogg.):"; +$a->strings["Please enter an audio(.ogg) link/URL:"] = "Prosím, zadejte odkaz na audio (ogg.):"; +$a->strings["Where are you right now?"] = "Kde právě jste?"; +$a->strings["Enter a title for this item"] = "Zadejte titulek pro tuto položku"; +$a->strings["Set title"] = "Nastavit titulek"; +$a->strings["Delete this item?"] = "Odstranit tuto položku?"; +$a->strings["Create a New Account"] = "Vytvořit nový účet"; +$a->strings["Nickname or Email address: "] = "Přezdívka nebo e-mailová adresa:"; +$a->strings["Password: "] = "Heslo: "; +$a->strings["Nickname/Email/OpenID: "] = "Přezdívka/E-mail/OpenID: "; +$a->strings["Password (if not OpenID): "] = "Heslo (pokud se nepoužívá OpenID):"; +$a->strings["Forgot your password?"] = "Zapomněli jste své heslo?"; +$a->strings["Connect"] = "Spojit"; +$a->strings[", "] = ", "; +$a->strings["Status:"] = "Status:"; $a->strings["g A l F d"] = "g A l F d"; $a->strings["Birthday Reminders"] = "Připomínka narozenin"; $a->strings["Birthdays this week:"] = "Narozeniny tento týden:"; $a->strings["(Adjusted for local time)"] = "(Upraveno pro místní čas)"; $a->strings["[today]"] = "[Dnes]"; -$a->strings["bytes"] = "bytů"; -$a->strings["link to source"] = "odkaz na zdroj"; $a->strings["Not Found"] = "Nenalezen"; $a->strings["Page not found."] = "Stránka nenalezena"; diff --git a/view/de/messages.po b/view/de/messages.po index aac565b217..3ff63cbb39 100644 --- a/view/de/messages.po +++ b/view/de/messages.po @@ -2,15 +2,18 @@ # Copyright (C) 2010, 2011 Mike Macgirvin # This file is distributed under the same license as the Friendika package. # -# <tobias.diekershoff@gmx.net>, 2011. +# Translators: # bavatar <tobias.diekershoff@gmx.net>, 2011. +# Erkan Yilmaz <erkan77@gmail.com>, 2011. +# <hzuehl@phone-talk.de>, 2011. +# <tobias.diekershoff@gmx.net>, 2011. msgid "" msgstr "" "Project-Id-Version: friendika\n" "Report-Msgid-Bugs-To: http://bugs.friendika.com/\n" "POT-Creation-Date: 2011-08-14 21:17-0700\n" -"PO-Revision-Date: 2011-08-18 08:02+0000\n" -"Last-Translator: bavatar <tobias.diekershoff@gmx.net>\n" +"PO-Revision-Date: 2011-09-26 17:08+0000\n" +"Last-Translator: hauke <hzuehl@phone-talk.de>\n" "Language-Team: German (http://www.transifex.net/projects/p/friendika/team/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -142,7 +145,7 @@ msgstr "Die Datei ist größer als das erlaubte Limit von %d" #: ../../mod/wall_attach.php:87 ../../mod/wall_attach.php:98 msgid "File upload failed." -msgstr "Upload der Datei fehlgeschlagen." +msgstr "Hochladen der Datei fehlgeschlagen." #: ../../mod/fsuggest.php:63 msgid "Friend suggestion sent." @@ -290,7 +293,7 @@ msgstr "jeder" #: ../../mod/photos.php:132 msgid "Contact information unavailable" -msgstr "Kontakt Informationen nicht verfügbar" +msgstr "Kontaktinformationen nicht verfügbar" #: ../../mod/photos.php:143 ../../mod/photos.php:577 ../../mod/photos.php:926 #: ../../mod/photos.php:941 ../../mod/register.php:316 @@ -356,7 +359,7 @@ msgstr "Keine Bilder ausgewählt" #: ../../mod/photos.php:820 msgid "Access to this item is restricted." -msgstr "Zugriff zu diesem Eintrag wurde eingeschrängt." +msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt." #: ../../mod/photos.php:884 msgid "Upload Photos" @@ -465,7 +468,7 @@ msgstr "Löschen" #: ../../mod/photos.php:1349 msgid "Recent Photos" -msgstr "Neuste Fotos" +msgstr "Neueste Fotos" #: ../../mod/photos.php:1353 msgid "Upload New Photos" @@ -573,7 +576,7 @@ msgstr "Diese Vorstellung wurde bereits abgeschlossen." #: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:351 msgid "Profile location is not valid or does not contain profile information." msgstr "" -"Profil Adresse ist ungültig oder stellt einige Profildaten nicht zur " +"Profiladresse ist ungültig oder stellt einige Profildaten nicht zur " "Verfügung." #: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356 @@ -620,7 +623,7 @@ msgstr "Maßnahmen zum Spamschutz wurden ergriffen." #: ../../mod/dfrn_request.php:247 msgid "Friends are advised to please try again in 24 hours." -msgstr "Freunde sind angehalten es in 24 Stunden erneut zu versuchen." +msgstr "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen." #: ../../mod/dfrn_request.php:277 msgid "Invalid locator" @@ -628,7 +631,7 @@ msgstr "Ungültiger Locator" #: ../../mod/dfrn_request.php:296 msgid "Unable to resolve your name at the provided location." -msgstr "Unable to resolve your name at the provided location." +msgstr "Konnte deinen Namen an der angegebenen Stelle nicht finden." #: ../../mod/dfrn_request.php:309 msgid "You have already introduced yourself here." @@ -657,7 +660,7 @@ msgstr "Deine Vorstellung wurde abgeschickt." #: ../../mod/dfrn_request.php:481 msgid "Please login to confirm introduction." -msgstr "Bitte melde dich an um die Vorstellung zu bestätigen." +msgstr "Bitte melde dich an, um die Vorstellung zu bestätigen." #: ../../mod/dfrn_request.php:495 msgid "" @@ -675,7 +678,7 @@ msgstr "Willkommen zurück %s." #: ../../mod/dfrn_request.php:508 #, php-format msgid "Please confirm your introduction/connection request to %s." -msgstr "Bitte bestätige deine Vorstellung/Verbindungs Anfrage bei %s." +msgstr "Bitte bestätige deine Vorstellung/Verbindungsanfrage bei %s." #: ../../mod/dfrn_request.php:509 msgid "Confirm" @@ -699,7 +702,7 @@ msgstr "Administrator" #: ../../mod/dfrn_request.php:630 msgid "Friend/Connection Request" -msgstr "Freundschafts/Kontakt Anfrage" +msgstr "Freundschafts-/Kontaktanfrage" #: ../../mod/dfrn_request.php:631 msgid "" @@ -771,7 +774,7 @@ msgstr "Anfrage abschicken" #: ../../mod/install.php:34 msgid "Could not create/connect to database." msgstr "" -"Konnte die Verbindung zur Datenbank nicht aufbauen bzw. die Datenbank " +"Konnte die Verbindung zur Datenbank nicht aufbauen, bzw. die Datenbank " "anlegen." #: ../../mod/install.php:39 @@ -784,7 +787,7 @@ msgstr "Mit der Installation fortfahren" #: ../../mod/install.php:77 msgid "Your Friendika site database has been installed." -msgstr "Die Datenbank deiner Friendika Seite wurde erfolgreich installiert." +msgstr "Die Datenbank deiner Friendikaseite wurde erfolgreich installiert." #: ../../mod/install.php:78 msgid "" @@ -799,7 +802,7 @@ msgstr "Lies bitte die \"INSTALL.txt\"." #: ../../mod/install.php:81 msgid "Proceed to registration" -msgstr "Mit der Registration fortfahren" +msgstr "Mit der Registrierung fortfahren" #: ../../mod/install.php:87 msgid "Database import failed." @@ -846,8 +849,9 @@ msgid "" "The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "" -"Die Datenbank die du unten angibst sollte bereits existieren. Ist dies noch " -"nicht der Fall erzeuge sie bitte bevor du mit der Installation vorfährst." +"Die Datenbank, die du unten angibst, sollte bereits existieren. Ist dies " +"noch nicht der Fall, erzeuge sie bitte bevor du mit der Installation " +"vorfährst." #: ../../mod/install.php:129 msgid "Database Server Name" @@ -867,16 +871,15 @@ msgstr "Datenbank Name" #: ../../mod/install.php:133 msgid "Please select a default timezone for your website" -msgstr "Bitte wähle die standard Zeitzone deiner Webseite" +msgstr "Bitte wähle die Standardzeitzone deiner Webseite" #: ../../mod/install.php:134 msgid "" "Site administrator email address. Your account email address must match this" " in order to use the web admin panel." msgstr "" -"Email Adresse des Seiten Administrators. Die Email Adresse deines Accounts " -"muss mit dieser übereinstimmen, damit du das Administrationspanel nutzen " -"kannst." +"Emailadresse des Seitenadministrators. Die Emailadresse deines Accounts muss" +" mit dieser übereinstimmen, damit du das Administrationspanel nutzen kannst." #: ../../mod/install.php:153 msgid "Could not find a command line version of PHP in the web server PATH." @@ -956,8 +959,8 @@ 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 "" -"Der Installationswizzard muss in der Lage sein eine Datei im " -"Stammverzeichnis deines Webservers anzuliegen ist allerdings derzeit nicht " +"Der Installationswizzard muss in der Lage sein, eine Datei im " +"Stammverzeichnis deines Webservers anzulegen, ist allerdings derzeit nicht " "in der Lage dies zu tun." #: ../../mod/install.php:217 @@ -996,7 +999,7 @@ msgstr "" #: ../../mod/install.php:243 msgid "Errors encountered creating database tables." -msgstr "Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen." +msgstr "Fehler aufgetreten während der Erzeugung der Datenbank Tabellen." #: ../../mod/update_community.php:18 ../../mod/update_network.php:22 #: ../../mod/update_profile.php:41 @@ -1005,7 +1008,7 @@ msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]" #: ../../mod/match.php:10 msgid "Profile Match" -msgstr "Profil Übereinstimmungen" +msgstr "Profilübereinstimmungen" #: ../../mod/match.php:18 msgid "No keywords to match. Please add keywords to your default profile." @@ -1046,7 +1049,7 @@ msgstr "Ignorieren" #: ../../mod/notifications.php:74 msgid "Pending Friend/Connect Notifications" -msgstr "Anstehende Freundschafts/Kontakt Benachrichtigungen" +msgstr "Anstehende Freundschafts-/Kontaktbenachrichtigungen" #: ../../mod/notifications.php:78 msgid "Show Ignored Requests" @@ -1058,11 +1061,11 @@ msgstr "Verberge ignorierte Anfragen" #: ../../mod/notifications.php:105 ../../mod/notifications.php:148 msgid "Notification type: " -msgstr "Benachrichtigungs Typ: " +msgstr "Benachrichtigungstyp: " #: ../../mod/notifications.php:106 msgid "Friend Suggestion" -msgstr "Kontakt Vorschlag" +msgstr "Kontaktvorschlag" #: ../../mod/notifications.php:108 #, php-format @@ -1143,7 +1146,7 @@ msgstr "Konnte nicht auf die Kontaktdaten zugreifen." #: ../../mod/contacts.php:83 msgid "Could not locate selected profile." -msgstr "Konnte das ausgewählte Profiel nicht finden." +msgstr "Konnte das ausgewählte Profil nicht finden." #: ../../mod/contacts.php:114 msgid "Contact updated." @@ -1155,7 +1158,7 @@ msgstr "Kontakt wurde blockiert" #: ../../mod/contacts.php:172 msgid "Contact has been unblocked" -msgstr "Kontakt wurde wieder frei gegeben" +msgstr "Kontakt wurde wieder freigegeben" #: ../../mod/contacts.php:186 msgid "Contact has been ignored" @@ -1376,7 +1379,7 @@ msgstr "Passwort zurücksetzen" #: ../../mod/lostpass.php:83 msgid "Your password has been reset as requested." -msgstr "Dein Passwort wurde wie gewünscht zurück gesetzt." +msgstr "Dein Passwort wurde wie gewünscht zurückgesetzt." #: ../../mod/lostpass.php:84 msgid "Your new password is" @@ -1508,7 +1511,7 @@ msgstr "" #: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:446 msgid "Automatic Friend Account" -msgstr "Automatischer Freundes Account" +msgstr "Automatischer Freundesaccount" #: ../../mod/settings.php:395 msgid "Automatically approve all connection/friend requests as friends" @@ -1575,7 +1578,7 @@ msgstr "Bestätigen:" #: ../../mod/settings.php:492 msgid "Leave password fields blank unless changing" -msgstr "Lass die Passwort-Felder leer außer du willst das Passwort ändern" +msgstr "Lass die Passwort-Felder leer, außer du willst das Passwort ändern" #: ../../mod/settings.php:496 msgid "Basic Settings" @@ -1587,7 +1590,7 @@ msgstr "Kompletter Name:" #: ../../mod/settings.php:498 msgid "Email Address:" -msgstr "Email Adresse:" +msgstr "Emailadresse:" #: ../../mod/settings.php:499 msgid "Your Timezone:" @@ -1964,7 +1967,7 @@ msgstr "Eine Gruppe von Kontakten/Freunden anlegen." #: ../../mod/group.php:83 ../../mod/group.php:166 msgid "Group Name: " -msgstr "Gruppen Name:" +msgstr "Gruppenname:" #: ../../mod/group.php:98 msgid "Group removed." @@ -1980,7 +1983,7 @@ msgstr "Klicke einen Kontakt an um ihn hinzuzufügen oder zu entfernen" #: ../../mod/group.php:165 msgid "Group Editor" -msgstr "Gruppen Editor" +msgstr "Gruppeneditor" #: ../../mod/group.php:180 msgid "Members" @@ -2048,11 +2051,11 @@ msgstr "Die Domain deiner EMail Adresse ist nicht erlaubt auf dieser Seite." #: ../../mod/register.php:120 msgid "Not a valid email address." -msgstr "Keine gültige EMail Adresse." +msgstr "Keine gültige EMailadresse." #: ../../mod/register.php:130 msgid "Cannot use that email." -msgstr "Konnte diese EMail Adresse nicht verwenden." +msgstr "Konnte diese EMailadresse nicht verwenden." #: ../../mod/register.php:136 msgid "" @@ -2258,7 +2261,7 @@ msgstr "Bitte melde dich an." #: ../../mod/item.php:81 msgid "Unable to locate original post." -msgstr "Konnte das original Posting nicht finden." +msgstr "Konnte das Originalposting nicht finden." #: ../../mod/item.php:196 msgid "Empty post discarded." @@ -2369,8 +2372,8 @@ msgstr "Bild Zurechtschneiden" #: ../../mod/profile_photo.php:210 msgid "Please adjust the image cropping for optimum viewing." msgstr "" -"Passe bitte den Bildausschnitt an damit das Bild optimal dargestellt werden " -"kann." +"Passe bitte den Bildausschnitt an, damit das Bild optimal dargestellt werden" +" kann." #: ../../mod/profile_photo.php:211 msgid "Done Editing" @@ -2573,7 +2576,7 @@ msgstr "Erweitert" #: ../../mod/admin.php:306 ../../addon/statusnet/statusnet.php:459 msgid "Site name" -msgstr "Seiten Name" +msgstr "Seitenname" #: ../../mod/admin.php:307 msgid "Banner/Logo" @@ -2581,7 +2584,7 @@ msgstr "Banner/Logo" #: ../../mod/admin.php:308 msgid "System language" -msgstr "System Sprache" +msgstr "Systemsprache" #: ../../mod/admin.php:309 msgid "System theme" @@ -3022,7 +3025,7 @@ msgstr "Region/Bundesstaat:" #: ../../mod/profiles.php:387 msgid "<span class=\"heart\">♥</span> Marital Status:" -msgstr "<span class=\"heart\">♥</span> Beziehungs Status:" +msgstr "<span class=\"heart\">♥</span> Beziehungsstatus:" #: ../../mod/profiles.php:388 msgid "Who: (if applicable)" @@ -3212,7 +3215,7 @@ msgstr "Bitte trete meinem Sozialen Netzwerk auf %s bei" #: ../../mod/invite.php:103 msgid "To accept this invitation, please visit:" -msgstr "Um diese Einladung anzunehmen beuche bitte:" +msgstr "Um diese Einladung anzunehmen besuche bitte:" #: ../../mod/invite.php:104 msgid "You will need to supply this invitation code: $invite_code" @@ -3222,7 +3225,7 @@ msgstr "Du benötigst den folgenden Einladungs Code: $invite_code" msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "" -"Sobald du registriert bist kontaktiere mich bitte auf meiner Profilseite:" +"Sobald du registriert bist, kontaktiere mich bitte auf meiner Profilseite:" #: ../../mod/dfrn_confirm.php:233 msgid "Response from remote site was not understood." @@ -3267,7 +3270,7 @@ msgstr "Für '%s' wurde kein Nutzer gefunden" #: ../../mod/dfrn_confirm.php:517 msgid "Our site encryption key is apparently messed up." -msgstr "Der Verschlüsslungsschlüssel unserer Seite ist anscheinend im Arsch." +msgstr "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend im Arsch." #: ../../mod/dfrn_confirm.php:528 msgid "Empty site URL was provided or URL could not be decrypted by us." @@ -3290,7 +3293,7 @@ msgstr "" #: ../../mod/dfrn_confirm.php:589 msgid "Unable to set your contact credentials on our system." msgstr "" -"Deine Kontaktreferenzen konnten nicht in unserm System gespeichert werden." +"Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden." #: ../../mod/dfrn_confirm.php:642 msgid "Unable to update your contact profile details on our system" @@ -3417,8 +3420,8 @@ msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " msgstr "" -"Drei dimensionales Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur " -"das man es auf mehreren Ebenen gleichzeitig spielt." +"3D-Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur das man es auf " +"mehreren Ebenen gleichzeitig spielt." #: ../../addon/tictac/tictac.php:61 msgid "" @@ -3632,7 +3635,7 @@ msgstr "Bei StatusNet anmelden" #: ../../addon/statusnet/statusnet.php:309 msgid "Copy the security code from StatusNet here" -msgstr "Kopiere den Sicherheitscode von StatusNet hier her" +msgstr "Kopiere den Sicherheitscode von StatusNet hier hin" #: ../../addon/statusnet/statusnet.php:315 msgid "Cancel Connection Process" @@ -3788,7 +3791,7 @@ msgstr "Alter:" #: ../../include/profile_advanced.php:70 msgid "<span class=\"heart\">♥</span> Status:" -msgstr "<span class=\"heart\">♥</span> Bezieungsstatus:" +msgstr "<span class=\"heart\">♥</span> Beziehungsstatus:" #: ../../include/profile_advanced.php:103 ../../boot.php:886 msgid "Homepage:" @@ -3880,7 +3883,7 @@ msgstr "Täglich" #: ../../include/contact_selectors.php:59 msgid "Weekly" -msgstr "Wöchendlich" +msgstr "Wöchentlich" #: ../../include/contact_selectors.php:60 msgid "Monthly" @@ -3896,19 +3899,19 @@ msgstr "Weiblich" #: ../../include/profile_selectors.php:6 msgid "Currently Male" -msgstr "Momentan Männlich" +msgstr "Momentan männlich" #: ../../include/profile_selectors.php:6 msgid "Currently Female" -msgstr "Momentan Weiblich" +msgstr "Momentan weiblich" #: ../../include/profile_selectors.php:6 msgid "Mostly Male" -msgstr "Hauptsächlich Männlich" +msgstr "Hauptsächlich männlich" #: ../../include/profile_selectors.php:6 msgid "Mostly Female" -msgstr "Hauptsächlich Weiblich" +msgstr "Hauptsächlich weiblich" #: ../../include/profile_selectors.php:6 msgid "Transgender" @@ -3920,7 +3923,7 @@ msgstr "Intersex" #: ../../include/profile_selectors.php:6 msgid "Transsexual" -msgstr "Transsexuel" +msgstr "Transsexuell" #: ../../include/profile_selectors.php:6 msgid "Hermaphrodite" @@ -3964,7 +3967,7 @@ msgstr "Keine Vorlieben" #: ../../include/profile_selectors.php:19 msgid "Bisexual" -msgstr "Bisexuel" +msgstr "Bisexuell" #: ../../include/profile_selectors.php:19 msgid "Autosexual" @@ -4020,7 +4023,7 @@ msgstr "Untreu" #: ../../include/profile_selectors.php:33 msgid "Sex Addict" -msgstr "Sex Besessen" +msgstr "Sexbesessen" #: ../../include/profile_selectors.php:33 msgid "Friends" @@ -4028,7 +4031,7 @@ msgstr "Freunde" #: ../../include/profile_selectors.php:33 msgid "Friends/Benefits" -msgstr "Friends/Benefits" +msgstr "Freunde/Zuwendungen" #: ../../include/profile_selectors.php:33 msgid "Casual" @@ -4259,7 +4262,7 @@ msgstr "Persönlich" #: ../../include/nav.php:55 msgid "Home Page" -msgstr "Home Page" +msgstr "Homepage" #: ../../include/nav.php:59 msgid "Create an account" diff --git a/view/de/strings.php b/view/de/strings.php index 56d54a6d39..2acc13beff 100644 --- a/view/de/strings.php +++ b/view/de/strings.php @@ -1,6 +1,6 @@ <?php -function string_plural_select($n){ +function string_plural_select_de($n){ return ($n != 1); } ; @@ -23,7 +23,7 @@ $a->strings["Submit"] = "Senden"; $a->strings["Help:"] = "Hilfe:"; $a->strings["Help"] = "Hilfe"; $a->strings["File exceeds size limit of %d"] = "Die Datei ist größer als das erlaubte Limit von %d"; -$a->strings["File upload failed."] = "Upload der Datei fehlgeschlagen."; +$a->strings["File upload failed."] = "Hochladen der Datei fehlgeschlagen."; $a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet."; $a->strings["Suggest Friends"] = "Kontakte vorschlagen"; $a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor"; @@ -57,7 +57,7 @@ $a->strings["%s welcomes %s"] = "%s heißt %s herzlich willkommen"; $a->strings["Photo Albums"] = "Fotoalben"; $a->strings["Contact Photos"] = "Kontaktbilder"; $a->strings["everybody"] = "jeder"; -$a->strings["Contact information unavailable"] = "Kontakt Informationen nicht verfügbar"; +$a->strings["Contact information unavailable"] = "Kontaktinformationen nicht verfügbar"; $a->strings["Profile Photos"] = "Profilbilder"; $a->strings["Album not found."] = "Album nicht gefunden."; $a->strings["Delete Album"] = "Album löschen"; @@ -71,7 +71,7 @@ $a->strings["Unable to process image."] = "Konnte das Bild nicht bearbeiten."; $a->strings["Image upload failed."] = "Hochladen des Bildes gescheitert."; $a->strings["Public access denied."] = "Öffentlicher Zugriff verweigert."; $a->strings["No photos selected"] = "Keine Bilder ausgewählt"; -$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschrängt."; +$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschränkt."; $a->strings["Upload Photos"] = "Bilder hochladen"; $a->strings["New album name: "] = "Name des neuen Albums: "; $a->strings["or existing album name: "] = "oder existierender Albumname: "; @@ -96,7 +96,7 @@ $a->strings["Please wait"] = "Bitte warten"; $a->strings["This is you"] = "Das bist du"; $a->strings["Comment"] = "Kommentar"; $a->strings["Delete"] = "Löschen"; -$a->strings["Recent Photos"] = "Neuste Fotos"; +$a->strings["Recent Photos"] = "Neueste Fotos"; $a->strings["Upload New Photos"] = "Weitere Fotos hochladen"; $a->strings["View Album"] = "Album betrachten"; $a->strings["Not available."] = "Nicht verfügbar."; @@ -120,7 +120,7 @@ $a->strings["CC: email addresses"] = "CC: EMail Addresse"; $a->strings["Public post"] = "Öffentlicher Beitrag"; $a->strings["Example: bob@example.com, mary@example.com"] = "Z.B.: bob@example.com, mary@example.com"; $a->strings["This introduction has already been accepted."] = "Diese Vorstellung wurde bereits abgeschlossen."; -$a->strings["Profile location is not valid or does not contain profile information."] = "Profil Adresse ist ungültig oder stellt einige Profildaten nicht zur Verfügung."; +$a->strings["Profile location is not valid or does not contain profile information."] = "Profiladresse ist ungültig oder stellt einige Profildaten nicht zur Verfügung."; $a->strings["Warning: profile location has no identifiable owner name."] = "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden."; $a->strings["Warning: profile location has no profile photo."] = "Warnung: Es konnte kein Profilbild bei der angegebenen Profiladresse gefunden werden."; $a->strings["%d required parameter was not found at the given location"] = array( @@ -132,24 +132,24 @@ $a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler $a->strings["Profile unavailable."] = "Profil nicht verfügbar."; $a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Freundschaftsanfragen erhalten."; $a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen."; -$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten es in 24 Stunden erneut zu versuchen."; +$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen."; $a->strings["Invalid locator"] = "Ungültiger Locator"; -$a->strings["Unable to resolve your name at the provided location."] = "Unable to resolve your name at the provided location."; +$a->strings["Unable to resolve your name at the provided location."] = "Konnte deinen Namen an der angegebenen Stelle nicht finden."; $a->strings["You have already introduced yourself here."] = "Du hast dich hier bereits vorgestellt."; $a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob du bereits ein Freund von %s bist."; $a->strings["Invalid profile URL."] = "Ungültige Profil URL."; $a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil URL."; $a->strings["Failed to update contact record."] = "Aktualisierung der Kontaktdaten fehlgeschlagen."; $a->strings["Your introduction has been sent."] = "Deine Vorstellung wurde abgeschickt."; -$a->strings["Please login to confirm introduction."] = "Bitte melde dich an um die Vorstellung zu bestätigen."; +$a->strings["Please login to confirm introduction."] = "Bitte melde dich an, um die Vorstellung zu bestätigen."; $a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Incorrect identity currently logged in. Please login to <strong>this</strong> profile."; $a->strings["Welcome home %s."] = "Willkommen zurück %s."; -$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige deine Vorstellung/Verbindungs Anfrage bei %s."; +$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige deine Vorstellung/Verbindungsanfrage bei %s."; $a->strings["Confirm"] = "Bestätigen"; $a->strings["[Name Withheld]"] = "[Name Zurückgehalten]"; $a->strings["Introduction received at "] = "Vorstellung erhalten auf"; $a->strings["Administrator"] = "Administrator"; -$a->strings["Friend/Connection Request"] = "Freundschafts/Kontakt Anfrage"; +$a->strings["Friend/Connection Request"] = "Freundschafts-/Kontaktanfrage"; $a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"; $a->strings["Please answer the following:"] = "Bitte beantworte folgende Fragen:"; $a->strings["Does %s know you?"] = "Kennt %s dich?"; @@ -163,13 +163,13 @@ $a->strings["Private (secure) network"] = "Privates (sicheres) Netzwerk"; $a->strings["Public (insecure) network"] = "Öffentliches (unsicheres) Netzwerk"; $a->strings["Your Identity Address:"] = "Adresse deines Profils:"; $a->strings["Submit Request"] = "Anfrage abschicken"; -$a->strings["Could not create/connect to database."] = "Konnte die Verbindung zur Datenbank nicht aufbauen bzw. die Datenbank anlegen."; +$a->strings["Could not create/connect to database."] = "Konnte die Verbindung zur Datenbank nicht aufbauen, bzw. die Datenbank anlegen."; $a->strings["Connected to database."] = "Mit der Datenbank verbunden."; $a->strings["Proceed with Installation"] = "Mit der Installation fortfahren"; -$a->strings["Your Friendika site database has been installed."] = "Die Datenbank deiner Friendika Seite wurde erfolgreich installiert."; +$a->strings["Your Friendika site database has been installed."] = "Die Datenbank deiner Friendikaseite wurde erfolgreich installiert."; $a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen cron Job (o.ä.) für den Poller einrichten."; $a->strings["Please see the file \"INSTALL.txt\"."] = "Lies bitte die \"INSTALL.txt\"."; -$a->strings["Proceed to registration"] = "Mit der Registration fortfahren"; +$a->strings["Proceed to registration"] = "Mit der Registrierung fortfahren"; $a->strings["Database import failed."] = "Import der Datenbank schlug fehl."; $a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = "Möglicherweise musst du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren."; $a->strings["Welcome to Friendika."] = "Willkommen bei Friendika."; @@ -177,13 +177,13 @@ $a->strings["Friendika Social Network"] = "Friendika Soziales Netzwerk"; $a->strings["Installation"] = "Installation"; $a->strings["In order to install Friendika we need to know how to connect to your database."] = "Um Friendika installieren zu können, müssen wir wissen wie wir deine MySQL Datenbank erreichen."; $a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite falls du Fragen zu diesen Einstellungen haben solltest."; -$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Die Datenbank die du unten angibst sollte bereits existieren. Ist dies noch nicht der Fall erzeuge sie bitte bevor du mit der Installation vorfährst."; +$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Die Datenbank, die du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor du mit der Installation vorfährst."; $a->strings["Database Server Name"] = "Datenbank Server"; $a->strings["Database Login Name"] = "Datenbank Nutzer"; $a->strings["Database Login Password"] = "Datenbank Passwort"; $a->strings["Database Name"] = "Datenbank Name"; -$a->strings["Please select a default timezone for your website"] = "Bitte wähle die standard Zeitzone deiner Webseite"; -$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "Email Adresse des Seiten Administrators. Die Email Adresse deines Accounts muss mit dieser übereinstimmen, damit du das Administrationspanel nutzen kannst."; +$a->strings["Please select a default timezone for your website"] = "Bitte wähle die Standardzeitzone deiner Webseite"; +$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "Emailadresse des Seitenadministrators. Die Emailadresse deines Accounts muss mit dieser übereinstimmen, damit du das Administrationspanel nutzen kannst."; $a->strings["Could not find a command line version of PHP in the web server PATH."] = "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden."; $a->strings["This is required. Please adjust the configuration file .htconfig.php accordingly."] = "Diese wird von Friendika benötigt. Bitte passe die Konfigurationsdatei .htconfig.php entsprechend an."; $a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Die Kommandozeilenversion von PHP auf deinem System hat \"register_argc_argv\" nicht aktiviert."; @@ -196,14 +196,14 @@ $a->strings["Error: GD graphics PHP module with JPEG support required but not in $a->strings["Error: openssl PHP module required but not installed."] = "Fehler: Das openssl Modul von PHP ist nict installiert."; $a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: Das mysqli Modul von PHP ist nicht installiert."; $a->strings["Error: mb_string PHP module required but not installed."] = "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert."; -$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."] = "Der Installationswizzard muss in der Lage sein eine Datei im Stammverzeichnis deines Webservers anzuliegen ist allerdings derzeit nicht in der Lage dies zu tun."; +$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."] = "Der Installationswizzard muss in der Lage sein, eine Datei im Stammverzeichnis deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage dies zu tun."; $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."] = "In den meisten Fällen ist dies ein Problem mit den Schreibrechten, der Webserver könnte keine Schreiberlaubnis haben, selbst wenn du sie hast."; $a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support Team um diese Situations zu beheben."; $a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Sollte dies nicht möglich sein musst du die Installation manuell durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\"."; $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."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner Friendika Installation zu erzeugen."; -$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen."; +$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten während der Erzeugung der Datenbank Tabellen."; $a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"; -$a->strings["Profile Match"] = "Profil Übereinstimmungen"; +$a->strings["Profile Match"] = "Profilübereinstimmungen"; $a->strings["No keywords to match. Please add keywords to your default profile."] = "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu deinem Standardprofil hinzu."; $a->strings["No matches"] = "Keine Übereinstimmungen"; $a->strings["Remote privacy information not available."] = "Entfernte Privatsphäreneinstellungen nicht verfügbar."; @@ -212,11 +212,11 @@ $a->strings["Welcome to %s"] = "Willkommen zu %s"; $a->strings["Invalid request identifier."] = "Invalid request identifier."; $a->strings["Discard"] = "Verwerfen"; $a->strings["Ignore"] = "Ignorieren"; -$a->strings["Pending Friend/Connect Notifications"] = "Anstehende Freundschafts/Kontakt Benachrichtigungen"; +$a->strings["Pending Friend/Connect Notifications"] = "Anstehende Freundschafts-/Kontaktbenachrichtigungen"; $a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen"; $a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen"; -$a->strings["Notification type: "] = "Benachrichtigungs Typ: "; -$a->strings["Friend Suggestion"] = "Kontakt Vorschlag"; +$a->strings["Notification type: "] = "Benachrichtigungstyp: "; +$a->strings["Friend Suggestion"] = "Kontaktvorschlag"; $a->strings["suggested by %s"] = "vorgeschlagen von %s"; $a->strings["Approve"] = "Genehmigen"; $a->strings["Claims to be known to you: "] = "Behauptet dich zu kennen: "; @@ -238,10 +238,10 @@ $a->strings["Connect/Follow"] = "Verbinden/Folgen"; $a->strings["Example: bob@example.com, http://example.com/barbara"] = "Beispiel: bob@example.com, http://example.com/barbara"; $a->strings["Follow"] = "Folge"; $a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen."; -$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profiel nicht finden."; +$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profil nicht finden."; $a->strings["Contact updated."] = "Kontakt aktualisiert."; $a->strings["Contact has been blocked"] = "Kontakt wurde blockiert"; -$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder frei gegeben"; +$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder freigegeben"; $a->strings["Contact has been ignored"] = "Der Kontakt wurde ignoriert"; $a->strings["Contact has been unignored"] = "Kontakt wurde ignoriert"; $a->strings["stopped following"] = "wird nicht mehr gefolgt"; @@ -290,7 +290,7 @@ $a->strings["Password reset request issued. Check your email."] = "Zurücksetzen $a->strings["Password reset requested at %s"] = "Anfrage zum Zurücksetzen des Passworts auf %s erhalten"; $a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Anfrage konnte nicht verifiziert werden. (Eventuell hast du bereits ähnliche Anfrage gestellt.) Zurücksetzen des Passworts gescheitert."; $a->strings["Password Reset"] = "Passwort zurücksetzen"; -$a->strings["Your password has been reset as requested."] = "Dein Passwort wurde wie gewünscht zurück gesetzt."; +$a->strings["Your password has been reset as requested."] = "Dein Passwort wurde wie gewünscht zurückgesetzt."; $a->strings["Your new password is"] = "Dein neues Passwort lautet"; $a->strings["Save or copy your new password - and then"] = "Speichere oder kopiere dein neues Passwort - und dann"; $a->strings["click here to login"] = "hier klicken um dich anzumelden"; @@ -319,7 +319,7 @@ $a->strings["Soapbox Account"] = "Sandkasten Account"; $a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Freundschaftsanfragen werden automatisch als Nurlese-Fans akzeptiert"; $a->strings["Community/Celebrity Account"] = "Gemeinschafts/Berühmtheiten Account"; $a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Freundschaftsanfragen werden automatisch als Lese-und-Schreib-Fans akzeptiert"; -$a->strings["Automatic Friend Account"] = "Automatischer Freundes Account"; +$a->strings["Automatic Friend Account"] = "Automatischer Freundesaccount"; $a->strings["Automatically approve all connection/friend requests as friends"] = "Freundschaftsanfragen werden automatisch als Freund akzeptiert"; $a->strings["OpenID:"] = "OpenID:"; $a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für diesen Account mit dieser OpenID."; @@ -335,10 +335,10 @@ $a->strings["Export Personal Data"] = "Perönliche Daten exportieren"; $a->strings["Password Settings"] = "Passwort Einstellungen"; $a->strings["New Password:"] = "Neues Passwort:"; $a->strings["Confirm:"] = "Bestätigen:"; -$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer außer du willst das Passwort ändern"; +$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer, außer du willst das Passwort ändern"; $a->strings["Basic Settings"] = "Grundeinstellungen"; $a->strings["Full Name:"] = "Kompletter Name:"; -$a->strings["Email Address:"] = "Email Adresse:"; +$a->strings["Email Address:"] = "Emailadresse:"; $a->strings["Your Timezone:"] = "Deine Zeitzone:"; $a->strings["Default Post Location:"] = "Standardstandort:"; $a->strings["Use Browser Location:"] = "Verwende den Standort des Browsers:"; @@ -380,8 +380,8 @@ $a->strings["View New Items"] = "Neue Einträge anzeigen"; $a->strings["View Any Items"] = "Alle Einträge anzeigen"; $a->strings["View Starred Items"] = "Gesternte Einträge anzeigen"; $a->strings["Warning: This group contains %s member from an insecure network."] = array( - 0 => "Warnung: Diese Gruppe beinhaltet %s Mitglied aus unsicheren Netzwerken.", - 1 => "Warnung: Diese Gruppe beinhaltet %s Mitglieder aus unsicheren Netzwerken.", + 0 => "", + 1 => "", ); $a->strings["Private messages to this group are at risk of public disclosure."] = "Private Nachrichten an diese Gruppe könnten an die Öffentlichkeit geraten."; $a->strings["No such group"] = "Es gibt keine solche Gruppe"; @@ -413,11 +413,11 @@ $a->strings["Group not found."] = "Gruppe nicht gefunden."; $a->strings["Group name changed."] = "Gruppenname geändert."; $a->strings["Permission denied"] = "Zugriff verweigert"; $a->strings["Create a group of contacts/friends."] = "Eine Gruppe von Kontakten/Freunden anlegen."; -$a->strings["Group Name: "] = "Gruppen Name:"; +$a->strings["Group Name: "] = "Gruppenname:"; $a->strings["Group removed."] = "Gruppe entfernt."; $a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen."; $a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an um ihn hinzuzufügen oder zu entfernen"; -$a->strings["Group Editor"] = "Gruppen Editor"; +$a->strings["Group Editor"] = "Gruppeneditor"; $a->strings["Members"] = "Mitglieder"; $a->strings["All Contacts"] = "Alle Kontakte"; $a->strings["Invalid profile identifier."] = "Ungültiger Profil-Bezeichner"; @@ -434,8 +434,8 @@ $a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Name $a->strings["Name too short."] = "Der Name ist zu kurz."; $a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein."; $a->strings["Your email domain is not among those allowed on this site."] = "Die Domain deiner EMail Adresse ist nicht erlaubt auf dieser Seite."; -$a->strings["Not a valid email address."] = "Keine gültige EMail Adresse."; -$a->strings["Cannot use that email."] = "Konnte diese EMail Adresse nicht verwenden."; +$a->strings["Not a valid email address."] = "Keine gültige EMailadresse."; +$a->strings["Cannot use that email."] = "Konnte diese EMailadresse nicht verwenden."; $a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen."; $a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."; $a->strings["SERIOUS ERROR: Generation of security keys failed."] = "SERIOUS ERROR: Generation of security keys failed."; @@ -473,7 +473,7 @@ $a->strings["No installed plugins/addons/apps"] = "Keine Plugins/Erweiterungen/A $a->strings["Account approved."] = "Account freigegeben."; $a->strings["Registration revoked for %s"] = "Registration für %s wurde zurück gezogen"; $a->strings["Please login."] = "Bitte melde dich an."; -$a->strings["Unable to locate original post."] = "Konnte das original Posting nicht finden."; +$a->strings["Unable to locate original post."] = "Konnte das Originalposting nicht finden."; $a->strings["Empty post discarded."] = "Leere Nachricht wurde verworfen."; $a->strings["Wall Photos"] = "Pinnwand Bilder"; $a->strings["noreply"] = "noreply"; @@ -495,7 +495,7 @@ $a->strings["Upload"] = "Hochladen"; $a->strings["skip this step"] = "diesen Schritt überspringen"; $a->strings["select a photo from your photo albums"] = "wähle ein Foto von deinen Fotoalben"; $a->strings["Crop Image"] = "Bild Zurechtschneiden"; -$a->strings["Please adjust the image cropping for optimum viewing."] = "Passe bitte den Bildausschnitt an damit das Bild optimal dargestellt werden kann."; +$a->strings["Please adjust the image cropping for optimum viewing."] = "Passe bitte den Bildausschnitt an, damit das Bild optimal dargestellt werden kann."; $a->strings["Done Editing"] = "Bearbeitung abgeschlossen"; $a->strings["Image uploaded successfully."] = "Bild erfolgreich auf den Server geladen."; $a->strings["No profile"] = "Kein Profil"; @@ -544,9 +544,9 @@ $a->strings["Open"] = "Offen"; $a->strings["File upload"] = "Datei hochladen"; $a->strings["Policies"] = "Regeln"; $a->strings["Advanced"] = "Erweitert"; -$a->strings["Site name"] = "Seiten Name"; +$a->strings["Site name"] = "Seitenname"; $a->strings["Banner/Logo"] = "Banner/Logo"; -$a->strings["System language"] = "System Sprache"; +$a->strings["System language"] = "Systemsprache"; $a->strings["System theme"] = "Systemweites Thema"; $a->strings["Maximum image size"] = "Maximale Größe von Bildern"; $a->strings["Register policy"] = "Registrationsmethode"; @@ -653,7 +653,7 @@ $a->strings["Locality/City:"] = "Wohnort/Stadt:"; $a->strings["Postal/Zip Code:"] = "Postleitzahl:"; $a->strings["Country:"] = "Land:"; $a->strings["Region/State:"] = "Region/Bundesstaat:"; -$a->strings["<span class=\"heart\">♥</span> Marital Status:"] = "<span class=\"heart\">♥</span> Beziehungs Status:"; +$a->strings["<span class=\"heart\">♥</span> Marital Status:"] = "<span class=\"heart\">♥</span> Beziehungsstatus:"; $a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)"; $a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiel: cathy123, Cathy Williams, cathy@example.com"; $a->strings["Sexual Preference:"] = "Sexuelle Vorlieben:"; @@ -700,9 +700,9 @@ $a->strings["You have no more invitations available"] = "Du hast keine weiteren $a->strings["Send invitations"] = "Einladungen senden"; $a->strings["Enter email addresses, one per line:"] = "Email Adressen eingeben, eine pro Zeile:"; $a->strings["Please join my social network on %s"] = "Bitte trete meinem Sozialen Netzwerk auf %s bei"; -$a->strings["To accept this invitation, please visit:"] = "Um diese Einladung anzunehmen beuche bitte:"; +$a->strings["To accept this invitation, please visit:"] = "Um diese Einladung anzunehmen besuche bitte:"; $a->strings["You will need to supply this invitation code: \$invite_code"] = "Du benötigst den folgenden Einladungs Code: \$invite_code"; -$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Sobald du registriert bist kontaktiere mich bitte auf meiner Profilseite:"; +$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Sobald du registriert bist, kontaktiere mich bitte auf meiner Profilseite:"; $a->strings["Response from remote site was not understood."] = "Antwort der entfernten Gegenstelle unverständlich."; $a->strings["Unexpected response from remote site: "] = "Unerwartete Antwort der Gegenstelle: "; $a->strings["Confirmation completed successfully."] = "Bestätigung erfolgreich abgeschlossen."; @@ -712,11 +712,11 @@ $a->strings["Introduction failed or was revoked."] = "Vorstellung schlug fehl od $a->strings["Unable to set contact photo."] = "Konnte das Bild des Kontakts nicht speichern."; $a->strings["%1\$s is now friends with %2\$s"] = "%1\$s ist nun mit %2\$s befreundet"; $a->strings["No user record found for '%s' "] = "Für '%s' wurde kein Nutzer gefunden"; -$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsslungsschlüssel unserer Seite ist anscheinend im Arsch."; +$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend im Arsch."; $a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden."; $a->strings["Contact record was not found for you on our site."] = "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden."; $a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "Die ID die uns dein System angeboten hat ist hier bereits vergeben. Bitte versuche es noch einmal."; -$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserm System gespeichert werden."; +$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden."; $a->strings["Unable to update your contact profile details on our system"] = "Die Updates für dein Profil konnten nicht gespeichert werden"; $a->strings["Connection accepted at %s"] = "Auf %s wurde die Verbindung akzeptiert"; $a->strings["Facebook disabled"] = "Facebook deaktiviert"; @@ -744,7 +744,7 @@ $a->strings["Three Dimensional Tic-Tac-Toe"] = "Dreidimensionales Tic-Tac-Toe"; $a->strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe"; $a->strings["New game"] = "Neues Spiel"; $a->strings["New game with handicap"] = "Neues Handicap Spiel"; -$a->strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "Drei dimensionales Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur das man es auf mehreren Ebenen gleichzeitig spielt."; +$a->strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "3D-Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur das man es auf mehreren Ebenen gleichzeitig spielt."; $a->strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "In diesem Fall sind es drei Ebenen. Man gewinnt indem man drei in einer Reihe auf einer beliebigen Reihe schafft, oder drei übereinander oder diagonal auf verschiedenen Ebenen."; $a->strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "Beim Handicap-Spiel wird die zentrale Position der mittleren Ebene gesperrt da der Spieler der diese Ebene besitzt oft einen unfairen Vorteil genießt."; $a->strings["You go first..."] = "Du fängst an..."; @@ -785,7 +785,7 @@ $a->strings["OAuth Consumer Secret"] = "OAuth Consumer Geheimnis"; $a->strings["Base API Path (remember the trailing /)"] = "Basis-URL der StatusNet API (vergiss den abschließenden / nicht)"; $a->strings["To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to StatusNet."] = "Um deinen Account mit einem StatusNet Account zu verknüpfen klicke den Button an um einen Sicherheitscode von StatusNet zu erhalten und kopiere diesen in die Eingabebox weiter unten. Es werden ausschließlich deine <strong>öffentlichen</strong> Nachrichten bei StatusNet veröffentllicht."; $a->strings["Log in with StatusNet"] = "Bei StatusNet anmelden"; -$a->strings["Copy the security code from StatusNet here"] = "Kopiere den Sicherheitscode von StatusNet hier her"; +$a->strings["Copy the security code from StatusNet here"] = "Kopiere den Sicherheitscode von StatusNet hier hin"; $a->strings["Cancel Connection Process"] = "Verbindungsprozess abbrechen"; $a->strings["Current StatusNet API is"] = "Derzeitige StatusNet API URL lautet"; $a->strings["Cancel StatusNet Connection"] = "Verbindung zum StatusNet Server abbrechen"; @@ -817,7 +817,7 @@ $a->strings["Birthday:"] = "Geburtstag:"; $a->strings["j F, Y"] = "j F, Y"; $a->strings["j F"] = "j F"; $a->strings["Age:"] = "Alter:"; -$a->strings["<span class=\"heart\">♥</span> Status:"] = "<span class=\"heart\">♥</span> Bezieungsstatus:"; +$a->strings["<span class=\"heart\">♥</span> Status:"] = "<span class=\"heart\">♥</span> Beziehungsstatus:"; $a->strings["Homepage:"] = "Homepage:"; $a->strings["Religion:"] = "Religion:"; $a->strings["About:"] = "Über:"; @@ -840,17 +840,17 @@ $a->strings["Frequently"] = "Häufig"; $a->strings["Hourly"] = "Stündlich"; $a->strings["Twice daily"] = "Zweimal Täglich"; $a->strings["Daily"] = "Täglich"; -$a->strings["Weekly"] = "Wöchendlich"; +$a->strings["Weekly"] = "Wöchentlich"; $a->strings["Monthly"] = "Monatlich"; $a->strings["Male"] = "Männlich"; $a->strings["Female"] = "Weiblich"; -$a->strings["Currently Male"] = "Momentan Männlich"; -$a->strings["Currently Female"] = "Momentan Weiblich"; -$a->strings["Mostly Male"] = "Hauptsächlich Männlich"; -$a->strings["Mostly Female"] = "Hauptsächlich Weiblich"; +$a->strings["Currently Male"] = "Momentan männlich"; +$a->strings["Currently Female"] = "Momentan weiblich"; +$a->strings["Mostly Male"] = "Hauptsächlich männlich"; +$a->strings["Mostly Female"] = "Hauptsächlich weiblich"; $a->strings["Transgender"] = "Transgender"; $a->strings["Intersex"] = "Intersex"; -$a->strings["Transsexual"] = "Transsexuel"; +$a->strings["Transsexual"] = "Transsexuell"; $a->strings["Hermaphrodite"] = "Hermaphrodit"; $a->strings["Neuter"] = "Neuter"; $a->strings["Non-specific"] = "Nicht spezifiziert"; @@ -861,7 +861,7 @@ $a->strings["Females"] = "Frauen"; $a->strings["Gay"] = "Schwul"; $a->strings["Lesbian"] = "Lesbisch"; $a->strings["No Preference"] = "Keine Vorlieben"; -$a->strings["Bisexual"] = "Bisexuel"; +$a->strings["Bisexual"] = "Bisexuell"; $a->strings["Autosexual"] = "Autosexual"; $a->strings["Abstinent"] = "Abstinent"; $a->strings["Virgin"] = "Jungfrau"; @@ -875,9 +875,9 @@ $a->strings["Available"] = "Verfügbar"; $a->strings["Unavailable"] = "Nicht verfügbar"; $a->strings["Dating"] = "Dating"; $a->strings["Unfaithful"] = "Untreu"; -$a->strings["Sex Addict"] = "Sex Besessen"; +$a->strings["Sex Addict"] = "Sexbesessen"; $a->strings["Friends"] = "Freunde"; -$a->strings["Friends/Benefits"] = "Friends/Benefits"; +$a->strings["Friends/Benefits"] = "Freunde/Zuwendungen"; $a->strings["Casual"] = "Casual"; $a->strings["Engaged"] = "Verlobt"; $a->strings["Married"] = "Verheiratet"; @@ -937,7 +937,7 @@ $a->strings["End this session"] = "Diese Sitzung beenden"; $a->strings["Login"] = "Anmeldung"; $a->strings["Sign in"] = "Anmelden"; $a->strings["Home"] = "Persönlich"; -$a->strings["Home Page"] = "Home Page"; +$a->strings["Home Page"] = "Homepage"; $a->strings["Create an account"] = "Account erstellen"; $a->strings["Help and documentation"] = "Hilfe und Dokumentation"; $a->strings["Apps"] = "Apps"; diff --git a/view/default.php b/view/default.php index 0d4a690541..ab1cb0f092 100644 --- a/view/default.php +++ b/view/default.php @@ -6,8 +6,7 @@ <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> </head> <body> - <header><?php if(x($page,'header')) echo $page['header']; ?></header> - <nav><div id="top-margin"></div><?php if(x($page,'nav')) echo $page['nav']; ?></nav> + <?php if(x($page,'nav')) echo $page['nav']; ?> <aside><?php if(x($page,'aside')) echo $page['aside']; ?></aside> <section><?php if(x($page,'content')) echo $page['content']; ?> <div id="page-footer"></div> diff --git a/view/dfrn_request.tpl b/view/dfrn_request.tpl index 034da332da..3f4300da6b 100644 --- a/view/dfrn_request.tpl +++ b/view/dfrn_request.tpl @@ -4,8 +4,9 @@ <p id="dfrn-request-intro"> $page_desc<br /> <ul id="dfrn-request-networks"> -<li><a href="http://friendika.com" title="$private_net">$friendika</a> <img src="images/lock_icon.gif" alt="$private_net" title="$private_net" /></li> -<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a> <img src="images/unlock_icon.gif" alt="$public_net" title="$public_net"/></li> +<li><a href="http://friendika.com" title="$friendika">$friendika</a></li> +<li><a href="http://joindiaspora.com" title="$diaspora">$diaspora</a> $diasnote</li> +<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a></li> </ul> $desc </p> diff --git a/view/diaspora_vcard.tpl b/view/diaspora_vcard.tpl new file mode 100644 index 0000000000..aa2c9eded9 --- /dev/null +++ b/view/diaspora_vcard.tpl @@ -0,0 +1,44 @@ +<div style="display:none;"> + <dl class='entity_nickname'> + <dt>Nickname</dt> + <dd> + <a class="nickname url uid" href="$podloc/" rel="me">$diaspora.nickname</a> + </dd> + </dl> + <dl class='entity_fn'> + <dt>Full name</dt> + <dd> + <span class='fn'>$diaspora.fullname</span> + </dd> + </dl> + <dl class="entity_url"> + <dt>URL</dt> + <dd> + <a class="url" href="$diaspora.podloc/" id="pod_location" rel="me">$diaspora.podloc/</a> + </dd> + </dl> + <dl class="entity_photo"> + <dt>Photo</dt> + <dd> + <img class="photo avatar" height="300px" width="300px" src="$diaspora.photo300"> + </dd> + </dl> + <dl class="entity_photo_medium"> + <dt>Photo</dt> + <dd> + <img class="photo avatar" height="100px" width="100px" src="$diaspora.photo100"> + </dd> + </dl> + <dl class="entity_photo_small"> + <dt>Photo</dt> + <dd> + <img class="photo avatar" height="50px" width="50px" src="$diaspora.photo50"> + </dd> + </dl> + <dl class="entity_searchable"> + <dt>Searchable</dt> + <dd> + <span class="searchable">$diaspora.searchable</span> + </dd> + </dl> +</div> diff --git a/view/directory_header.tpl b/view/directory_header.tpl index c5463778b6..ba90b94f82 100644 --- a/view/directory_header.tpl +++ b/view/directory_header.tpl @@ -8,7 +8,7 @@ $finding <div id="directory-search-wrapper"> <form id="directory-search-form" action="directory" method="get" > <input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="$search" /> -<input type="submit" name="submit" id="directory-search-submit" value="$submit" /> +<input type="submit" name="submit" id="directory-search-submit" value="$submit" class="button" /> </form> </div> <div id="directory-search-end"></div> diff --git a/view/directory_item.tpl b/view/directory_item.tpl index 2494bc4b78..031f4ff229 100644 --- a/view/directory_item.tpl +++ b/view/directory_item.tpl @@ -1,5 +1,5 @@ -<div class="directory-item" id="directory-item-$id" > +<div class="directory-item lframe" id="directory-item-$id" > <div class="directory-photo-wrapper" id="directory-photo-wrapper-$id" > <div class="directory-photo" id="directory-photo-$id" ><a href="$profile-link" class="directory-profile-link" id="directory-profile-link-$id" ><img class="directory-photo-img" src="$photo" alt="$alt-text" title="$alt-text" /></a> </div> diff --git a/view/es/messages.po b/view/es/messages.po index e978ddf930..0db49e5aa1 100644 --- a/view/es/messages.po +++ b/view/es/messages.po @@ -1,34 +1,34 @@ -# FRIENDIKA Distribuited Social Network +# FRIENDIKA Distributed Social Network # Copyright (C) 2010, 2011 Mike Macgirvin # This file is distributed under the same license as the Friendika package. # Mike Macgirvin, 2010 -# David Martín Miranda, 2011. # +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 2.1.921\n" +"Project-Id-Version: 2.2.1097\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-23 13:48+0100\n" -"PO-Revision-Date: 2011-04-14 11:18+0200\n" -"Last-Translator: David Martín Miranda\n" -"Language-Team: Español\n" -"Language: Es\n" +"POT-Creation-Date: 2011-09-08 19:48-0700\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Language: es_ES\n" -"X-Source-Language: C\n" +#"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: ../../index.php:187 ../../index.php:194 +#: ../../index.php:187 ../../index.php:194 ../../mod/help.php:37 +#: ../../index.php:209 msgid "Not Found" msgstr "No se ha encontrado" -#: ../../index.php:188 ../../index.php:195 +#: ../../index.php:188 ../../index.php:195 ../../mod/help.php:38 +#: ../../index.php:210 msgid "Page not found." msgstr "Página no encontrada." #: ../../index.php:243 ../../mod/group.php:88 ../../index.php:250 +#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:265 msgid "Permission denied" msgstr "Permiso denegado" @@ -48,241 +48,264 @@ msgstr "Permiso denegado" #: ../../addon/facebook/facebook.php:110 ../../index.php:251 #: ../../mod/profiles.php:227 ../../mod/settings.php:208 #: ../../mod/photos.php:773 ../../mod/display.php:308 -#: ../../mod/editpost.php:10 ../../mod/item.php:668 +#: ../../mod/editpost.php:10 ../../mod/item.php:668 ../../mod/crepair.php:56 +#: ../../mod/wall_attach.php:43 ../../mod/fsuggest.php:78 +#: ../../mod/events.php:102 ../../mod/photos.php:122 ../../mod/photos.php:850 +#: ../../mod/install.php:96 ../../mod/notifications.php:62 +#: ../../mod/contacts.php:122 ../../mod/settings.php:41 +#: ../../mod/settings.php:46 ../../mod/settings.php:305 ../../mod/notes.php:20 +#: ../../mod/attach.php:33 ../../mod/viewcontacts.php:21 +#: ../../mod/register.php:27 ../../mod/regmod.php:111 ../../mod/item.php:112 +#: ../../mod/profile_photo.php:144 ../../mod/profile_photo.php:155 +#: ../../mod/message.php:9 ../../mod/message.php:42 ../../mod/admin.php:10 +#: ../../mod/display.php:108 ../../mod/profiles.php:226 +#: ../../mod/invite.php:81 ../../addon/facebook/facebook.php:314 +#: ../../include/items.php:1999 ../../index.php:266 msgid "Permission denied." msgstr "Permiso denegado." -#: ../../boot.php:808 +#: ../../boot.php:808 ../../boot.php:636 msgid "Create a New Account" msgstr "Crear una nueva cuenta" #: ../../boot.php:809 ../../mod/register.php:443 ../../include/nav.php:61 -#: ../../mod/register.php:445 +#: ../../mod/register.php:445 ../../mod/register.php:529 +#: ../../include/nav.php:59 ../../boot.php:637 msgid "Register" msgstr "Registrarse" -#: ../../boot.php:815 +#: ../../boot.php:815 ../../boot.php:643 msgid "Nickname or Email address: " msgstr "Apodo o dirección de email: " -#: ../../boot.php:816 +#: ../../boot.php:816 ../../boot.php:644 msgid "Password: " msgstr "Contraseña: " #: ../../boot.php:817 ../../boot.php:823 ../../include/nav.php:44 +#: ../../boot.php:645 ../../boot.php:651 msgid "Login" msgstr "Acceder" -#: ../../boot.php:821 +#: ../../boot.php:821 ../../boot.php:649 msgid "Nickname/Email/OpenID: " msgstr "Apodo/Email/OpenID: " -#: ../../boot.php:822 +#: ../../boot.php:822 ../../boot.php:650 msgid "Password (if not OpenID): " msgstr "Contraseña (si no OpenID): " -#: ../../boot.php:825 +#: ../../boot.php:825 ../../boot.php:653 msgid "Forgot your password?" msgstr "¿Olvidó la contraseña?" -#: ../../boot.php:826 +#: ../../boot.php:826 ../../mod/lostpass.php:82 ../../boot.php:654 msgid "Password Reset" msgstr "Resetear la contraseña" -#: ../../boot.php:837 ../../include/nav.php:38 +#: ../../boot.php:837 ../../include/nav.php:38 ../../include/nav.php:41 +#: ../../boot.php:667 msgid "Logout" msgstr "Salir" -#: ../../boot.php:1077 +#: ../../boot.php:1077 ../../include/text.php:229 msgid "prev" msgstr "ant" -#: ../../boot.php:1079 +#: ../../boot.php:1079 ../../include/text.php:231 msgid "first" msgstr "primera" -#: ../../boot.php:1108 +#: ../../boot.php:1108 ../../include/text.php:260 msgid "last" msgstr "última" -#: ../../boot.php:1111 +#: ../../boot.php:1111 ../../include/text.php:263 msgid "next" msgstr "sig" -#: ../../boot.php:1831 +#: ../../boot.php:1831 ../../include/conversation.php:664 #, php-format msgid "%s likes this." msgstr "A %s le gusta esto." -#: ../../boot.php:1831 +#: ../../boot.php:1831 ../../include/conversation.php:664 #, php-format msgid "%s doesn't like this." msgstr "A %s no le gusta esto." -#: ../../boot.php:1835 ../../test.php:8 +#: ../../boot.php:1835 ../../test.php:8 ../../include/conversation.php:668 #, php-format msgid "<span %1$s>%2$d people</span> like this." msgstr "Le gusta a <span %1$s>%2$d personas</span>." -#: ../../boot.php:1837 +#: ../../boot.php:1837 ../../include/conversation.php:670 #, php-format msgid "<span %1$s>%2$d people</span> don't like this." msgstr "No le gusta a <span %1$s>%2$d personas</span>." -#: ../../boot.php:1843 +#: ../../boot.php:1843 ../../include/conversation.php:676 msgid "and" msgstr "y" -#: ../../boot.php:1846 +#: ../../boot.php:1846 ../../include/conversation.php:679 #, php-format msgid ", and %d other people" msgstr ", y otras %d personas" -#: ../../boot.php:1847 +#: ../../boot.php:1847 ../../include/conversation.php:680 #, php-format msgid "%s like this." msgstr "Le gusta a %s." -#: ../../boot.php:1847 +#: ../../boot.php:1847 ../../include/conversation.php:680 #, php-format msgid "%s don't like this." msgstr "No le gusta a %s." -#: ../../boot.php:2008 +#: ../../boot.php:2008 ../../include/text.php:542 msgid "No contacts" msgstr "Nigún contacto" #: ../../boot.php:2016 ../../mod/contacts.php:303 #: ../../include/acl_selectors.php:140 ../../include/acl_selectors.php:155 -#: ../../include/nav.php:111 +#: ../../include/nav.php:111 ../../mod/contacts.php:347 +#: ../../include/nav.php:110 msgid "Contacts" msgstr "Contactos" #: ../../boot.php:2032 ../../mod/viewcontacts.php:17 +#: ../../mod/viewcontacts.php:25 ../../include/text.php:555 msgid "View Contacts" msgstr "Ver contactos" #: ../../boot.php:2049 ../../mod/search.php:17 ../../include/nav.php:67 +#: ../../mod/search.php:26 ../../include/text.php:610 ../../include/nav.php:69 msgid "Search" msgstr "Busca" -#: ../../boot.php:2204 ../../mod/profile.php:8 +#: ../../boot.php:2204 ../../mod/profile.php:8 ../../mod/hcard.php:10 +#: ../../mod/profile.php:10 ../../boot.php:794 msgid "No profile" msgstr "Nigún perfil" -#: ../../boot.php:2261 +#: ../../boot.php:2261 ../../boot.php:858 msgid "Connect" msgstr "Conecta" -#: ../../boot.php:2271 +#: ../../boot.php:2271 ../../mod/events.php:328 ../../include/event.php:37 +#: ../../include/bb2diaspora.php:222 ../../boot.php:873 msgid "Location:" msgstr "Ubicación:" -#: ../../boot.php:2275 +#: ../../boot.php:2275 ../../boot.php:877 msgid ", " msgstr ", " -#: ../../boot.php:2283 +#: ../../boot.php:2283 ../../include/profile_advanced.php:23 +#: ../../boot.php:886 msgid "Gender:" msgstr "Género:" -#: ../../boot.php:2287 +#: ../../boot.php:2287 ../../boot.php:890 msgid "Status:" msgstr "Estado:" -#: ../../boot.php:2289 +#: ../../boot.php:2289 ../../include/profile_advanced.php:103 +#: ../../boot.php:892 msgid "Homepage:" msgstr "Página web:" -#: ../../boot.php:2380 +#: ../../boot.php:2380 ../../include/text.php:687 msgid "Monday" msgstr "Lunes" -#: ../../boot.php:2380 +#: ../../boot.php:2380 ../../include/text.php:687 msgid "Tuesday" msgstr "Martes" -#: ../../boot.php:2380 +#: ../../boot.php:2380 ../../include/text.php:687 msgid "Wednesday" msgstr "Miércoles" -#: ../../boot.php:2380 +#: ../../boot.php:2380 ../../include/text.php:687 msgid "Thursday" msgstr "Jueves" -#: ../../boot.php:2380 +#: ../../boot.php:2380 ../../include/text.php:687 msgid "Friday" msgstr "Viernes" -#: ../../boot.php:2380 +#: ../../boot.php:2380 ../../include/text.php:687 msgid "Saturday" msgstr "Sábado" -#: ../../boot.php:2380 +#: ../../boot.php:2380 ../../include/text.php:687 msgid "Sunday" msgstr "Domingo" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "January" msgstr "Enero" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "February" msgstr "Febrero" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "March" msgstr "Marzo" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "April" msgstr "Abril" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "May" msgstr "Mayo" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "June" msgstr "Junio" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "July" msgstr "Julio" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "August" msgstr "Agosto" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "September" msgstr "Septiembre" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "October" msgstr "Octubre" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "November" msgstr "Noviembre" -#: ../../boot.php:2384 +#: ../../boot.php:2384 ../../include/text.php:691 msgid "December" msgstr "Diciembre" -#: ../../boot.php:2413 ../../boot.php:2419 +#: ../../boot.php:2413 ../../boot.php:2419 ../../boot.php:1006 msgid "Birthdays this week:" msgstr "Cumpleaños esta semana:" -#: ../../boot.php:2414 ../../boot.php:2420 +#: ../../boot.php:2414 ../../boot.php:2420 ../../boot.php:1007 msgid "(Adjusted for local time)" msgstr "(Convertido a la hora local)" -#: ../../boot.php:2423 ../../boot.php:2431 +#: ../../boot.php:2423 ../../boot.php:2431 ../../boot.php:1018 msgid "[today]" msgstr "[hoy]" -#: ../../boot.php:2620 ../../boot.php:2628 +#: ../../boot.php:2620 ../../boot.php:2628 ../../mod/events.php:237 +#: ../../include/text.php:822 msgid "link to source" msgstr "Enlace al original" @@ -316,6 +339,27 @@ msgstr "Seleccione una identidad a gestionar:" #: ../../addon/facebook/facebook.php:151 #: ../../addon/randplace/randplace.php:179 ../../mod/photos.php:801 #: ../../mod/photos.php:858 ../../mod/photos.php:1066 +#: ../../mod/crepair.php:104 ../../mod/fsuggest.php:107 +#: ../../mod/events.php:333 ../../mod/photos.php:878 ../../mod/photos.php:935 +#: ../../mod/photos.php:1145 ../../mod/photos.php:1185 +#: ../../mod/photos.php:1224 ../../mod/photos.php:1255 +#: ../../mod/install.php:137 ../../mod/localtime.php:40 +#: ../../mod/contacts.php:289 ../../mod/settings.php:482 +#: ../../mod/group.php:84 ../../mod/group.php:167 ../../mod/admin.php:300 +#: ../../mod/admin.php:464 ../../mod/admin.php:590 ../../mod/admin.php:655 +#: ../../mod/profiles.php:372 ../../mod/invite.php:106 +#: ../../addon/facebook/facebook.php:371 +#: ../../addon/randplace/randplace.php:178 +#: ../../addon/impressum/impressum.php:69 ../../addon/oembed/oembed.php:41 +#: ../../addon/statusnet/statusnet.php:274 +#: ../../addon/statusnet/statusnet.php:288 +#: ../../addon/statusnet/statusnet.php:314 +#: ../../addon/statusnet/statusnet.php:321 +#: ../../addon/statusnet/statusnet.php:343 +#: ../../addon/statusnet/statusnet.php:471 ../../addon/wppost/wppost.php:93 +#: ../../addon/piwik/piwik.php:81 ../../addon/twitter/twitter.php:171 +#: ../../addon/twitter/twitter.php:194 ../../addon/twitter/twitter.php:280 +#: ../../include/conversation.php:410 msgid "Submit" msgstr "Envia" @@ -325,18 +369,21 @@ msgid "Image exceeds size limit of %d" msgstr "El tamaño de la imagen supera el límite de %d" #: ../../mod/wall_upload.php:65 ../../mod/profile_photo.php:118 -#: ../../mod/photos.php:570 ../../mod/photos.php:571 +#: ../../mod/photos.php:570 ../../mod/photos.php:571 ../../mod/photos.php:631 msgid "Unable to process image." msgstr "Imposible procesar la imagen." #: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88 #: ../../mod/wall_upload.php:95 ../../mod/item.php:184 -#: ../../mod/message.php:93 ../../mod/item.php:212 +#: ../../mod/message.php:93 ../../mod/item.php:212 ../../mod/item.php:298 +#: ../../mod/wall_upload.php:81 ../../mod/wall_upload.php:90 +#: ../../mod/wall_upload.php:97 ../../include/message.php:82 msgid "Wall Photos" msgstr "Foto del Muro" #: ../../mod/wall_upload.php:82 ../../mod/profile_photo.php:230 -#: ../../mod/photos.php:588 ../../mod/photos.php:589 +#: ../../mod/photos.php:588 ../../mod/photos.php:589 ../../mod/photos.php:651 +#: ../../mod/profile_photo.php:241 ../../mod/wall_upload.php:84 msgid "Image upload failed." msgstr "Subida de imagen fallida." @@ -346,19 +393,29 @@ msgstr "Subida de imagen fallida." #: ../../mod/lostpass.php:39 ../../mod/item.php:423 #: ../../mod/dfrn_confirm.php:649 ../../include/items.php:1350 #: ../../mod/dfrn_notify.php:475 ../../mod/item.php:475 ../../mod/item.php:498 -#: ../../include/items.php:1373 +#: ../../include/items.php:1373 ../../mod/dfrn_request.php:549 +#: ../../mod/lostpass.php:44 ../../mod/lostpass.php:106 +#: ../../mod/register.php:369 ../../mod/register.php:423 +#: ../../mod/regmod.php:54 ../../mod/dfrn_notify.php:294 +#: ../../mod/dfrn_notify.php:552 ../../mod/dfrn_confirm.php:702 +#: ../../include/items.php:1586 msgid "Administrator" msgstr "Administrador" -#: ../../mod/dfrn_notify.php:179 +#: ../../mod/dfrn_notify.php:179 ../../mod/item.php:637 ../../mod/item.php:682 +#: ../../mod/item.php:726 ../../mod/item.php:769 ../../mod/dfrn_notify.php:296 +#: ../../mod/dfrn_notify.php:506 ../../mod/dfrn_notify.php:553 +#: ../../mod/dfrn_notify.php:639 ../../mod/dfrn_notify.php:685 msgid "noreply" msgstr "no-responder" -#: ../../mod/dfrn_notify.php:237 +#: ../../mod/dfrn_notify.php:237 ../../mod/dfrn_notify.php:356 msgid "New mail received at " msgstr "Nuevo correo recibido en " #: ../../mod/dfrn_notify.php:388 ../../mod/dfrn_notify.php:474 +#: ../../mod/item.php:684 ../../mod/dfrn_notify.php:555 +#: ../../mod/dfrn_notify.php:687 #, php-format msgid "%s commented on an item at %s" msgstr "%s ha commentato un elemento en %s" @@ -366,36 +423,44 @@ msgstr "%s ha commentato un elemento en %s" #: ../../mod/profile.php:151 ../../mod/network.php:91 #: ../../mod/profile.php:156 ../../mod/profile.php:317 #: ../../mod/photos.php:1086 ../../mod/display.php:158 -#: ../../mod/network.php:370 +#: ../../mod/network.php:370 ../../mod/photos.php:1165 +#: ../../include/conversation.php:393 ../../include/conversation.php:747 msgid "Share" msgstr "Compartir" #: ../../mod/profile.php:152 ../../mod/network.php:92 #: ../../mod/message.php:185 ../../mod/message.php:319 #: ../../mod/profile.php:157 ../../mod/editpost.php:63 +#: ../../mod/editpost.php:91 ../../mod/message.php:114 +#: ../../mod/message.php:248 ../../include/conversation.php:748 msgid "Upload photo" msgstr "Subir foto" #: ../../mod/profile.php:153 ../../mod/network.php:93 #: ../../mod/message.php:186 ../../mod/message.php:320 #: ../../mod/profile.php:158 ../../mod/editpost.php:64 +#: ../../mod/editpost.php:93 ../../mod/message.php:115 +#: ../../mod/message.php:249 ../../include/conversation.php:750 msgid "Insert web link" msgstr "Insertar enlace web" #: ../../mod/profile.php:154 ../../mod/network.php:94 #: ../../mod/profile.php:159 ../../mod/editpost.php:65 +#: ../../mod/editpost.php:94 ../../include/conversation.php:751 msgid "Insert YouTube video" msgstr "Insertar video de YouTube" #: ../../mod/profile.php:155 ../../mod/network.php:95 #: ../../mod/profile.php:162 ../../mod/editpost.php:68 -#: ../../mod/network.php:97 +#: ../../mod/network.php:97 ../../mod/editpost.php:97 +#: ../../include/conversation.php:754 msgid "Set your location" msgstr "Configura la tu ubicación" #: ../../mod/profile.php:156 ../../mod/network.php:96 #: ../../mod/profile.php:163 ../../mod/editpost.php:69 -#: ../../mod/network.php:98 +#: ../../mod/network.php:98 ../../mod/editpost.php:98 +#: ../../include/conversation.php:755 msgid "Clear browser location" msgstr "Borrar la ubicación del navegador" @@ -406,46 +471,55 @@ msgstr "Borrar la ubicación del navegador" #: ../../mod/profile.php:164 ../../mod/profile.php:318 #: ../../mod/photos.php:1087 ../../mod/display.php:159 #: ../../mod/editpost.php:70 ../../mod/network.php:99 -#: ../../mod/network.php:371 +#: ../../mod/network.php:371 ../../mod/photos.php:1166 +#: ../../mod/editpost.php:99 ../../mod/message.php:116 +#: ../../mod/message.php:250 ../../include/conversation.php:394 +#: ../../include/conversation.php:757 msgid "Please wait" msgstr "Por favor, espere" #: ../../mod/profile.php:158 ../../mod/network.php:98 #: ../../mod/profile.php:165 ../../mod/editpost.php:71 -#: ../../mod/network.php:100 +#: ../../mod/network.php:100 ../../mod/editpost.php:100 +#: ../../include/conversation.php:758 msgid "Permission settings" msgstr "Configuración de permisos" #: ../../mod/profile.php:165 ../../mod/network.php:104 #: ../../mod/profile.php:172 ../../mod/editpost.php:77 -#: ../../mod/network.php:106 +#: ../../mod/network.php:106 ../../mod/editpost.php:108 +#: ../../include/conversation.php:766 msgid "CC: email addresses" msgstr "CC: dirección email" #: ../../mod/profile.php:167 ../../mod/network.php:106 #: ../../mod/profile.php:174 ../../mod/editpost.php:79 -#: ../../mod/network.php:108 +#: ../../mod/network.php:108 ../../mod/editpost.php:111 +#: ../../include/conversation.php:769 msgid "Example: bob@example.com, mary@example.com" msgstr "Ejemplo: juan@ejemplo.com, sofia@ejemplo.com" #: ../../mod/profile.php:300 ../../mod/photos.php:935 #: ../../mod/display.php:149 ../../mod/network.php:321 #: ../../mod/profile.php:308 ../../mod/photos.php:962 -#: ../../mod/network.php:324 +#: ../../mod/network.php:324 ../../mod/photos.php:1041 +#: ../../include/conversation.php:343 msgid "Private Message" msgstr "Mensaje privado" #: ../../mod/profile.php:307 ../../mod/photos.php:1050 #: ../../mod/display.php:156 ../../mod/network.php:365 #: ../../mod/profile.php:315 ../../mod/photos.php:1084 -#: ../../mod/network.php:368 +#: ../../mod/network.php:368 ../../mod/photos.php:1163 +#: ../../include/conversation.php:391 msgid "I like this (toggle)" msgstr "Me gusta esto (cambiar)" #: ../../mod/profile.php:308 ../../mod/photos.php:1051 #: ../../mod/display.php:157 ../../mod/network.php:366 #: ../../mod/profile.php:316 ../../mod/photos.php:1085 -#: ../../mod/network.php:369 +#: ../../mod/network.php:369 ../../mod/photos.php:1164 +#: ../../include/conversation.php:392 msgid "I don't like this (toggle)" msgstr "No me gusta questo (cambiar)" @@ -455,6 +529,8 @@ msgstr "No me gusta questo (cambiar)" #: ../../mod/profile.php:330 ../../mod/photos.php:1106 #: ../../mod/photos.php:1146 ../../mod/photos.php:1175 #: ../../mod/display.php:171 ../../mod/network.php:384 +#: ../../mod/photos.php:1182 ../../mod/photos.php:1221 +#: ../../mod/photos.php:1252 ../../include/conversation.php:407 msgid "This is you" msgstr "Éste/a eres tú" @@ -462,6 +538,8 @@ msgstr "Éste/a eres tú" #: ../../mod/display.php:234 ../../mod/network.php:386 ../../mod/group.php:137 #: ../../mod/profile.php:376 ../../mod/photos.php:1203 #: ../../mod/display.php:238 ../../mod/network.php:393 +#: ../../mod/photos.php:1282 ../../mod/group.php:154 ../../mod/admin.php:471 +#: ../../include/conversation.php:428 msgid "Delete" msgstr "Eliminar" @@ -477,6 +555,7 @@ msgstr "Ver el perfil de $name" #: ../../mod/register.php:422 ../../mod/network.php:471 #: ../../mod/profile.php:430 ../../mod/display.php:317 #: ../../mod/register.php:424 ../../mod/network.php:479 +#: ../../mod/community.php:83 ../../include/text.php:915 msgid "" "Shared content is covered by the <a href=\"http://creativecommons.org/" "licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license." @@ -485,12 +564,12 @@ msgstr "" "creativecommons.org/licenses/by/3.0/deed.it\">Creative Commons Atribución " "3.0</a>." -#: ../../mod/follow.php:167 +#: ../../mod/follow.php:167 ../../mod/follow.php:48 msgid "The profile address specified does not provide adequate information." msgstr "" "La dirección del perfil especificado no proporciona información adecuada." -#: ../../mod/follow.php:173 +#: ../../mod/follow.php:173 ../../mod/follow.php:66 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." @@ -498,11 +577,11 @@ msgstr "" "Perfil limitado. Esta persona no podrá recibir notificaciones directas/" "personales de usted." -#: ../../mod/follow.php:224 +#: ../../mod/follow.php:224 ../../mod/follow.php:130 msgid "Unable to retrieve contact information." msgstr "No ha sido posible recibir la información del contacto." -#: ../../mod/follow.php:270 +#: ../../mod/follow.php:270 ../../mod/follow.php:176 msgid "following" msgstr "siguiendo" @@ -517,11 +596,17 @@ msgstr "Imagen recibida, pero ha fallado al recortarla." #: ../../mod/photos.php:864 ../../mod/register.php:267 #: ../../mod/register.php:274 ../../mod/register.php:281 #: ../../mod/photos.php:531 ../../mod/photos.php:850 ../../mod/photos.php:865 +#: ../../mod/photos.php:143 ../../mod/photos.php:578 ../../mod/photos.php:927 +#: ../../mod/photos.php:942 ../../mod/register.php:316 +#: ../../mod/register.php:323 ../../mod/register.php:330 +#: ../../mod/profile_photo.php:160 ../../mod/profile_photo.php:236 +#: ../../mod/profile_photo.php:245 msgid "Profile Photos" msgstr "Foto del perfil" #: ../../mod/profile_photo.php:61 ../../mod/profile_photo.php:68 #: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:237 +#: ../../mod/profile_photo.php:248 #, php-format msgid "Image size reduction [%s] failed." msgstr "Ha fallado la reducción de las dimensiones de la imagen [%s]." @@ -530,7 +615,7 @@ msgstr "Ha fallado la reducción de las dimensiones de la imagen [%s]." msgid "Unable to process image" msgstr "Imposible procesar la imagen" -#: ../../mod/profile_photo.php:228 +#: ../../mod/profile_photo.php:228 ../../mod/profile_photo.php:239 msgid "Image uploaded successfully." msgstr "Imagen subida con éxito." @@ -539,27 +624,29 @@ msgstr "Imagen subida con éxito." msgid "Welcome to %s" msgstr "Bienvenido a %s" -#: ../../mod/regmod.php:10 +#: ../../mod/regmod.php:10 ../../mod/regmod.php:105 msgid "Please login." msgstr "Accede." -#: ../../mod/regmod.php:54 +#: ../../mod/regmod.php:54 ../../mod/regmod.php:93 #, php-format msgid "Registration revoked for %s" msgstr "Registro anulado para %s" #: ../../mod/regmod.php:92 ../../mod/register.php:310 +#: ../../mod/register.php:367 ../../mod/regmod.php:52 #, php-format msgid "Registration details for %s" msgstr "Detalles de registro para %s" -#: ../../mod/regmod.php:96 +#: ../../mod/regmod.php:96 ../../mod/regmod.php:61 msgid "Account approved." msgstr "Cuenta aprobada." #: ../../mod/profiles.php:21 ../../mod/profiles.php:234 #: ../../mod/profiles.php:339 ../../mod/dfrn_confirm.php:62 #: ../../mod/profiles.php:237 ../../mod/profiles.php:342 +#: ../../mod/profiles.php:236 ../../mod/profiles.php:341 msgid "Profile not found." msgstr "Perfil no encontrado." @@ -568,28 +655,34 @@ msgid "Profile Name is required." msgstr "El nombre de perfil es requerido." #: ../../mod/profiles.php:196 ../../mod/profiles.php:199 +#: ../../mod/profiles.php:198 msgid "Profile updated." msgstr "Perfil actualizado." #: ../../mod/profiles.php:251 ../../mod/profiles.php:254 +#: ../../mod/profiles.php:253 msgid "Profile deleted." msgstr "Perfil eliminado." #: ../../mod/profiles.php:267 ../../mod/profiles.php:298 #: ../../mod/profiles.php:270 ../../mod/profiles.php:301 +#: ../../mod/profiles.php:269 ../../mod/profiles.php:300 msgid "Profile-" msgstr "Perfil-" #: ../../mod/profiles.php:286 ../../mod/profiles.php:325 #: ../../mod/profiles.php:289 ../../mod/profiles.php:328 +#: ../../mod/profiles.php:288 ../../mod/profiles.php:327 msgid "New profile created." msgstr "Nuevo perfil creado." #: ../../mod/profiles.php:304 ../../mod/profiles.php:307 +#: ../../mod/profiles.php:306 msgid "Profile unavailable to clone." msgstr "Imposible duplicar el perfil." #: ../../mod/profiles.php:367 ../../mod/profiles.php:370 +#: ../../mod/profiles.php:413 msgid "" "This is your <strong>public</strong> profile.<br />It <strong>may</strong> " "be visible to anybody using the internet." @@ -598,60 +691,72 @@ msgstr "" "visto por cualquiera usando internet." #: ../../mod/profiles.php:377 ../../mod/profiles.php:380 +#: ../../mod/profiles.php:423 ../../mod/directory.php:112 msgid "Age: " msgstr "Edad : " #: ../../mod/profiles.php:418 ../../mod/profiles.php:422 +#: ../../mod/profiles.php:470 msgid "Profile Image" msgstr "Imagen del Perfil" -#: ../../mod/settings.php:37 +#: ../../mod/settings.php:37 ../../mod/settings.php:64 msgid "Passwords do not match. Password unchanged." msgstr "Las contraseñas no coinciden. La contraseña no ha sido modificada." -#: ../../mod/settings.php:42 +#: ../../mod/settings.php:42 ../../mod/settings.php:69 msgid "Empty passwords are not allowed. Password unchanged." msgstr "" "No se permiten contraseñas vacías. La contraseña no ha sido modificada." -#: ../../mod/settings.php:53 +#: ../../mod/settings.php:53 ../../mod/settings.php:80 msgid "Password changed." msgstr "Contraseña modificada." -#: ../../mod/settings.php:55 +#: ../../mod/settings.php:55 ../../mod/settings.php:82 msgid "Password update failed. Please try again." msgstr "" "La actualización de la contraseña ha fallado. Por favor, pruebe otra vez." #: ../../mod/settings.php:95 ../../mod/settings.php:96 +#: ../../mod/settings.php:188 msgid " Please use a shorter name." msgstr " Usa un nombre más corto." #: ../../mod/settings.php:97 ../../mod/settings.php:98 +#: ../../mod/settings.php:190 msgid " Name too short." msgstr " Nombre demasiado corto." #: ../../mod/settings.php:103 ../../mod/settings.php:104 +#: ../../mod/settings.php:196 msgid " Not valid email." msgstr " Email no válido." #: ../../mod/settings.php:105 ../../mod/settings.php:106 +#: ../../mod/settings.php:198 msgid " Cannot change to that email." msgstr " No se puede usar ese email." #: ../../mod/settings.php:161 ../../mod/settings.php:163 +#: ../../mod/settings.php:257 ../../addon/facebook/facebook.php:303 +#: ../../addon/impressum/impressum.php:64 ../../addon/piwik/piwik.php:94 +#: ../../addon/twitter/twitter.php:275 msgid "Settings updated." msgstr "Configuración actualizada." #: ../../mod/settings.php:211 ../../mod/settings.php:213 +#: ../../mod/settings.php:329 ../../addon/widgets/widgets.php:122 msgid "Plugin Settings" msgstr "Configuración de los Plugin" #: ../../mod/settings.php:212 ../../mod/settings.php:214 +#: ../../mod/settings.php:480 msgid "Account Settings" msgstr "Configuración de la cuenta" #: ../../mod/settings.php:218 ../../mod/settings.php:220 +#: ../../mod/settings.php:322 msgid "No Plugin settings configured" msgstr "Ningún Plugin ha sido configurado" @@ -664,19 +769,21 @@ msgid " (Optional) Allow this OpenID to login to this account." msgstr " (Opcional) Permitir a este OpenID acceder a esta cuenta." #: ../../mod/settings.php:295 ../../mod/settings.php:298 +#: ../../mod/settings.php:442 msgid "Profile is <strong>not published</strong>." msgstr "El perfil <strong>no está publicado</strong>." #: ../../mod/settings.php:352 ../../mod/settings.php:355 +#: ../../mod/settings.php:509 msgid "Default Post Permissions" msgstr "Permisos por defecto para los mensajes" #: ../../mod/search.php:131 ../../mod/network.php:287 -#: ../../mod/network.php:290 +#: ../../mod/network.php:290 ../../include/conversation.php:231 msgid "View in context" msgstr "Ver en el contexto" -#: ../../mod/photos.php:30 +#: ../../mod/photos.php:30 ../../mod/photos.php:37 msgid "Photo Albums" msgstr "Álbum de Fotos" @@ -689,129 +796,150 @@ msgstr "Álbum de Fotos" #: ../../mod/photos.php:850 ../../mod/photos.php:865 ../../mod/photos.php:1233 #: ../../mod/photos.php:1244 ../../include/items.php:982 #: ../../include/items.php:985 ../../include/items.php:988 +#: ../../mod/photos.php:45 ../../mod/photos.php:143 ../../mod/photos.php:858 +#: ../../mod/photos.php:927 ../../mod/photos.php:942 ../../mod/photos.php:1333 +#: ../../mod/photos.php:1345 msgid "Contact Photos" msgstr "Foto del contacto" -#: ../../mod/photos.php:95 +#: ../../mod/photos.php:95 ../../mod/photos.php:132 msgid "Contact information unavailable" msgstr "Información del contacto no disponible" -#: ../../mod/photos.php:116 +#: ../../mod/photos.php:116 ../../mod/photos.php:153 msgid "Album not found." msgstr "Album no encontrado." #: ../../mod/photos.php:134 ../../mod/photos.php:858 ../../mod/photos.php:859 +#: ../../mod/photos.php:171 ../../mod/photos.php:936 msgid "Delete Album" msgstr "Eliminar album" #: ../../mod/photos.php:197 ../../mod/photos.php:1033 -#: ../../mod/photos.php:1067 +#: ../../mod/photos.php:1067 ../../mod/photos.php:234 +#: ../../mod/photos.php:1146 msgid "Delete Photo" msgstr "Eliminar foto" -#: ../../mod/photos.php:468 ../../mod/photos.php:469 +#: ../../mod/photos.php:468 ../../mod/photos.php:469 ../../mod/photos.php:509 msgid "was tagged in a" msgstr "ha sido etiquetado en" #: ../../mod/photos.php:468 ../../mod/like.php:110 ../../mod/photos.php:469 +#: ../../mod/photos.php:509 ../../mod/like.php:106 +#: ../../include/diaspora.php:770 ../../include/conversation.php:31 msgid "photo" msgstr "foto" -#: ../../mod/photos.php:468 ../../mod/photos.php:469 +#: ../../mod/photos.php:468 ../../mod/photos.php:469 ../../mod/photos.php:509 msgid "by" msgstr "por" #: ../../mod/photos.php:558 ../../addon/js_upload/js_upload.php:306 -#: ../../mod/photos.php:559 +#: ../../mod/photos.php:559 ../../mod/photos.php:609 +#: ../../addon/js_upload/js_upload.php:310 msgid "Image exceeds size limit of " msgstr "La imagen supera el limite de tamaño de " -#: ../../mod/photos.php:660 ../../mod/photos.php:661 +#: ../../mod/photos.php:660 ../../mod/photos.php:661 ../../mod/photos.php:744 msgid "No photos selected" msgstr "Ninguna foto seleccionada" -#: ../../mod/photos.php:807 ../../mod/photos.php:808 +#: ../../mod/photos.php:807 ../../mod/photos.php:808 ../../mod/photos.php:885 msgid "Upload Photos" msgstr "Subir fotos" #: ../../mod/photos.php:810 ../../mod/photos.php:853 ../../mod/photos.php:811 -#: ../../mod/photos.php:854 +#: ../../mod/photos.php:854 ../../mod/photos.php:888 ../../mod/photos.php:931 msgid "New album name: " msgstr "Nombre del nuevo álbum: " -#: ../../mod/photos.php:811 ../../mod/photos.php:812 +#: ../../mod/photos.php:811 ../../mod/photos.php:812 ../../mod/photos.php:889 msgid "or existing album name: " msgstr "o nombre de un álbum existente: " #: ../../mod/photos.php:813 ../../mod/photos.php:1028 ../../mod/photos.php:814 -#: ../../mod/photos.php:1062 +#: ../../mod/photos.php:1062 ../../mod/photos.php:891 +#: ../../mod/photos.php:1141 msgid "Permissions" msgstr "Permisos" -#: ../../mod/photos.php:868 ../../mod/photos.php:869 +#: ../../mod/photos.php:868 ../../mod/photos.php:869 ../../mod/photos.php:946 msgid "Edit Album" msgstr "Modifica álbum" #: ../../mod/photos.php:878 ../../mod/photos.php:1228 ../../mod/photos.php:879 -#: ../../mod/photos.php:1263 +#: ../../mod/photos.php:1263 ../../mod/photos.php:956 +#: ../../mod/photos.php:1363 msgid "View Photo" msgstr "Ver foto" -#: ../../mod/photos.php:908 ../../mod/photos.php:909 +#: ../../mod/photos.php:908 ../../mod/photos.php:909 ../../mod/photos.php:985 msgid "Photo not available" msgstr "Foto no disponible" -#: ../../mod/photos.php:929 ../../mod/photos.php:956 +#: ../../mod/photos.php:929 ../../mod/photos.php:956 ../../mod/photos.php:1034 msgid "Edit photo" msgstr "Modificar foto" -#: ../../mod/photos.php:931 ../../mod/photos.php:958 +#: ../../mod/photos.php:931 ../../mod/photos.php:958 ../../mod/photos.php:1035 msgid "Use as profile photo" msgstr "Usar como foto del perfil" -#: ../../mod/photos.php:944 ../../mod/photos.php:973 +#: ../../mod/photos.php:944 ../../mod/photos.php:973 ../../mod/photos.php:1052 msgid "View Full Size" msgstr "Ver a tamaño completo" #: ../../mod/photos.php:1002 ../../mod/photos.php:1036 +#: ../../mod/photos.php:1120 msgid "Tags: " msgstr "Etiquetas: " #: ../../mod/photos.php:1012 ../../mod/photos.php:1046 +#: ../../mod/photos.php:1123 msgid "[Remove any tag]" msgstr "[Borrar todas las etiquetas]" #: ../../mod/photos.php:1021 ../../mod/photos.php:1055 +#: ../../mod/photos.php:1134 msgid "New album name" msgstr "Nuevo nombre de álbum" #: ../../mod/photos.php:1024 ../../mod/photos.php:1058 +#: ../../mod/photos.php:1137 msgid "Caption" msgstr "Título" #: ../../mod/photos.php:1026 ../../mod/photos.php:1060 +#: ../../mod/photos.php:1139 msgid "Add a Tag" msgstr "Añadir una etiqueta" #: ../../mod/photos.php:1030 ../../mod/photos.php:1064 +#: ../../mod/photos.php:1143 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" "Ejemplo: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" #: ../../mod/photos.php:1214 ../../mod/photos.php:1249 +#: ../../mod/photos.php:1350 msgid "Recent Photos" msgstr "Fotos recientes" #: ../../mod/photos.php:1218 ../../mod/photos.php:1253 +#: ../../mod/photos.php:1354 msgid "Upload New Photos" msgstr "Subir nuevas fotos" #: ../../mod/photos.php:1234 ../../mod/photos.php:1269 +#: ../../mod/photos.php:1367 msgid "View Album" msgstr "Ver álbum" #: ../../mod/display.php:15 ../../mod/display.php:307 ../../mod/item.php:546 -#: ../../mod/display.php:312 ../../mod/item.php:598 +#: ../../mod/display.php:312 ../../mod/item.php:598 ../../mod/admin.php:118 +#: ../../mod/admin.php:505 ../../mod/display.php:25 ../../mod/display.php:112 +#: ../../include/items.php:1911 msgid "Item not found." msgstr "Elemento no encontrado." @@ -822,158 +950,171 @@ msgstr "Ver el perfil de $owner_name" #: ../../mod/display.php:260 ../../mod/network.php:436 #: ../../mod/display.php:264 ../../mod/network.php:443 +#: ../../include/conversation.php:491 msgid "to" msgstr "a" #: ../../mod/display.php:261 ../../mod/network.php:437 #: ../../mod/display.php:265 ../../mod/network.php:444 +#: ../../include/conversation.php:492 msgid "Wall-to-Wall" msgstr "Muro-A-Muro" #: ../../mod/display.php:262 ../../mod/network.php:438 #: ../../mod/display.php:266 ../../mod/network.php:445 +#: ../../include/conversation.php:493 msgid "via Wall-To-Wall:" msgstr "via Muro-A-Muro:" #: ../../mod/display.php:300 ../../mod/display.php:305 +#: ../../mod/display.php:105 msgid "Item has been removed." msgstr "El elemento ha sido eliminado." -#: ../../mod/invite.php:28 +#: ../../mod/invite.php:28 ../../mod/invite.php:35 #, php-format msgid "%s : Not a valid email address." msgstr "%s: No es una dirección válida de email." -#: ../../mod/invite.php:32 +#: ../../mod/invite.php:32 ../../mod/invite.php:59 #, php-format msgid "Please join my network on %s" msgstr "Por favor únete a mi red social en %s" -#: ../../mod/invite.php:38 +#: ../../mod/invite.php:38 ../../mod/invite.php:69 #, php-format msgid "%s : Message delivery failed." msgstr "%s: Ha fallado la entrega del mensaje." -#: ../../mod/invite.php:42 +#: ../../mod/invite.php:42 ../../mod/invite.php:73 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." msgstr[0] "%d mensaje enviado." msgstr[1] "%d mensajes enviados." -#: ../../mod/invite.php:57 +#: ../../mod/invite.php:57 ../../mod/invite.php:99 msgid "Send invitations" msgstr "Enviar invitaciones" -#: ../../mod/invite.php:58 +#: ../../mod/invite.php:58 ../../mod/invite.php:100 msgid "Enter email addresses, one per line:" msgstr "Introduce las direcciones de email, una por línea:" #: ../../mod/invite.php:59 ../../mod/message.php:182 ../../mod/message.php:316 +#: ../../mod/message.php:111 ../../mod/message.php:245 +#: ../../mod/invite.php:101 msgid "Your message:" msgstr "Tu mensaje:" -#: ../../mod/invite.php:60 +#: ../../mod/invite.php:60 ../../mod/invite.php:102 #, php-format msgid "Please join my social network on %s" msgstr "Únete a mi red social en % s" -#: ../../mod/invite.php:61 +#: ../../mod/invite.php:61 ../../mod/invite.php:103 msgid "To accept this invitation, please visit:" msgstr "Para aceptar esta invitación, por favor visita:" -#: ../../mod/invite.php:62 +#: ../../mod/invite.php:62 ../../mod/invite.php:104 msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "" "Una vez registrado, por favor contacta conmigo a través de mi página de " "perfil en:" -#: ../../mod/contacts.php:12 +#: ../../mod/contacts.php:12 ../../mod/contacts.php:26 msgid "Invite Friends" msgstr "Invitar amigos" -#: ../../mod/contacts.php:16 +#: ../../mod/contacts.php:16 ../../mod/contacts.php:45 msgid "Connect/Follow" msgstr "Conectar/Seguir" -#: ../../mod/contacts.php:17 +#: ../../mod/contacts.php:17 ../../mod/contacts.php:46 msgid "Example: bob@example.com, http://example.com/barbara" msgstr "Ejemplo: bob@ejemplo.com, http://ejemplo.com/barbara" -#: ../../mod/contacts.php:18 +#: ../../mod/contacts.php:18 ../../mod/contacts.php:47 msgid "Follow" msgstr "Seguir" #: ../../mod/contacts.php:38 ../../mod/contacts.php:119 +#: ../../mod/contacts.php:69 ../../mod/contacts.php:140 msgid "Could not access contact record." msgstr "No se pudo acceder a los datos del contacto." -#: ../../mod/contacts.php:52 +#: ../../mod/contacts.php:52 ../../mod/contacts.php:83 msgid "Could not locate selected profile." msgstr "No se pudo encontrar el perfil seleccionado." -#: ../../mod/contacts.php:83 +#: ../../mod/contacts.php:83 ../../mod/contacts.php:104 msgid "Contact updated." msgstr "Contacto actualizado." #: ../../mod/contacts.php:85 ../../mod/dfrn_request.php:402 +#: ../../mod/dfrn_request.php:405 ../../mod/contacts.php:106 msgid "Failed to update contact record." msgstr "Error al actualizar el contacto." -#: ../../mod/contacts.php:141 +#: ../../mod/contacts.php:141 ../../mod/contacts.php:162 msgid "Contact has been blocked" msgstr "El contacto ha sido bloqueado" -#: ../../mod/contacts.php:141 +#: ../../mod/contacts.php:141 ../../mod/contacts.php:162 msgid "Contact has been unblocked" msgstr "El contacto ha sido desbloqueado" -#: ../../mod/contacts.php:155 +#: ../../mod/contacts.php:155 ../../mod/contacts.php:176 msgid "Contact has been ignored" msgstr "El contacto ha sido ignorado" -#: ../../mod/contacts.php:155 +#: ../../mod/contacts.php:155 ../../mod/contacts.php:176 msgid "Contact has been unignored" msgstr "El contacto es no ignorado" -#: ../../mod/contacts.php:176 +#: ../../mod/contacts.php:176 ../../mod/contacts.php:197 msgid "stopped following" msgstr "dejó de seguir" -#: ../../mod/contacts.php:195 +#: ../../mod/contacts.php:195 ../../mod/contacts.php:218 msgid "Contact has been removed." msgstr "El contacto ha sido eliminado" #: ../../mod/contacts.php:209 ../../mod/dfrn_confirm.php:114 +#: ../../mod/crepair.php:70 ../../mod/fsuggest.php:20 +#: ../../mod/fsuggest.php:92 ../../mod/contacts.php:232 msgid "Contact not found." msgstr "Contacto no encontrado." #: ../../mod/contacts.php:223 ../../mod/contacts.php:344 +#: ../../mod/contacts.php:246 ../../mod/contacts.php:388 msgid "Mutual Friendship" msgstr "Amistad recíproca" #: ../../mod/contacts.php:227 ../../mod/contacts.php:348 +#: ../../mod/contacts.php:250 ../../mod/contacts.php:392 msgid "is a fan of yours" msgstr "es tu fan" #: ../../mod/contacts.php:232 ../../mod/contacts.php:352 +#: ../../mod/contacts.php:255 ../../mod/contacts.php:396 msgid "you are a fan of" msgstr "eres fan de" -#: ../../mod/contacts.php:248 +#: ../../mod/contacts.php:248 ../../mod/contacts.php:274 msgid "Never" msgstr "Nunca" -#: ../../mod/contacts.php:252 +#: ../../mod/contacts.php:252 ../../mod/contacts.php:278 msgid "(Update was successful)" msgstr "(La actualización se ha completado)" -#: ../../mod/contacts.php:252 +#: ../../mod/contacts.php:252 ../../mod/contacts.php:278 msgid "(Update was not successful)" msgstr "(La actualización no se ha completado)" -#: ../../mod/contacts.php:255 +#: ../../mod/contacts.php:255 ../../mod/contacts.php:288 msgid "Contact Editor" msgstr "Editor de contactos" @@ -981,67 +1122,70 @@ msgstr "Editor de contactos" msgid "Visit $name's profile" msgstr "Visita el perfil de $name" -#: ../../mod/contacts.php:257 +#: ../../mod/contacts.php:257 ../../mod/contacts.php:298 msgid "Block/Unblock contact" msgstr "Boquear/Desbloquear contacto" -#: ../../mod/contacts.php:258 +#: ../../mod/contacts.php:258 ../../mod/contacts.php:299 msgid "Ignore contact" msgstr "Ignorar contacto" -#: ../../mod/contacts.php:259 +#: ../../mod/contacts.php:259 ../../mod/contacts.php:304 msgid "Delete contact" msgstr "Eliminar contacto" -#: ../../mod/contacts.php:261 +#: ../../mod/contacts.php:261 ../../mod/contacts.php:308 msgid "Last updated: " msgstr "Última actualización:" -#: ../../mod/contacts.php:262 +#: ../../mod/contacts.php:262 ../../mod/contacts.php:309 msgid "Update public posts: " msgstr "Actualizar mensajes públicos: " -#: ../../mod/contacts.php:264 +#: ../../mod/contacts.php:264 ../../mod/contacts.php:311 +#: ../../mod/admin.php:704 msgid "Update now" msgstr "Actualizar ahora" -#: ../../mod/contacts.php:267 +#: ../../mod/contacts.php:267 ../../mod/contacts.php:314 msgid "Unblock this contact" msgstr "Desbloquear a este contacto" -#: ../../mod/contacts.php:267 +#: ../../mod/contacts.php:267 ../../mod/contacts.php:314 msgid "Block this contact" msgstr "Bloquear a este contacto" -#: ../../mod/contacts.php:268 +#: ../../mod/contacts.php:268 ../../mod/contacts.php:315 msgid "Unignore this contact" msgstr "Eliminar de contactos ignorados" -#: ../../mod/contacts.php:268 +#: ../../mod/contacts.php:268 ../../mod/contacts.php:315 msgid "Ignore this contact" msgstr "Agregar a contactos ignorados" -#: ../../mod/contacts.php:271 +#: ../../mod/contacts.php:271 ../../mod/contacts.php:318 msgid "Currently blocked" msgstr "Bloqueados" -#: ../../mod/contacts.php:272 +#: ../../mod/contacts.php:272 ../../mod/contacts.php:319 msgid "Currently ignored" msgstr "Ignorados" -#: ../../mod/contacts.php:305 +#: ../../mod/contacts.php:305 ../../mod/contacts.php:349 msgid "Show Blocked Connections" msgstr "Mostrar conexiones bloqueadas" -#: ../../mod/contacts.php:305 +#: ../../mod/contacts.php:305 ../../mod/contacts.php:349 msgid "Hide Blocked Connections" msgstr "Esconder conexiones bloqueadas" #: ../../mod/contacts.php:307 ../../mod/directory.php:38 +#: ../../mod/contacts.php:351 ../../mod/directory.php:55 msgid "Finding: " msgstr "Busco: " -#: ../../mod/contacts.php:308 +#: ../../mod/contacts.php:308 ../../mod/contacts.php:352 +#: ../../mod/directory.php:57 msgid "Find" msgstr "Encontrar" @@ -1049,7 +1193,8 @@ msgstr "Encontrar" msgid "Visit $username's profile" msgstr "Visita el perfil de $username" -#: ../../mod/contacts.php:369 +#: ../../mod/contacts.php:369 ../../mod/contacts.php:413 +#: ../../include/Contact.php:125 ../../include/conversation.php:613 msgid "Edit contact" msgstr "Modificar contacto" @@ -1061,19 +1206,19 @@ msgstr "Información sobre privacidad remota no disponible." msgid "Visible to:" msgstr "Visible a:" -#: ../../mod/register.php:47 +#: ../../mod/register.php:47 ../../mod/register.php:66 msgid "Invalid OpenID url" msgstr "Url OpenID no valido" -#: ../../mod/register.php:62 +#: ../../mod/register.php:62 ../../mod/register.php:81 msgid "Please enter the required information." msgstr "Por favor, introduzca la información necesaria." -#: ../../mod/register.php:74 +#: ../../mod/register.php:74 ../../mod/register.php:95 msgid "Please use a shorter name." msgstr "Por favor, use un nombre más corto." -#: ../../mod/register.php:76 +#: ../../mod/register.php:76 ../../mod/register.php:97 msgid "Name too short." msgstr "El nombre es demasiado corto." @@ -1081,21 +1226,21 @@ msgstr "El nombre es demasiado corto." msgid "That doesn\\'t appear to be your full (First Last) name." msgstr "Ese no parece ser su nombre completo (Nombre Apellido)." -#: ../../mod/register.php:92 +#: ../../mod/register.php:92 ../../mod/register.php:117 msgid "Your email domain is not among those allowed on this site." msgstr "" "Su dominio de correo electrónico no se encuentra entre los permitidos en " "este sitio." -#: ../../mod/register.php:95 +#: ../../mod/register.php:95 ../../mod/register.php:120 msgid "Not a valid email address." msgstr "No es una dirección de correo electrónico válida." -#: ../../mod/register.php:101 +#: ../../mod/register.php:101 ../../mod/register.php:130 msgid "Cannot use that email." msgstr "No se puede utilizar estecorreo electrónico." -#: ../../mod/register.php:106 +#: ../../mod/register.php:106 ../../mod/register.php:136 msgid "" "Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and " "must also begin with a letter." @@ -1103,51 +1248,52 @@ msgstr "" "Su \"apodo\"sólo puede contener \"az\", \"0-9\", \"-\", y \"_\", y también " "debe empezar por una letra." -#: ../../mod/register.php:112 +#: ../../mod/register.php:112 ../../mod/register.php:142 +#: ../../mod/register.php:243 msgid "Nickname is already registered. Please choose another." msgstr "Apodo ya registrado. Por favor, elija otro." -#: ../../mod/register.php:131 +#: ../../mod/register.php:131 ../../mod/register.php:161 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "ERROR GRAVE: La generación de claves de seguridad ha fallado." -#: ../../mod/register.php:198 +#: ../../mod/register.php:198 ../../mod/register.php:229 msgid "An error occurred during registration. Please try again." msgstr "" "Se produjo un error durante el registro. Por favor, inténtelo de nuevo." -#: ../../mod/register.php:216 +#: ../../mod/register.php:216 ../../mod/register.php:265 msgid "An error occurred creating your default profile. Please try again." msgstr "" "Error al crear su perfil predeterminado. Por favor, inténtelo de nuevo." -#: ../../mod/register.php:315 +#: ../../mod/register.php:315 ../../mod/register.php:375 msgid "" "Registration successful. Please check your email for further instructions." msgstr "" "Se ha registrado con éxito. Por favor, consulte su correo electrónico para " "obtener instrucciones adicionales." -#: ../../mod/register.php:319 +#: ../../mod/register.php:319 ../../mod/register.php:379 msgid "Failed to send email message. Here is the message that failed." msgstr "" "Error al enviar mensaje de correo electrónico. Aquí está el mensaje no " "enviado." -#: ../../mod/register.php:324 +#: ../../mod/register.php:324 ../../mod/register.php:384 msgid "Your registration can not be processed." msgstr "Su registro no se puede procesar." -#: ../../mod/register.php:347 +#: ../../mod/register.php:347 ../../mod/register.php:421 #, php-format msgid "Registration request at %s" msgstr "Solicitud de registro en% s" -#: ../../mod/register.php:351 +#: ../../mod/register.php:351 ../../mod/register.php:430 msgid "Your registration is pending approval by the site owner." msgstr "Su registro está pendiente de aprobación por el propietario del sitio." -#: ../../mod/register.php:399 +#: ../../mod/register.php:399 ../../mod/register.php:479 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking 'Register'." @@ -1155,7 +1301,7 @@ msgstr "" "Usted puede (opcionalmente) rellenar este formulario a través de OpenID " "mediante el suministro de su OpenID y haciendo clic en 'Registrar '." -#: ../../mod/register.php:400 +#: ../../mod/register.php:400 ../../mod/register.php:480 msgid "" "If you are not familiar with OpenID, please leave that field blank and fill " "in the rest of the items." @@ -1163,7 +1309,7 @@ msgstr "" "Si usted no está familiarizado con OpenID, por favor deje ese campo en " "blanco y rellene el resto de los elementos." -#: ../../mod/register.php:401 +#: ../../mod/register.php:401 ../../mod/register.php:481 msgid "Your OpenID (optional): " msgstr "Tu OpenID (opcional):" @@ -1176,32 +1322,43 @@ msgstr "" "sus nombres reales." #: ../../mod/register.php:413 ../../mod/register.php:415 +#: ../../mod/register.php:495 msgid "Include your profile in member directory?" msgstr "¿Incluir su perfil en el directorio de miembros?" #: ../../mod/register.php:416 ../../mod/dfrn_request.php:618 -#: ../../mod/register.php:418 +#: ../../mod/register.php:418 ../../mod/dfrn_request.php:641 +#: ../../mod/settings.php:415 ../../mod/settings.php:421 +#: ../../mod/settings.php:429 ../../mod/settings.php:433 +#: ../../mod/register.php:498 ../../mod/profiles.php:354 msgid "Yes" msgstr "Sí" #: ../../mod/register.php:417 ../../mod/dfrn_request.php:619 -#: ../../mod/register.php:419 +#: ../../mod/register.php:419 ../../mod/dfrn_request.php:642 +#: ../../mod/settings.php:415 ../../mod/settings.php:421 +#: ../../mod/settings.php:429 ../../mod/settings.php:433 +#: ../../mod/register.php:499 ../../mod/profiles.php:355 msgid "No" msgstr "No" #: ../../mod/register.php:429 ../../mod/register.php:431 +#: ../../mod/register.php:515 ../../mod/admin.php:301 msgid "Registration" msgstr "Registro" #: ../../mod/register.php:437 ../../mod/register.php:439 +#: ../../mod/register.php:523 msgid "Your Full Name (e.g. Joe Smith): " msgstr "Su nombre completo (por ejemplo, Joe Smith):" #: ../../mod/register.php:438 ../../mod/register.php:440 +#: ../../mod/register.php:524 msgid "Your Email Address: " msgstr "Su dirección de correo electrónico:" #: ../../mod/register.php:439 ../../mod/register.php:441 +#: ../../mod/register.php:525 msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be '<strong>nickname@$sitename</" @@ -1211,14 +1368,15 @@ msgstr "" "de perfil en este sitio va a ser '<strong>nickname@$sitename</strong>'." #: ../../mod/register.php:440 ../../mod/register.php:442 +#: ../../mod/register.php:526 msgid "Choose a nickname: " msgstr "Escoge un apodo: " -#: ../../mod/install.php:30 +#: ../../mod/install.php:30 ../../mod/install.php:34 msgid "Could not create/connect to database." msgstr "No se pudo crear o conectarse a la base de datos." -#: ../../mod/install.php:35 +#: ../../mod/install.php:35 ../../mod/install.php:39 msgid "Connected to database." msgstr "Conectado a la base de datos." @@ -1226,7 +1384,7 @@ msgstr "Conectado a la base de datos." msgid "Database import succeeded." msgstr "Importación de la base de datos completada." -#: ../../mod/install.php:67 +#: ../../mod/install.php:67 ../../mod/install.php:78 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the poller." msgstr "" @@ -1234,14 +1392,15 @@ msgstr "" "para el encuestador" #: ../../mod/install.php:68 ../../mod/install.php:75 ../../mod/install.php:175 +#: ../../mod/install.php:79 ../../mod/install.php:89 ../../mod/install.php:207 msgid "Please see the file \"INSTALL.txt\"." msgstr "Por favor, consulte el archivo \"INSTALL.txt\"." -#: ../../mod/install.php:73 +#: ../../mod/install.php:73 ../../mod/install.php:87 msgid "Database import failed." msgstr "La importación de la base de datos ha fallado." -#: ../../mod/install.php:74 +#: ../../mod/install.php:74 ../../mod/install.php:88 msgid "" "You may need to import the file \"database.sql\" manually using phpmyadmin " "or mysql." @@ -1249,17 +1408,17 @@ msgstr "" "Puede que tenga que importar el archivo \"Database.sql\" manualmente usando " "phpmyadmin o mysql." -#: ../../mod/install.php:84 +#: ../../mod/install.php:84 ../../mod/install.php:101 msgid "Welcome to Friendika." msgstr "Bienvenido a Friendika." -#: ../../mod/install.php:124 +#: ../../mod/install.php:124 ../../mod/install.php:153 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "" "No se pudo encontrar una versión de línea de comandos de PHP en la ruta del " "servidor web." -#: ../../mod/install.php:125 +#: ../../mod/install.php:125 ../../mod/install.php:154 msgid "" "This is required. Please adjust the configuration file .htconfig.php " "accordingly." @@ -1267,7 +1426,7 @@ msgstr "" "Esto es necesario. Por favor, modifica el archivo de configuración. htconfig." "php en consecuencia." -#: ../../mod/install.php:132 +#: ../../mod/install.php:132 ../../mod/install.php:161 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." @@ -1275,11 +1434,11 @@ msgstr "" "La versión en línea de comandos de PHP en su sistema no tiene " "\"register_argc_argv\" habilitado." -#: ../../mod/install.php:133 +#: ../../mod/install.php:133 ../../mod/install.php:162 msgid "This is required for message delivery to work." msgstr "Esto es necesario para el funcionamiento de la entrega de mensajes." -#: ../../mod/install.php:155 +#: ../../mod/install.php:155 ../../mod/install.php:184 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" @@ -1287,7 +1446,7 @@ msgstr "" "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de " "generar claves de cifrado" -#: ../../mod/install.php:156 +#: ../../mod/install.php:156 ../../mod/install.php:185 msgid "" "If running under Windows, please see \"http://www.php.net/manual/en/openssl." "installation.php\"." @@ -1295,33 +1454,33 @@ msgstr "" "Si se ejecuta en Windows, por favor consulte la sección \"http://www.php.net/" "manual/en/openssl.installation.php\"." -#: ../../mod/install.php:165 +#: ../../mod/install.php:165 ../../mod/install.php:194 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "" "Error: El módulo servidor web Apache mod-rewrite es necesario pero no está " "instalado." -#: ../../mod/install.php:167 +#: ../../mod/install.php:167 ../../mod/install.php:196 msgid "Error: libCURL PHP module required but not installed." msgstr "Error: El módulo libcurl PHP es necesario, pero no está instalado." -#: ../../mod/install.php:169 +#: ../../mod/install.php:169 ../../mod/install.php:198 msgid "" "Error: GD graphics PHP module with JPEG support required but not installed." msgstr "" "Error: El módulo de gráficos GD de PHP con soporte JPEG es necesario, pero " "no está instalado." -#: ../../mod/install.php:171 +#: ../../mod/install.php:171 ../../mod/install.php:200 msgid "Error: openssl PHP module required but not installed." msgstr "Error: El módulo openssl PHP es necesario, pero no está instalado." -#: ../../mod/install.php:173 +#: ../../mod/install.php:173 ../../mod/install.php:202 msgid "Error: mysqli PHP module required but not installed." msgstr "Error: El módulo PHP mysqli es necesario, pero no está instalado." -#: ../../mod/install.php:184 +#: ../../mod/install.php:184 ../../mod/install.php:216 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." @@ -1330,7 +1489,7 @@ msgstr "" "llamado \". htconfig.php\" en la carpeta superior de su servidor web y es " "incapaz de hacerlo." -#: ../../mod/install.php:185 +#: ../../mod/install.php:185 ../../mod/install.php:217 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." @@ -1339,7 +1498,7 @@ msgstr "" "puede que no sea capaz de escribir archivos en la carpeta - incluso si usted " "puede." -#: ../../mod/install.php:186 +#: ../../mod/install.php:186 ../../mod/install.php:218 msgid "" "Please check with your site documentation or support people to see if this " "situation can be corrected." @@ -1347,7 +1506,7 @@ msgstr "" "Por favor, consulte el sitio de documentación o gente de ayuda para ver si " "esta situación se puede corregir." -#: ../../mod/install.php:187 +#: ../../mod/install.php:187 ../../mod/install.php:219 msgid "" "If not, you may be required to perform a manual installation. Please see the " "file \"INSTALL.txt\" for instructions." @@ -1355,7 +1514,7 @@ msgstr "" "Si no, deberá proceder con la instalación manual. Por favor, consulte el " "archivo \"INSTALL.txt\"para obtener instrucciones." -#: ../../mod/install.php:196 +#: ../../mod/install.php:196 ../../mod/install.php:228 msgid "" "The database configuration file \".htconfig.php\" could not be written. " "Please use the enclosed text to create a configuration file in your web " @@ -1365,7 +1524,7 @@ msgstr "" "escribir. Por favor, utilice el texto adjunto para crear un archivo de " "configuración en la raíz de su servidor web." -#: ../../mod/install.php:211 +#: ../../mod/install.php:211 ../../mod/install.php:243 msgid "Errors encountered creating database tables." msgstr "Errores encontrados creando las tablas de bases de datos." @@ -1378,82 +1537,91 @@ msgid "New Item View" msgstr "Vista de nuevos elementos" #: ../../mod/network.php:149 ../../mod/network.php:151 +#: ../../mod/network.php:228 msgid "No such group" msgstr "Ningún grupo" #: ../../mod/network.php:160 ../../mod/network.php:162 +#: ../../mod/network.php:239 msgid "Group is empty" msgstr "El grupo está vacío" #: ../../mod/network.php:164 ../../mod/network.php:166 +#: ../../mod/network.php:244 msgid "Group: " msgstr "Grupo: " -#: ../../mod/notifications.php:28 +#: ../../mod/notifications.php:28 ../../mod/notifications.php:26 msgid "Invalid request identifier." msgstr "Solicitud de identificación no válida." #: ../../mod/notifications.php:31 ../../mod/notifications.php:134 +#: ../../mod/notifications.php:35 ../../mod/notifications.php:118 +#: ../../mod/notifications.php:164 msgid "Discard" msgstr "Descartar" #: ../../mod/notifications.php:41 ../../mod/notifications.php:133 +#: ../../mod/notifications.php:47 ../../mod/notifications.php:117 +#: ../../mod/notifications.php:163 msgid "Ignore" msgstr "Ignorar" -#: ../../mod/notifications.php:72 +#: ../../mod/notifications.php:72 ../../mod/notifications.php:78 msgid "Show Ignored Requests" msgstr "Mostrar peticiones ignoradas" -#: ../../mod/notifications.php:72 +#: ../../mod/notifications.php:72 ../../mod/notifications.php:78 msgid "Hide Ignored Requests" msgstr "Esconder peticiones ignoradas" -#: ../../mod/notifications.php:105 +#: ../../mod/notifications.php:105 ../../mod/notifications.php:134 msgid "Claims to be known to you: " msgstr "Dice conocerte:" -#: ../../mod/notifications.php:105 +#: ../../mod/notifications.php:105 ../../mod/notifications.php:134 msgid "yes" msgstr "sí" -#: ../../mod/notifications.php:105 +#: ../../mod/notifications.php:105 ../../mod/notifications.php:134 msgid "no" msgstr "no" -#: ../../mod/notifications.php:111 +#: ../../mod/notifications.php:111 ../../mod/notifications.php:141 msgid "Approve as: " msgstr "Aprobar como:" -#: ../../mod/notifications.php:112 +#: ../../mod/notifications.php:112 ../../mod/notifications.php:142 msgid "Friend" msgstr "Amig@" -#: ../../mod/notifications.php:113 +#: ../../mod/notifications.php:113 ../../mod/notifications.php:143 msgid "Fan/Admirer" msgstr "Fan/Admirador" -#: ../../mod/notifications.php:120 +#: ../../mod/notifications.php:120 ../../mod/notifications.php:105 +#: ../../mod/notifications.php:150 msgid "Notification type: " msgstr "Tipo di notificación: " -#: ../../mod/notifications.php:121 +#: ../../mod/notifications.php:121 ../../mod/notifications.php:151 msgid "Friend/Connect Request" msgstr "Solicitud de Amistad/Conexión" -#: ../../mod/notifications.php:121 +#: ../../mod/notifications.php:121 ../../mod/notifications.php:151 msgid "New Follower" msgstr "Nuevo seguidor" -#: ../../mod/notifications.php:131 +#: ../../mod/notifications.php:131 ../../mod/notifications.php:114 +#: ../../mod/notifications.php:161 ../../mod/admin.php:469 msgid "Approve" msgstr "Aprobar" -#: ../../mod/notifications.php:140 +#: ../../mod/notifications.php:140 ../../mod/notifications.php:170 msgid "No notifications." msgstr "Ninguna notificación." -#: ../../mod/notifications.php:164 +#: ../../mod/notifications.php:164 ../../mod/admin.php:468 msgid "No registrations." msgstr "Ningún registro." @@ -1462,85 +1630,90 @@ msgid "This introduction has already been accepted." msgstr "Esta presentación ya ha sido aceptada." #: ../../mod/dfrn_request.php:116 ../../mod/dfrn_request.php:347 +#: ../../mod/dfrn_request.php:349 msgid "Profile location is not valid or does not contain profile information." msgstr "" "Ubicación del perfil no es válido o no contiene la información de perfil." #: ../../mod/dfrn_request.php:121 ../../mod/dfrn_request.php:352 +#: ../../mod/dfrn_request.php:354 msgid "Warning: profile location has no identifiable owner name." msgstr "" "Aviso: Ubicación del perfil no tiene nombre del propietario identificable." #: ../../mod/dfrn_request.php:123 ../../mod/dfrn_request.php:354 +#: ../../mod/dfrn_request.php:356 msgid "Warning: profile location has no profile photo." msgstr "Advertencia: ubicación del perfil no tiene foto de perfil." #: ../../mod/dfrn_request.php:126 ../../mod/dfrn_request.php:357 +#: ../../mod/dfrn_request.php:359 #, 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 parámetro requerido no se encontró en el lugar determinado" msgstr[1] "% d parámetros requeridos no se encontraron en el lugar determinado" -#: ../../mod/dfrn_request.php:164 +#: ../../mod/dfrn_request.php:164 ../../mod/dfrn_request.php:165 msgid "Introduction complete." msgstr "Presentación completa." -#: ../../mod/dfrn_request.php:188 +#: ../../mod/dfrn_request.php:188 ../../mod/dfrn_request.php:189 msgid "Unrecoverable protocol error." msgstr "Error de protocolo irrecuperable." -#: ../../mod/dfrn_request.php:216 +#: ../../mod/dfrn_request.php:216 ../../mod/dfrn_request.php:217 msgid "Profile unavailable." msgstr "Perfil no disponible." -#: ../../mod/dfrn_request.php:241 +#: ../../mod/dfrn_request.php:241 ../../mod/dfrn_request.php:242 #, php-format msgid "%s has received too many connection requests today." msgstr "% s ha recibido demasiadas solicitudes de conexión hoy." -#: ../../mod/dfrn_request.php:242 +#: ../../mod/dfrn_request.php:242 ../../mod/dfrn_request.php:243 msgid "Spam protection measures have been invoked." msgstr "Han sido activadas las medidas de protección contra spam." -#: ../../mod/dfrn_request.php:243 +#: ../../mod/dfrn_request.php:243 ../../mod/dfrn_request.php:244 msgid "Friends are advised to please try again in 24 hours." msgstr "Se aconseja a los amigos intentarlo de nuevo en 24 horas." -#: ../../mod/dfrn_request.php:273 +#: ../../mod/dfrn_request.php:273 ../../mod/dfrn_request.php:274 msgid "Invalid locator" msgstr "Localizador no válido" -#: ../../mod/dfrn_request.php:292 +#: ../../mod/dfrn_request.php:292 ../../mod/dfrn_request.php:294 msgid "Unable to resolve your name at the provided location." msgstr "No se ha podido resolver tu nombre en la ubicación indicada." -#: ../../mod/dfrn_request.php:305 +#: ../../mod/dfrn_request.php:305 ../../mod/dfrn_request.php:307 msgid "You have already introduced yourself here." msgstr "Ya te has presentado aquí." -#: ../../mod/dfrn_request.php:309 +#: ../../mod/dfrn_request.php:309 ../../mod/dfrn_request.php:311 #, php-format msgid "Apparently you are already friends with %s." msgstr "Al parecer, ya eres amigo de % s." -#: ../../mod/dfrn_request.php:330 +#: ../../mod/dfrn_request.php:330 ../../mod/dfrn_request.php:332 msgid "Invalid profile URL." msgstr "Dirección de perfil no válida." -#: ../../mod/dfrn_request.php:336 +#: ../../mod/dfrn_request.php:336 ../../mod/dfrn_request.php:338 +#: ../../mod/follow.php:20 msgid "Disallowed profile URL." msgstr "Dirección de perfil no permitida." -#: ../../mod/dfrn_request.php:423 +#: ../../mod/dfrn_request.php:423 ../../mod/dfrn_request.php:426 msgid "Your introduction has been sent." msgstr "Su presentación ha sido enviada." -#: ../../mod/dfrn_request.php:477 +#: ../../mod/dfrn_request.php:477 ../../mod/dfrn_request.php:479 msgid "Please login to confirm introduction." msgstr "Inicia sesión para confirmar la presentación." -#: ../../mod/dfrn_request.php:491 +#: ../../mod/dfrn_request.php:491 ../../mod/dfrn_request.php:493 msgid "" "Incorrect identity currently logged in. Please login to <strong>this</" "strong> profile." @@ -1549,19 +1722,20 @@ msgstr "" "strong> perfil." #: ../../mod/dfrn_request.php:536 ../../include/items.php:1341 -#: ../../include/items.php:1364 +#: ../../include/items.php:1364 ../../mod/dfrn_request.php:540 +#: ../../include/items.php:1577 msgid "[Name Withheld]" msgstr "[Nombre oculto]" -#: ../../mod/dfrn_request.php:543 +#: ../../mod/dfrn_request.php:543 ../../mod/dfrn_request.php:547 msgid "Introduction received at " msgstr "Presentación recibida en" -#: ../../mod/dfrn_request.php:615 +#: ../../mod/dfrn_request.php:615 ../../mod/dfrn_request.php:637 msgid "Friend/Connection Request" msgstr "Solicitud de Amistad/Conexión" -#: ../../mod/dfrn_request.php:616 +#: ../../mod/dfrn_request.php:616 ../../mod/dfrn_request.php:639 msgid "Please answer the following:" msgstr "Por favor responda lo siguiente:" @@ -1569,7 +1743,7 @@ msgstr "Por favor responda lo siguiente:" msgid "Does $name know you?" msgstr "$name te conoce?" -#: ../../mod/dfrn_request.php:620 +#: ../../mod/dfrn_request.php:620 ../../mod/dfrn_request.php:643 msgid "Add a personal note:" msgstr "Agregar una nota personal:" @@ -1581,11 +1755,12 @@ msgstr "" "Por favor, introduzca su dirección de perfil de uno de las siguientes redes " "sociales soportadas:" -#: ../../mod/dfrn_request.php:622 +#: ../../mod/dfrn_request.php:622 ../../mod/dfrn_request.php:645 +#: ../../include/contact_selectors.php:78 msgid "Friendika" msgstr "Friendika" -#: ../../mod/dfrn_request.php:623 +#: ../../mod/dfrn_request.php:623 ../../mod/dfrn_request.php:646 msgid "StatusNet/Federated Social Web" msgstr "StatusNet/Federated Social Web" @@ -1601,30 +1776,36 @@ msgstr "Red pública (insegura)" msgid "Your profile address:" msgstr "Su dirección de perfil:" -#: ../../mod/dfrn_request.php:627 +#: ../../mod/dfrn_request.php:627 ../../mod/dfrn_request.php:650 msgid "Submit Request" msgstr "Enviar solicitud" #: ../../mod/dfrn_request.php:628 ../../mod/tagrm.php:11 #: ../../mod/tagrm.php:94 ../../addon/js_upload/js_upload.php:41 +#: ../../mod/dfrn_request.php:651 ../../addon/js_upload/js_upload.php:45 msgid "Cancel" msgstr "Cancelar" -#: ../../mod/like.php:110 +#: ../../mod/like.php:110 ../../mod/like.php:106 +#: ../../addon/facebook/facebook.php:962 ../../include/diaspora.php:770 +#: ../../include/conversation.php:26 ../../include/conversation.php:35 msgid "status" msgstr "estado" -#: ../../mod/like.php:127 +#: ../../mod/like.php:127 ../../mod/like.php:123 +#: ../../addon/facebook/facebook.php:966 ../../include/diaspora.php:786 +#: ../../include/conversation.php:43 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "A %1$s gusta %3$s de %2$s" -#: ../../mod/like.php:129 +#: ../../mod/like.php:129 ../../mod/like.php:125 +#: ../../include/conversation.php:46 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "A %1$s no gusta %3$s de %2$s" -#: ../../mod/lostpass.php:38 +#: ../../mod/lostpass.php:38 ../../mod/lostpass.php:42 #, php-format msgid "Password reset requested at %s" msgstr "Restablecer la contraseña solicitada en %s" @@ -1648,15 +1829,15 @@ msgstr "Por favor, introduzca su contraseña para la verificación:" msgid "Applications" msgstr "Aplicaciones" -#: ../../mod/directory.php:32 +#: ../../mod/directory.php:32 ../../mod/directory.php:40 msgid "Global Directory" msgstr "Directorio global" -#: ../../mod/item.php:37 +#: ../../mod/item.php:37 ../../mod/item.php:83 msgid "Unable to locate original post." msgstr "No se puede encontrar post original." -#: ../../mod/item.php:98 ../../mod/item.php:126 +#: ../../mod/item.php:98 ../../mod/item.php:126 ../../mod/item.php:198 msgid "Empty post discarded." msgstr "Mensaje vacío descartado." @@ -1670,11 +1851,11 @@ msgstr "%s ha comentado en tu post en %s" msgid "%s posted on your profile wall at %s" msgstr "%s ha publicado en tu muro en %s" -#: ../../mod/item.php:471 ../../mod/item.php:523 +#: ../../mod/item.php:471 ../../mod/item.php:523 ../../mod/item.php:800 msgid "System error. Post not saved." msgstr "Error del sistema. Mensaje no guardado." -#: ../../mod/item.php:489 ../../mod/item.php:541 +#: ../../mod/item.php:489 ../../mod/item.php:541 ../../mod/item.php:819 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendika social network." @@ -1686,7 +1867,7 @@ msgstr "" msgid "You may visit them online at" msgstr "Puede visitarle online en" -#: ../../mod/item.php:493 ../../mod/item.php:545 +#: ../../mod/item.php:493 ../../mod/item.php:545 ../../mod/item.php:822 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." @@ -1694,7 +1875,7 @@ msgstr "" "Por favor contacte al remitente respondiendo a este mensaje si no desea " "recibir estos mensajes." -#: ../../mod/item.php:495 ../../mod/item.php:547 +#: ../../mod/item.php:495 ../../mod/item.php:547 ../../mod/item.php:824 #, php-format msgid "%s posted an update." msgstr "%s ha publicado una actualización." @@ -1715,108 +1896,112 @@ msgstr "Seleccione una etiqueta para eliminar:" msgid "Remove" msgstr "Eliminar" -#: ../../mod/message.php:18 +#: ../../mod/message.php:18 ../../mod/message.php:23 msgid "No recipient selected." msgstr "Ningún destinatario seleccionado" -#: ../../mod/message.php:23 +#: ../../mod/message.php:23 ../../include/message.php:13 msgid "[no subject]" msgstr "[sin asunto]" -#: ../../mod/message.php:34 +#: ../../mod/message.php:34 ../../mod/message.php:26 msgid "Unable to locate contact information." msgstr "No se puede encontrar información del contacto." -#: ../../mod/message.php:102 +#: ../../mod/message.php:102 ../../mod/message.php:31 msgid "Message sent." msgstr "Mensaje enviado." -#: ../../mod/message.php:105 +#: ../../mod/message.php:105 ../../mod/message.php:29 msgid "Message could not be sent." msgstr "El mensaje no ha podido ser enviado." #: ../../mod/message.php:125 ../../include/nav.php:100 +#: ../../mod/message.php:51 ../../include/nav.php:102 msgid "Messages" msgstr "Mensajes" -#: ../../mod/message.php:126 +#: ../../mod/message.php:126 ../../mod/message.php:52 msgid "Inbox" msgstr "Entrada" -#: ../../mod/message.php:127 +#: ../../mod/message.php:127 ../../mod/message.php:53 msgid "Outbox" msgstr "Enviados" -#: ../../mod/message.php:128 +#: ../../mod/message.php:128 ../../mod/message.php:54 msgid "New Message" msgstr "Nuevo mensaje" -#: ../../mod/message.php:142 +#: ../../mod/message.php:142 ../../mod/message.php:68 msgid "Message deleted." msgstr "Mensaje eliminado." -#: ../../mod/message.php:158 +#: ../../mod/message.php:158 ../../mod/message.php:84 msgid "Conversation removed." msgstr "Conversación eliminada." -#: ../../mod/message.php:177 +#: ../../mod/message.php:177 ../../mod/message.php:106 msgid "Send Private Message" msgstr "Enviar mensaje privado" #: ../../mod/message.php:178 ../../mod/message.php:312 +#: ../../mod/message.php:107 ../../mod/message.php:241 msgid "To:" msgstr "A:" #: ../../mod/message.php:179 ../../mod/message.php:313 +#: ../../mod/message.php:108 ../../mod/message.php:242 msgid "Subject:" msgstr "Asunto:" -#: ../../mod/message.php:221 +#: ../../mod/message.php:221 ../../mod/message.php:150 msgid "No messages." msgstr "No hay mensajes." -#: ../../mod/message.php:234 +#: ../../mod/message.php:234 ../../mod/message.php:163 msgid "Delete conversation" msgstr "Eliminar conversación" -#: ../../mod/message.php:264 +#: ../../mod/message.php:264 ../../mod/message.php:193 msgid "Message not available." msgstr "Mensaje no disponibile." -#: ../../mod/message.php:301 +#: ../../mod/message.php:301 ../../mod/message.php:230 msgid "Delete message" msgstr "Borrar mensaje" -#: ../../mod/message.php:311 +#: ../../mod/message.php:311 ../../mod/message.php:240 msgid "Send Reply" msgstr "Enviar respuesta" -#: ../../mod/dfrn_confirm.php:231 +#: ../../mod/dfrn_confirm.php:231 ../../mod/dfrn_confirm.php:234 msgid "Response from remote site was not understood." msgstr "La respuesta desde el sitio remoto no ha sido entendida." -#: ../../mod/dfrn_confirm.php:240 +#: ../../mod/dfrn_confirm.php:240 ../../mod/dfrn_confirm.php:243 msgid "Unexpected response from remote site: " msgstr "Respuesta inesperada desde el sitio remoto:" -#: ../../mod/dfrn_confirm.php:248 +#: ../../mod/dfrn_confirm.php:248 ../../mod/dfrn_confirm.php:251 msgid "Confirmation completed successfully." msgstr "Confirmación completada con éxito." #: ../../mod/dfrn_confirm.php:250 ../../mod/dfrn_confirm.php:264 -#: ../../mod/dfrn_confirm.php:271 +#: ../../mod/dfrn_confirm.php:271 ../../mod/dfrn_confirm.php:253 +#: ../../mod/dfrn_confirm.php:267 ../../mod/dfrn_confirm.php:274 msgid "Remote site reported: " msgstr "El sito remoto informó:" -#: ../../mod/dfrn_confirm.php:262 +#: ../../mod/dfrn_confirm.php:262 ../../mod/dfrn_confirm.php:265 msgid "Temporary failure. Please wait and try again." msgstr "Error temporal. Por favor, espere y vuelva a intentarlo." -#: ../../mod/dfrn_confirm.php:269 +#: ../../mod/dfrn_confirm.php:269 ../../mod/dfrn_confirm.php:272 msgid "Introduction failed or was revoked." msgstr "La presentación ha fallado o ha sido anulada." -#: ../../mod/dfrn_confirm.php:387 +#: ../../mod/dfrn_confirm.php:387 ../../mod/dfrn_confirm.php:409 msgid "Unable to set contact photo." msgstr "Imposible establecer la foto del contacto." @@ -1824,24 +2009,24 @@ msgstr "Imposible establecer la foto del contacto." msgid "is now friends with" msgstr "ahora es amigo de" -#: ../../mod/dfrn_confirm.php:494 +#: ../../mod/dfrn_confirm.php:494 ../../mod/dfrn_confirm.php:529 #, php-format msgid "No user record found for '%s' " msgstr "Ningún usuario encontrado para '%s'" -#: ../../mod/dfrn_confirm.php:504 +#: ../../mod/dfrn_confirm.php:504 ../../mod/dfrn_confirm.php:539 msgid "Our site encryption key is apparently messed up." msgstr "Nuestra clave de cifrado del site es aparentemente un lío." -#: ../../mod/dfrn_confirm.php:515 +#: ../../mod/dfrn_confirm.php:515 ../../mod/dfrn_confirm.php:550 msgid "Empty site URL was provided or URL could not be decrypted by us." msgstr "Se ha proporcionado una dirección vacía o no hemos podido descifrarla." -#: ../../mod/dfrn_confirm.php:527 +#: ../../mod/dfrn_confirm.php:527 ../../mod/dfrn_confirm.php:571 msgid "Contact record was not found for you on our site." msgstr "El contacto no se ha encontrado en nuestro sitio." -#: ../../mod/dfrn_confirm.php:555 +#: ../../mod/dfrn_confirm.php:555 ../../mod/dfrn_confirm.php:605 msgid "" "The ID provided by your system is a duplicate on our system. It should work " "if you try again." @@ -1849,36 +2034,40 @@ msgstr "" "La identificación proporcionada por el sistema es un duplicado de nuestro " "sistema. Debería funcionar si intenta de nuevo." -#: ../../mod/dfrn_confirm.php:566 +#: ../../mod/dfrn_confirm.php:566 ../../mod/dfrn_confirm.php:616 msgid "Unable to set your contact credentials on our system." msgstr "" "No se puede establecer sus credenciales de contacto en nuestro sistema." -#: ../../mod/dfrn_confirm.php:619 +#: ../../mod/dfrn_confirm.php:619 ../../mod/dfrn_confirm.php:670 msgid "Unable to update your contact profile details on our system" msgstr "" "No se puede actualizar los datos de tu perfil de contacto en nuestro sistema" -#: ../../mod/dfrn_confirm.php:648 +#: ../../mod/dfrn_confirm.php:648 ../../mod/dfrn_confirm.php:700 #, php-format msgid "Connection accepted at %s" msgstr "Conexión aceptada en % s" #: ../../mod/openid.php:62 ../../mod/openid.php:109 ../../include/auth.php:105 #: ../../include/auth.php:130 ../../include/auth.php:183 +#: ../../mod/openid.php:63 ../../mod/openid.php:123 ../../include/auth.php:121 +#: ../../include/auth.php:146 ../../include/auth.php:200 msgid "Login failed." msgstr "Accesso fallido." -#: ../../mod/openid.php:73 ../../include/auth.php:194 +#: ../../mod/openid.php:73 ../../include/auth.php:194 ../../mod/openid.php:83 +#: ../../include/auth.php:220 msgid "Welcome back " msgstr "Bienvenido de nuevo" #: ../../mod/dfrn_poll.php:78 ../../mod/dfrn_poll.php:392 +#: ../../mod/dfrn_poll.php:90 ../../mod/dfrn_poll.php:516 #, php-format msgid "%s welcomes %s" msgstr "%s te da la bienvenida a %s" -#: ../../mod/viewcontacts.php:32 +#: ../../mod/viewcontacts.php:32 ../../mod/viewcontacts.php:40 msgid "No contacts." msgstr "Ningún contacto." @@ -1902,23 +2091,23 @@ msgstr "El nombre del grupo ha cambiado." msgid "Membership list updated." msgstr "Lista de miembros actualizada." -#: ../../mod/group.php:107 +#: ../../mod/group.php:107 ../../mod/group.php:98 msgid "Group removed." msgstr "Grupo eliminado." -#: ../../mod/group.php:109 +#: ../../mod/group.php:109 ../../mod/group.php:100 msgid "Unable to remove group." msgstr "No se puede eliminar el grupo." -#: ../../addon/twitter/twitter.php:64 +#: ../../addon/twitter/twitter.php:64 ../../addon/twitter/twitter.php:70 msgid "Post to Twitter" msgstr "Publicar en Twitter" -#: ../../addon/twitter/twitter.php:122 +#: ../../addon/twitter/twitter.php:122 ../../addon/twitter/twitter.php:137 msgid "Twitter Posting Settings" msgstr "Configuración de publicación en Twitter" -#: ../../addon/twitter/twitter.php:129 +#: ../../addon/twitter/twitter.php:129 ../../addon/twitter/twitter.php:144 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." @@ -1926,7 +2115,7 @@ msgstr "" "No se ha encontrado ningún par de claves para Twitter. Póngase en contacto " "con el administrador del sitio." -#: ../../addon/twitter/twitter.php:148 +#: ../../addon/twitter/twitter.php:148 ../../addon/twitter/twitter.php:163 msgid "" "At this Friendika instance the Twitter plugin was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " @@ -1940,15 +2129,16 @@ msgstr "" "cuadro de entrada y enviar el formulario. Solo sus posts <strong>públicos</" "strong> se publicarán en Twitter." -#: ../../addon/twitter/twitter.php:149 +#: ../../addon/twitter/twitter.php:149 ../../addon/twitter/twitter.php:164 msgid "Log in with Twitter" msgstr "Acceder con Twitter" -#: ../../addon/twitter/twitter.php:151 +#: ../../addon/twitter/twitter.php:151 ../../addon/twitter/twitter.php:166 msgid "Copy the PIN from Twitter here" msgstr "Copia el PIN de Twitter aquí" #: ../../addon/twitter/twitter.php:165 ../../addon/statusnet/statusnet.php:197 +#: ../../addon/statusnet/statusnet.php:329 ../../addon/twitter/twitter.php:180 msgid "Currently connected to: " msgstr "Actualmente conectado a:" @@ -1965,18 +2155,22 @@ msgid "Send public postings to Twitter" msgstr "Enviar posts públicos a Twitter" #: ../../addon/twitter/twitter.php:172 ../../addon/statusnet/statusnet.php:204 +#: ../../addon/statusnet/statusnet.php:340 ../../addon/twitter/twitter.php:191 msgid "Clear OAuth configuration" msgstr "Borrar la configuración de OAuth" #: ../../addon/statusnet/statusnet.php:78 +#: ../../addon/statusnet/statusnet.php:133 msgid "Post to StatusNet" msgstr "Publicar en StatusNet" #: ../../addon/statusnet/statusnet.php:146 +#: ../../addon/statusnet/statusnet.php:253 msgid "StatusNet Posting Settings" msgstr "Configuración de envío a StatusNet" #: ../../addon/statusnet/statusnet.php:152 +#: ../../addon/statusnet/statusnet.php:277 msgid "" "No consumer key pair for StatusNet found. Register your Friendika Account as " "an desktop client on your StatusNet account, copy the consumer key pair here " @@ -1992,18 +2186,22 @@ msgstr "" "StatusNet favorita." #: ../../addon/statusnet/statusnet.php:154 +#: ../../addon/statusnet/statusnet.php:279 msgid "OAuth Consumer Key" msgstr "OAuth Consumer Key" #: ../../addon/statusnet/statusnet.php:157 +#: ../../addon/statusnet/statusnet.php:282 msgid "OAuth Consumer Secret" msgstr "OAuth Consumer Secret" #: ../../addon/statusnet/statusnet.php:160 +#: ../../addon/statusnet/statusnet.php:285 msgid "Base API Path (remember the trailing /)" msgstr "Dirección de base para la API (recordar el / al final)" #: ../../addon/statusnet/statusnet.php:181 +#: ../../addon/statusnet/statusnet.php:306 msgid "" "To connect to your StatusNet account click the button below to get a " "security code from StatusNet which you have to copy into the input box below " @@ -2016,10 +2214,12 @@ msgstr "" "en StatusNet." #: ../../addon/statusnet/statusnet.php:182 +#: ../../addon/statusnet/statusnet.php:307 msgid "Log in with StatusNet" msgstr "Inicia sesión con StatusNet" #: ../../addon/statusnet/statusnet.php:184 +#: ../../addon/statusnet/statusnet.php:309 msgid "Copy the security code from StatusNet here" msgstr "Copia el código de seguridad de StatusNet aquí" @@ -2035,23 +2235,23 @@ msgstr "" msgid "Send public postings to StatusNet" msgstr "Enviar posts públicos a StatusNet" -#: ../../addon/tictac/tictac.php:14 +#: ../../addon/tictac/tictac.php:14 ../../addon/tictac/tictac.php:20 msgid "Three Dimensional Tic-Tac-Toe" msgstr "Tic-Tac-Toe tridimensionale" -#: ../../addon/tictac/tictac.php:47 +#: ../../addon/tictac/tictac.php:47 ../../addon/tictac/tictac.php:53 msgid "3D Tic-Tac-Toe" msgstr "3D Tic-Tac-Toe" -#: ../../addon/tictac/tictac.php:52 +#: ../../addon/tictac/tictac.php:52 ../../addon/tictac/tictac.php:58 msgid "New game" msgstr "Nueva partida" -#: ../../addon/tictac/tictac.php:53 +#: ../../addon/tictac/tictac.php:53 ../../addon/tictac/tictac.php:59 msgid "New game with handicap" msgstr "Nuevo juego con handicap" -#: ../../addon/tictac/tictac.php:54 +#: ../../addon/tictac/tictac.php:54 ../../addon/tictac/tictac.php:60 msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " @@ -2059,7 +2259,7 @@ msgstr "" "Tic-tac-toe tridimensional es como el juego tradicional, excepto que se " "juega en varios niveles simultáneamente." -#: ../../addon/tictac/tictac.php:55 +#: ../../addon/tictac/tictac.php:55 ../../addon/tictac/tictac.php:61 msgid "" "In this case there are three levels. You win by getting three in a row on " "any level, as well as up, down, and diagonally across the different levels." @@ -2068,7 +2268,7 @@ msgstr "" "cualquier nivel, así como arriba, abajo y en diagonal a través de los " "diferentes niveles." -#: ../../addon/tictac/tictac.php:57 +#: ../../addon/tictac/tictac.php:57 ../../addon/tictac/tictac.php:63 msgid "" "The handicap game disables the center position on the middle level because " "the player claiming this square often has an unfair advantage." @@ -2076,23 +2276,24 @@ msgstr "" "El juego con handicap desactiva la posición central en el nivel medio porque " "el jugador reclama que este cuadrado tiene a menudo una ventaja injusta." -#: ../../addon/tictac/tictac.php:176 +#: ../../addon/tictac/tictac.php:176 ../../addon/tictac/tictac.php:182 msgid "You go first..." msgstr "Comienza tú..." -#: ../../addon/tictac/tictac.php:181 +#: ../../addon/tictac/tictac.php:181 ../../addon/tictac/tictac.php:187 msgid "I'm going first this time..." msgstr "Yo voy primero esta vez..." -#: ../../addon/tictac/tictac.php:187 +#: ../../addon/tictac/tictac.php:187 ../../addon/tictac/tictac.php:193 msgid "You won!" msgstr "¡Has ganado!" #: ../../addon/tictac/tictac.php:193 ../../addon/tictac/tictac.php:218 +#: ../../addon/tictac/tictac.php:199 ../../addon/tictac/tictac.php:224 msgid "\"Cat\" game!" msgstr "¡Empate!" -#: ../../addon/tictac/tictac.php:216 +#: ../../addon/tictac/tictac.php:216 ../../addon/tictac/tictac.php:222 msgid "I won!" msgstr "¡He ganado!" @@ -2106,15 +2307,15 @@ msgid "" msgstr "" "Usa el seguente controllo solo se el el caricatore Java (qui sopra) no parte." -#: ../../addon/facebook/facebook.php:116 +#: ../../addon/facebook/facebook.php:116 ../../addon/facebook/facebook.php:320 msgid "Facebook disabled" msgstr "Facebook no habilitado" -#: ../../addon/facebook/facebook.php:124 +#: ../../addon/facebook/facebook.php:124 ../../addon/facebook/facebook.php:334 msgid "Facebook API key is missing." msgstr "Falta la Clave API de Facebook." -#: ../../addon/facebook/facebook.php:131 +#: ../../addon/facebook/facebook.php:131 ../../addon/facebook/facebook.php:341 msgid "Facebook Connect" msgstr "Facebook Connect" @@ -2126,51 +2327,59 @@ msgstr "Instalar el conector con Facebook" msgid "Remove Facebook post connector" msgstr "DesInstalar el conector con Facebook" -#: ../../addon/facebook/facebook.php:150 +#: ../../addon/facebook/facebook.php:150 ../../addon/facebook/facebook.php:360 msgid "Post to Facebook by default" msgstr "Publicar en Facebook de forma predeterminada" -#: ../../addon/facebook/facebook.php:174 +#: ../../addon/facebook/facebook.php:174 ../../addon/facebook/facebook.php:426 +#: ../../include/contact_selectors.php:78 msgid "Facebook" msgstr "Facebook" -#: ../../addon/facebook/facebook.php:175 +#: ../../addon/facebook/facebook.php:175 ../../addon/facebook/facebook.php:427 msgid "Facebook Connector Settings" msgstr "Configuración de conexión a Facebook" -#: ../../addon/facebook/facebook.php:189 +#: ../../addon/facebook/facebook.php:189 ../../addon/facebook/facebook.php:441 msgid "Post to Facebook" msgstr "Publicar en Facebook" -#: ../../addon/facebook/facebook.php:230 +#: ../../addon/facebook/facebook.php:230 ../../addon/facebook/facebook.php:587 msgid "Image: " msgstr "Imagen: " #: ../../addon/randplace/randplace.php:171 +#: ../../addon/randplace/randplace.php:170 msgid "Randplace Settings" msgstr "Configuración de Randplace" #: ../../addon/randplace/randplace.php:173 +#: ../../addon/randplace/randplace.php:172 msgid "Enable Randplace Plugin" msgstr "Activar el plugin Randplace" #: ../../addon/js_upload/js_upload.php:39 +#: ../../addon/js_upload/js_upload.php:43 msgid "Upload a file" msgstr "Subir un archivo" #: ../../addon/js_upload/js_upload.php:40 +#: ../../addon/js_upload/js_upload.php:44 msgid "Drop files here to upload" msgstr "Soltar los archivos aquí para subir" #: ../../addon/js_upload/js_upload.php:42 +#: ../../addon/js_upload/js_upload.php:46 msgid "Failed" msgstr "Falló" #: ../../addon/js_upload/js_upload.php:288 +#: ../../addon/js_upload/js_upload.php:292 msgid "No files were uploaded." msgstr "No hay archivos subidos." #: ../../addon/js_upload/js_upload.php:294 +#: ../../addon/js_upload/js_upload.php:298 msgid "Uploaded file is empty" msgstr "El archivo subido está vacío" @@ -2179,10 +2388,12 @@ msgid "Uploaded file is too large" msgstr "El archivo subido es demasiado grande" #: ../../addon/js_upload/js_upload.php:317 +#: ../../addon/js_upload/js_upload.php:321 msgid "File has an invalid extension, it should be one of " msgstr "El archivo tiene una extensión no válida, debería ser una de " #: ../../addon/js_upload/js_upload.php:328 +#: ../../addon/js_upload/js_upload.php:332 msgid "Upload was cancelled, or server error encountered" msgstr "La subida ha sido cancelada, o se encontró un error del servidor" @@ -2211,26 +2422,32 @@ msgid "Reputable, has my trust" msgstr "Buena reputación, tiene mi confianza" #: ../../include/contact_selectors.php:55 +#: ../../include/contact_selectors.php:56 msgid "Frequently" msgstr "Frequentemente" #: ../../include/contact_selectors.php:56 +#: ../../include/contact_selectors.php:57 msgid "Hourly" msgstr "Cada hora" #: ../../include/contact_selectors.php:57 +#: ../../include/contact_selectors.php:58 msgid "Twice daily" msgstr "Dos veces al día" #: ../../include/contact_selectors.php:58 +#: ../../include/contact_selectors.php:59 msgid "Daily" msgstr "Diariamente" #: ../../include/contact_selectors.php:59 +#: ../../include/contact_selectors.php:60 msgid "Weekly" msgstr "Semanalmente" #: ../../include/contact_selectors.php:60 +#: ../../include/contact_selectors.php:61 msgid "Monthly" msgstr "Mensualmente" @@ -2466,142 +2683,152 @@ msgstr "Sesión terminada" msgid "Miscellaneous" msgstr "Varios" -#: ../../include/datetime.php:148 +#: ../../include/datetime.php:148 ../../include/datetime.php:234 msgid "less than a second ago" msgstr "hace menos de un segundo" -#: ../../include/datetime.php:151 +#: ../../include/datetime.php:151 ../../include/datetime.php:105 +#: ../../include/datetime.php:237 msgid "year" msgstr "año" -#: ../../include/datetime.php:151 +#: ../../include/datetime.php:151 ../../include/datetime.php:237 msgid "years" msgstr "años" -#: ../../include/datetime.php:152 +#: ../../include/datetime.php:152 ../../include/datetime.php:110 +#: ../../include/datetime.php:238 msgid "month" msgstr "mes" -#: ../../include/datetime.php:152 +#: ../../include/datetime.php:152 ../../include/datetime.php:238 msgid "months" msgstr "meses" -#: ../../include/datetime.php:153 +#: ../../include/datetime.php:153 ../../include/datetime.php:239 msgid "week" msgstr "semana" -#: ../../include/datetime.php:153 +#: ../../include/datetime.php:153 ../../include/datetime.php:239 msgid "weeks" msgstr "semanas" -#: ../../include/datetime.php:154 +#: ../../include/datetime.php:154 ../../include/datetime.php:115 +#: ../../include/datetime.php:240 msgid "day" msgstr "día" -#: ../../include/datetime.php:154 +#: ../../include/datetime.php:154 ../../include/datetime.php:240 msgid "days" msgstr "días" -#: ../../include/datetime.php:155 +#: ../../include/datetime.php:155 ../../include/datetime.php:241 msgid "hour" msgstr "hora" -#: ../../include/datetime.php:155 +#: ../../include/datetime.php:155 ../../include/datetime.php:241 msgid "hours" msgstr "horas" -#: ../../include/datetime.php:156 +#: ../../include/datetime.php:156 ../../include/datetime.php:242 msgid "minute" msgstr "minuto" -#: ../../include/datetime.php:156 +#: ../../include/datetime.php:156 ../../include/datetime.php:242 msgid "minutes" msgstr "minutos" -#: ../../include/datetime.php:157 +#: ../../include/datetime.php:157 ../../include/datetime.php:243 msgid "second" msgstr "segundo" -#: ../../include/datetime.php:157 +#: ../../include/datetime.php:157 ../../include/datetime.php:243 msgid "seconds" msgstr "segundos" -#: ../../include/datetime.php:164 +#: ../../include/datetime.php:164 ../../include/datetime.php:250 msgid " ago" msgstr " hace" -#: ../../include/nav.php:56 ../../include/nav.php:91 +#: ../../include/nav.php:56 ../../include/nav.php:91 ../../include/nav.php:55 +#: ../../include/nav.php:93 msgid "Home" msgstr "Home" -#: ../../include/nav.php:64 +#: ../../include/nav.php:64 ../../include/nav.php:67 msgid "Apps" msgstr "Aplicaciones" -#: ../../include/nav.php:77 +#: ../../include/nav.php:77 ../../include/nav.php:81 msgid "Directory" msgstr "Directorio" -#: ../../include/nav.php:87 +#: ../../include/nav.php:87 ../../include/nav.php:91 msgid "Network" msgstr "Red" -#: ../../include/nav.php:96 +#: ../../include/nav.php:96 ../../include/nav.php:99 msgid "Notifications" msgstr "Notificaciones" -#: ../../include/nav.php:104 +#: ../../include/nav.php:104 ../../include/nav.php:105 msgid "Manage" msgstr "Administrar" -#: ../../include/nav.php:107 +#: ../../include/nav.php:107 ../../mod/admin.php:554 ../../include/nav.php:108 msgid "Settings" msgstr "Configuración" -#: ../../include/nav.php:109 +#: ../../include/nav.php:109 ../../mod/profiles.php:458 msgid "Profiles" msgstr "Perfiles" #: ../../include/items.php:1004 ../../include/items.php:1027 +#: ../../include/profile_advanced.php:36 ../../include/items.php:1195 msgid "Birthday:" msgstr "Fecha de nacimiento:" #: ../../include/items.php:1348 ../../include/items.php:1371 +#: ../../include/items.php:1584 msgid "You have a new follower at " msgstr "Tienes un nuevo seguidor en " -#: ../../include/group.php:130 +#: ../../include/group.php:130 ../../include/group.php:147 msgid "Create a new group" msgstr "Crear un nuevo grupo" -#: ../../include/group.php:131 +#: ../../include/group.php:131 ../../include/group.php:148 msgid "Everybody" msgstr "Todo el mundo" -#: ../../include/oembed.php:57 +#: ../../include/oembed.php:57 ../../include/oembed.php:99 msgid "Embedding disabled" msgstr "Embedding desabilitado" -#: ../../boot.php:2418 +#: ../../boot.php:2418 ../../boot.php:1005 msgid "Birthday Reminders" msgstr "Recordatorios de cumpleaños" #: ../../mod/profile.php:160 ../../mod/editpost.php:66 -#: ../../mod/network.php:95 +#: ../../mod/network.php:95 ../../mod/editpost.php:95 +#: ../../include/conversation.php:752 msgid "Insert Vorbis [.ogg] video" msgstr "Insertar video Vorbis [.ogg]" #: ../../mod/profile.php:161 ../../mod/editpost.php:67 -#: ../../mod/network.php:96 +#: ../../mod/network.php:96 ../../mod/editpost.php:96 +#: ../../include/conversation.php:753 msgid "Insert Vorbis [.ogg] audio" msgstr "Insertar audio Vorbis [.ogg]" #: ../../mod/profile.php:354 ../../mod/display.php:222 #: ../../mod/editpost.php:62 ../../mod/network.php:392 +#: ../../mod/editpost.php:90 ../../include/group.php:172 +#: ../../include/group.php:173 ../../include/conversation.php:418 msgid "Edit" msgstr "Editar" -#: ../../mod/search.php:54 +#: ../../mod/search.php:54 ../../mod/community.php:56 ../../mod/search.php:65 msgid "No results." msgstr "No hay resultados." @@ -2625,12 +2852,2206 @@ msgstr "Editar mensaje" #, php-format msgid "Cannot locate DNS info for database server '%s'" msgstr "" -"No se puede encontrar información de DNS para el servidor de base de datos " -"'%s'" +"No se puede encontrar información de DNS para el servidor de base de datos '%" +"s'" -#: ../../boot.php:2016 +#: ../../boot.php:2016 ../../include/text.php:550 #, php-format msgid "%d Contact" msgid_plural "%d Contacts" msgstr[0] "%d Contacto" msgstr[1] "%d Contactos" + +#: ../../mod/oexchange.php:27 +msgid "Post successful." +msgstr "" + +#: ../../mod/crepair.php:44 +msgid "Contact settings applied." +msgstr "" + +#: ../../mod/crepair.php:46 +msgid "Contact update failed." +msgstr "" + +#: ../../mod/crepair.php:76 +msgid "Repair Contact Settings" +msgstr "" + +#: ../../mod/crepair.php:78 +msgid "" +"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect " +"information your communications with this contact will stop working." +msgstr "" + +#: ../../mod/crepair.php:79 +msgid "" +"Please use your browser 'Back' button <strong>now</strong> if you are " +"uncertain what to do on this page." +msgstr "" + +#: ../../mod/crepair.php:87 ../../mod/admin.php:467 ../../mod/admin.php:476 +msgid "Name" +msgstr "" + +#: ../../mod/crepair.php:88 +msgid "Account Nickname" +msgstr "" + +#: ../../mod/crepair.php:89 +msgid "@Tagname - overrides Name/Nickname" +msgstr "" + +#: ../../mod/crepair.php:90 +msgid "Account URL" +msgstr "" + +#: ../../mod/crepair.php:91 +msgid "Friend Request URL" +msgstr "" + +#: ../../mod/crepair.php:92 +msgid "Friend Confirm URL" +msgstr "" + +#: ../../mod/crepair.php:93 +msgid "Notification Endpoint URL" +msgstr "" + +#: ../../mod/crepair.php:94 +msgid "Poll/Feed URL" +msgstr "" + +#: ../../mod/help.php:29 +msgid "Help:" +msgstr "" + +#: ../../mod/help.php:33 ../../include/nav.php:64 +msgid "Help" +msgstr "" + +#: ../../mod/wall_attach.php:57 +#, php-format +msgid "File exceeds size limit of %d" +msgstr "" + +#: ../../mod/wall_attach.php:87 ../../mod/wall_attach.php:98 +msgid "File upload failed." +msgstr "" + +#: ../../mod/fsuggest.php:63 +msgid "Friend suggestion sent." +msgstr "" + +#: ../../mod/fsuggest.php:97 +msgid "Suggest Friends" +msgstr "" + +#: ../../mod/fsuggest.php:99 +#, php-format +msgid "Suggest a friend for %s" +msgstr "" + +#: ../../mod/events.php:112 ../../mod/photos.php:835 ../../mod/notes.php:46 +#: ../../mod/profile.php:117 +msgid "Status" +msgstr "" + +#: ../../mod/events.php:113 ../../mod/photos.php:836 ../../mod/notes.php:47 +#: ../../mod/profperm.php:103 ../../mod/profile.php:118 +#: ../../include/profile_advanced.php:7 +msgid "Profile" +msgstr "" + +#: ../../mod/events.php:114 ../../mod/photos.php:837 ../../mod/notes.php:48 +#: ../../mod/profile.php:119 +msgid "Photos" +msgstr "" + +#: ../../mod/events.php:115 ../../mod/events.php:120 ../../mod/photos.php:838 +#: ../../mod/notes.php:49 ../../mod/profile.php:120 +msgid "Events" +msgstr "" + +#: ../../mod/events.php:116 ../../mod/photos.php:839 ../../mod/notes.php:50 +#: ../../mod/notes.php:55 ../../mod/profile.php:121 +msgid "Personal Notes" +msgstr "" + +#: ../../mod/events.php:210 +msgid "Create New Event" +msgstr "" + +#: ../../mod/events.php:213 +msgid "Previous" +msgstr "" + +#: ../../mod/events.php:216 +msgid "Next" +msgstr "" + +#: ../../mod/events.php:223 +msgid "l, F j" +msgstr "" + +#: ../../mod/events.php:235 +msgid "Edit event" +msgstr "" + +#: ../../mod/events.php:305 +msgid "hour:minute" +msgstr "" + +#: ../../mod/events.php:314 +msgid "Event details" +msgstr "" + +#: ../../mod/events.php:315 +#, php-format +msgid "Format is %s %s. Starting date and Description are required." +msgstr "" + +#: ../../mod/events.php:316 +msgid "Event Starts:" +msgstr "" + +#: ../../mod/events.php:319 +msgid "Finish date/time is not known or not relevant" +msgstr "" + +#: ../../mod/events.php:321 +msgid "Event Finishes:" +msgstr "" + +#: ../../mod/events.php:324 +msgid "Adjust for viewer timezone" +msgstr "" + +#: ../../mod/events.php:326 +msgid "Description:" +msgstr "" + +#: ../../mod/events.php:330 +msgid "Share this event" +msgstr "" + +#: ../../mod/photos.php:57 ../../mod/settings.php:9 +msgid "everybody" +msgstr "" + +#: ../../mod/photos.php:617 +msgid "Image file is empty." +msgstr "" + +#: ../../mod/photos.php:734 ../../mod/community.php:9 +#: ../../mod/dfrn_request.php:590 ../../mod/viewcontacts.php:16 +#: ../../mod/display.php:7 ../../mod/search.php:13 ../../mod/directory.php:20 +msgid "Public access denied." +msgstr "" + +#: ../../mod/photos.php:821 +msgid "Access to this item is restricted." +msgstr "" + +#: ../../mod/photos.php:1184 ../../mod/photos.php:1223 +#: ../../mod/photos.php:1254 ../../include/conversation.php:409 +#: ../../boot.php:411 +msgid "Comment" +msgstr "" + +#: ../../mod/community.php:14 +msgid "Not available." +msgstr "" + +#: ../../mod/community.php:26 ../../include/nav.php:79 +msgid "Community" +msgstr "" + +#: ../../mod/editpost.php:75 ../../include/conversation.php:733 +msgid "Post to Email" +msgstr "" + +#: ../../mod/editpost.php:92 ../../include/conversation.php:749 +msgid "Attach file" +msgstr "" + +#: ../../mod/editpost.php:109 ../../include/conversation.php:767 +msgid "Public post" +msgstr "" + +#: ../../mod/dfrn_request.php:505 +#, php-format +msgid "Welcome home %s." +msgstr "" + +#: ../../mod/dfrn_request.php:506 +#, php-format +msgid "Please confirm your introduction/connection request to %s." +msgstr "" + +#: ../../mod/dfrn_request.php:507 +msgid "Confirm" +msgstr "" + +#: ../../mod/dfrn_request.php:631 +#, php-format +msgid "" +"Diaspora members: Please do not use this form. Instead, enter \"%s\" into " +"your Diaspora search bar." +msgstr "" + +#: ../../mod/dfrn_request.php:634 +msgid "" +"Please enter your 'Identity Address' from one of the following supported " +"social networks:" +msgstr "" + +#: ../../mod/dfrn_request.php:638 +msgid "" +"Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, " +"testuser@identi.ca" +msgstr "" + +#: ../../mod/dfrn_request.php:640 +#, php-format +msgid "Does %s know you?" +msgstr "" + +#: ../../mod/dfrn_request.php:647 ../../include/contact_selectors.php:78 +msgid "Diaspora" +msgstr "" + +#: ../../mod/dfrn_request.php:648 +msgid "- please share from your own site as noted above" +msgstr "" + +#: ../../mod/dfrn_request.php:649 +msgid "Your Identity Address:" +msgstr "" + +#: ../../mod/install.php:75 +msgid "Proceed with Installation" +msgstr "" + +#: ../../mod/install.php:77 +msgid "Your Friendika site database has been installed." +msgstr "" + +#: ../../mod/install.php:81 +msgid "Proceed to registration" +msgstr "" + +#: ../../mod/install.php:124 +msgid "Friendika Social Network" +msgstr "" + +#: ../../mod/install.php:125 +msgid "Installation" +msgstr "" + +#: ../../mod/install.php:126 +msgid "" +"In order to install Friendika we need to know how to connect to your " +"database." +msgstr "" + +#: ../../mod/install.php:127 +msgid "" +"Please contact your hosting provider or site administrator if you have " +"questions about these settings." +msgstr "" + +#: ../../mod/install.php:128 +msgid "" +"The database you specify below should already exist. If it does not, please " +"create it before continuing." +msgstr "" + +#: ../../mod/install.php:129 +msgid "Database Server Name" +msgstr "" + +#: ../../mod/install.php:130 +msgid "Database Login Name" +msgstr "" + +#: ../../mod/install.php:131 +msgid "Database Login Password" +msgstr "" + +#: ../../mod/install.php:132 +msgid "Database Name" +msgstr "" + +#: ../../mod/install.php:133 +msgid "Please select a default timezone for your website" +msgstr "" + +#: ../../mod/install.php:134 +msgid "" +"Site administrator email address. Your account email address must match this " +"in order to use the web admin panel." +msgstr "" + +#: ../../mod/install.php:204 +msgid "Error: mb_string PHP module required but not installed." +msgstr "" + +#: ../../mod/localtime.php:12 ../../include/event.php:11 +#: ../../include/bb2diaspora.php:200 +msgid "l F d, Y \\@ g:i A" +msgstr "" + +#: ../../mod/localtime.php:24 +msgid "Time Conversion" +msgstr "" + +#: ../../mod/localtime.php:26 +msgid "" +"Friendika provides this service for sharing events with other networks and " +"friends in unknown timezones." +msgstr "" + +#: ../../mod/localtime.php:30 +#, php-format +msgid "Converted localtime: %s" +msgstr "" + +#: ../../mod/localtime.php:32 +#, php-format +msgid "UTC time: %s" +msgstr "" + +#: ../../mod/localtime.php:36 +msgid "Please select your timezone:" +msgstr "" + +#: ../../mod/update_community.php:18 ../../mod/update_network.php:22 +#: ../../mod/update_profile.php:41 +msgid "[Embedded content - reload page to view]" +msgstr "" + +#: ../../mod/match.php:10 +msgid "Profile Match" +msgstr "" + +#: ../../mod/match.php:18 +msgid "No keywords to match. Please add keywords to your default profile." +msgstr "" + +#: ../../mod/match.php:54 +msgid "No matches" +msgstr "" + +#: ../../mod/notifications.php:74 +msgid "Pending Friend/Connect Notifications" +msgstr "" + +#: ../../mod/notifications.php:106 +msgid "Friend Suggestion" +msgstr "" + +#: ../../mod/notifications.php:108 +#, php-format +msgid "suggested by %s" +msgstr "" + +#: ../../mod/notifications.php:143 +msgid "Sharer" +msgstr "" + +#: ../../mod/contacts.php:32 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "" +msgstr[1] "" + +#: ../../mod/contacts.php:41 +msgid "Find People With Shared Interests" +msgstr "" + +#: ../../mod/contacts.php:270 +msgid "Privacy Unavailable" +msgstr "" + +#: ../../mod/contacts.php:271 +msgid "Private communications are not available for this contact." +msgstr "" + +#: ../../mod/contacts.php:281 +msgid "Suggest friends" +msgstr "" + +#: ../../mod/contacts.php:285 +#, php-format +msgid "Network type: %s" +msgstr "" + +#: ../../mod/contacts.php:290 +msgid "Profile Visibility" +msgstr "" + +#: ../../mod/contacts.php:291 +#, php-format +msgid "" +"Please choose the profile you would like to display to %s when viewing your " +"profile securely." +msgstr "" + +#: ../../mod/contacts.php:292 +msgid "Contact Information / Notes" +msgstr "" + +#: ../../mod/contacts.php:293 +msgid "Online Reputation" +msgstr "" + +#: ../../mod/contacts.php:294 +msgid "" +"Occasionally your friends may wish to inquire about this person's online " +"legitimacy." +msgstr "" + +#: ../../mod/contacts.php:295 +msgid "" +"You may help them choose whether or not to interact with this person by " +"providing a <em>reputation</em> to guide them." +msgstr "" + +#: ../../mod/contacts.php:296 +msgid "" +"Please take a moment to elaborate on this selection if you feel it could be " +"helpful to others." +msgstr "" + +#: ../../mod/contacts.php:297 ../../mod/contacts.php:412 +#: ../../mod/viewcontacts.php:61 +#, php-format +msgid "Visit %s's profile [%s]" +msgstr "" + +#: ../../mod/contacts.php:300 +msgid "Repair contact URL settings" +msgstr "" + +#: ../../mod/contacts.php:301 +msgid "Repair contact URL settings (WARNING: Advanced)" +msgstr "" + +#: ../../mod/contacts.php:302 +msgid "View conversations" +msgstr "" + +#: ../../mod/lostpass.php:16 +msgid "No valid account found." +msgstr "" + +#: ../../mod/lostpass.php:31 +msgid "Password reset request issued. Check your email." +msgstr "" + +#: ../../mod/lostpass.php:64 +msgid "" +"Request could not be verified. (You may have previously submitted it.) " +"Password reset failed." +msgstr "" + +#: ../../mod/lostpass.php:83 +msgid "Your password has been reset as requested." +msgstr "" + +#: ../../mod/lostpass.php:84 +msgid "Your new password is" +msgstr "" + +#: ../../mod/lostpass.php:85 +msgid "Save or copy your new password - and then" +msgstr "" + +#: ../../mod/lostpass.php:86 +msgid "click here to login" +msgstr "" + +#: ../../mod/lostpass.php:87 +msgid "" +"Your password may be changed from the <em>Settings</em> page after " +"successful login." +msgstr "" + +#: ../../mod/lostpass.php:118 +msgid "Forgot your Password?" +msgstr "" + +#: ../../mod/lostpass.php:119 +msgid "" +"Enter your email address and submit to have your password reset. Then check " +"your email for further instructions." +msgstr "" + +#: ../../mod/lostpass.php:120 +msgid "Nickname or Email: " +msgstr "" + +#: ../../mod/lostpass.php:121 +msgid "Reset" +msgstr "" + +#: ../../mod/settings.php:161 +msgid "Failed to connect with email account using the settings provided." +msgstr "" + +#: ../../mod/settings.php:311 ../../include/nav.php:108 +msgid "Account settings" +msgstr "" + +#: ../../mod/settings.php:312 +msgid "Plugin settings" +msgstr "" + +#: ../../mod/settings.php:382 ../../mod/admin.php:133 ../../mod/admin.php:446 +msgid "Normal Account" +msgstr "" + +#: ../../mod/settings.php:383 +msgid "This account is a normal personal profile" +msgstr "" + +#: ../../mod/settings.php:386 ../../mod/admin.php:134 ../../mod/admin.php:447 +msgid "Soapbox Account" +msgstr "" + +#: ../../mod/settings.php:387 +msgid "Automatically approve all connection/friend requests as read-only fans" +msgstr "" + +#: ../../mod/settings.php:390 ../../mod/admin.php:135 ../../mod/admin.php:448 +msgid "Community/Celebrity Account" +msgstr "" + +#: ../../mod/settings.php:391 +msgid "Automatically approve all connection/friend requests as read-write fans" +msgstr "" + +#: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:449 +msgid "Automatic Friend Account" +msgstr "" + +#: ../../mod/settings.php:395 +msgid "Automatically approve all connection/friend requests as friends" +msgstr "" + +#: ../../mod/settings.php:405 +msgid "OpenID:" +msgstr "" + +#: ../../mod/settings.php:405 +msgid "(Optional) Allow this OpenID to login to this account." +msgstr "" + +#: ../../mod/settings.php:415 +msgid "Publish your default profile in your local site directory?" +msgstr "" + +#: ../../mod/settings.php:421 +msgid "Publish your default profile in the global social directory?" +msgstr "" + +#: ../../mod/settings.php:429 +msgid "Hide your contact/friend list from viewers of your default profile?" +msgstr "" + +#: ../../mod/settings.php:433 +msgid "Hide profile details and all your messages from unknown viewers?" +msgstr "" + +#: ../../mod/settings.php:461 ../../mod/profile_photo.php:196 +msgid "or" +msgstr "" + +#: ../../mod/settings.php:466 +msgid "Your Identity Address is" +msgstr "" + +#: ../../mod/settings.php:487 +msgid "Export Personal Data" +msgstr "" + +#: ../../mod/settings.php:490 +msgid "Password Settings" +msgstr "" + +#: ../../mod/settings.php:491 +msgid "New Password:" +msgstr "" + +#: ../../mod/settings.php:492 +msgid "Confirm:" +msgstr "" + +#: ../../mod/settings.php:492 +msgid "Leave password fields blank unless changing" +msgstr "" + +#: ../../mod/settings.php:496 +msgid "Basic Settings" +msgstr "" + +#: ../../mod/settings.php:497 ../../include/profile_advanced.php:10 +msgid "Full Name:" +msgstr "" + +#: ../../mod/settings.php:498 +msgid "Email Address:" +msgstr "" + +#: ../../mod/settings.php:499 +msgid "Your Timezone:" +msgstr "" + +#: ../../mod/settings.php:500 +msgid "Default Post Location:" +msgstr "" + +#: ../../mod/settings.php:501 +msgid "Use Browser Location:" +msgstr "" + +#: ../../mod/settings.php:502 +msgid "Display Theme:" +msgstr "" + +#: ../../mod/settings.php:506 +msgid "Security and Privacy Settings" +msgstr "" + +#: ../../mod/settings.php:508 +msgid "Maximum Friend Requests/Day:" +msgstr "" + +#: ../../mod/settings.php:508 +msgid "(to prevent spam abuse)" +msgstr "" + +#: ../../mod/settings.php:510 +msgid "(click to open/close)" +msgstr "" + +#: ../../mod/settings.php:514 +msgid "Allow friends to post to your profile page:" +msgstr "" + +#: ../../mod/settings.php:515 +msgid "Automatically expire posts after days:" +msgstr "" + +#: ../../mod/settings.php:515 +msgid "If empty, posts will not expire. Expired posts will be deleted" +msgstr "" + +#: ../../mod/settings.php:524 +msgid "Notification Settings" +msgstr "" + +#: ../../mod/settings.php:525 +msgid "Send a notification email when:" +msgstr "" + +#: ../../mod/settings.php:526 +msgid "You receive an introduction" +msgstr "" + +#: ../../mod/settings.php:527 +msgid "Your introductions are confirmed" +msgstr "" + +#: ../../mod/settings.php:528 +msgid "Someone writes on your profile wall" +msgstr "" + +#: ../../mod/settings.php:529 +msgid "Someone writes a followup comment" +msgstr "" + +#: ../../mod/settings.php:530 +msgid "You receive a private message" +msgstr "" + +#: ../../mod/settings.php:534 +msgid "Email/Mailbox Setup" +msgstr "" + +#: ../../mod/settings.php:535 +msgid "" +"If you wish to communicate with email contacts using this service " +"(optional), please specify how to connect to your mailbox." +msgstr "" + +#: ../../mod/settings.php:536 +msgid "Last successful email check:" +msgstr "" + +#: ../../mod/settings.php:537 +msgid "Email access is disabled on this site." +msgstr "" + +#: ../../mod/settings.php:538 +msgid "IMAP server name:" +msgstr "" + +#: ../../mod/settings.php:539 +msgid "IMAP port:" +msgstr "" + +#: ../../mod/settings.php:540 +msgid "Security:" +msgstr "" + +#: ../../mod/settings.php:540 +msgid "None" +msgstr "" + +#: ../../mod/settings.php:541 +msgid "Email login name:" +msgstr "" + +#: ../../mod/settings.php:542 +msgid "Email password:" +msgstr "" + +#: ../../mod/settings.php:543 +msgid "Reply-to address:" +msgstr "" + +#: ../../mod/settings.php:544 +msgid "Send public posts to all email contacts:" +msgstr "" + +#: ../../mod/settings.php:549 +msgid "Advanced Page Settings" +msgstr "" + +#: ../../mod/network.php:51 +msgid "View Conversations" +msgstr "" + +#: ../../mod/network.php:54 +msgid "View New Items" +msgstr "" + +#: ../../mod/network.php:60 +msgid "View Any Items" +msgstr "" + +#: ../../mod/network.php:68 +msgid "View Starred Items" +msgstr "" + +#: ../../mod/network.php:76 +msgid "View Bookmarks" +msgstr "" + +#: ../../mod/network.php:99 +msgid "Saved Searches" +msgstr "" + +#: ../../mod/network.php:102 +msgid "Remove term" +msgstr "" + +#: ../../mod/network.php:154 +#, php-format +msgid "Warning: This group contains %s member from an insecure network." +msgid_plural "" +"Warning: This group contains %s members from an insecure network." +msgstr[0] "" +msgstr[1] "" + +#: ../../mod/network.php:157 +msgid "Private messages to this group are at risk of public disclosure." +msgstr "" + +#: ../../mod/network.php:254 +msgid "Contact: " +msgstr "" + +#: ../../mod/network.php:256 +msgid "Private messages to this person are at risk of public disclosure." +msgstr "" + +#: ../../mod/network.php:261 +msgid "Invalid contact." +msgstr "" + +#: ../../mod/notes.php:74 ../../include/text.php:612 +msgid "Save" +msgstr "" + +#: ../../mod/newmember.php:6 +msgid "Welcome to Friendika" +msgstr "" + +#: ../../mod/newmember.php:8 +msgid "New Member Checklist" +msgstr "" + +#: ../../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." +msgstr "" + +#: ../../mod/newmember.php:16 +msgid "" +"On your <em>Settings</em> page - change your initial password. Also make a " +"note of your Identity Address. This will be useful in making friends." +msgstr "" + +#: ../../mod/newmember.php:18 +msgid "" +"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 "" + +#: ../../mod/newmember.php:20 +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 "" + +#: ../../mod/newmember.php:23 +msgid "" +"Authorise the Facebook Connector if you currently have a Facebook account " +"and we will (optionally) import all your Facebook friends and conversations." +msgstr "" + +#: ../../mod/newmember.php:28 +msgid "" +"Enter your email access information on your Settings page if you wish to " +"import and interact with friends or mailing lists from your email INBOX" +msgstr "" + +#: ../../mod/newmember.php:30 +msgid "" +"Edit your <strong>default</strong> profile to your liking. Review the " +"settings for hiding your list of friends and hiding the profile from unknown " +"visitors." +msgstr "" + +#: ../../mod/newmember.php:32 +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 "" + +#: ../../mod/newmember.php:34 +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 <em>Connect</em> dialog." +msgstr "" + +#: ../../mod/newmember.php:36 +msgid "" +"The Directory page lets you find other people in this network or other " +"federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on " +"their profile page. Provide your own Identity Address if requested." +msgstr "" + +#: ../../mod/newmember.php:38 +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 "" + +#: ../../mod/newmember.php:40 +msgid "" +"Our <strong>help</strong> pages may be consulted for detail on other program " +"features and resources." +msgstr "" + +#: ../../mod/attach.php:8 +msgid "Item not available." +msgstr "" + +#: ../../mod/attach.php:20 +msgid "Item was not found." +msgstr "" + +#: ../../mod/group.php:82 +msgid "Create a group of contacts/friends." +msgstr "" + +#: ../../mod/group.php:83 ../../mod/group.php:166 +msgid "Group Name: " +msgstr "" + +#: ../../mod/group.php:164 ../../mod/profperm.php:105 +msgid "Click on a contact to add or remove." +msgstr "" + +#: ../../mod/group.php:165 +msgid "Group Editor" +msgstr "" + +#: ../../mod/group.php:180 +msgid "Members" +msgstr "" + +#: ../../mod/group.php:195 +msgid "All Contacts" +msgstr "" + +#: ../../mod/profperm.php:25 ../../mod/profperm.php:55 +msgid "Invalid profile identifier." +msgstr "" + +#: ../../mod/profperm.php:101 +msgid "Profile Visibility Editor" +msgstr "" + +#: ../../mod/profperm.php:114 +msgid "Visible To" +msgstr "" + +#: ../../mod/profperm.php:128 +msgid "All Contacts (with secure profile access)" +msgstr "" + +#: ../../mod/register.php:53 +msgid "An invitation is required." +msgstr "" + +#: ../../mod/register.php:58 +msgid "Invitation could not be verified." +msgstr "" + +#: ../../mod/register.php:112 +msgid "That doesn't appear to be your full (First Last) name." +msgstr "" + +#: ../../mod/register.php:511 +msgid "Membership on this site is by invitation only." +msgstr "" + +#: ../../mod/register.php:512 +msgid "Your invitation ID: " +msgstr "" + +#: ../../mod/friendika.php:42 +msgid "This is Friendika version" +msgstr "" + +#: ../../mod/friendika.php:43 +msgid "running at web location" +msgstr "" + +#: ../../mod/friendika.php:45 +msgid "" +"Shared content within the Friendika network is provided under the <a href=" +"\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution " +"3.0 license</a>" +msgstr "" + +#: ../../mod/friendika.php:47 +msgid "" +"Please visit <a href=\"http://project.friendika.com\">Project.Friendika.com</" +"a> to learn more about the Friendika project." +msgstr "" + +#: ../../mod/friendika.php:49 +msgid "Bug reports and issues: please visit" +msgstr "" + +#: ../../mod/friendika.php:50 +msgid "" +"Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - " +"dot com" +msgstr "" + +#: ../../mod/friendika.php:55 +msgid "Installed plugins/addons/apps" +msgstr "" + +#: ../../mod/friendika.php:63 +msgid "No installed plugins/addons/apps" +msgstr "" + +#: ../../mod/item.php:681 ../../mod/item.php:768 ../../mod/dfrn_notify.php:684 +msgid "Administrator@" +msgstr "" + +#: ../../mod/item.php:771 +#, php-format +msgid "%s posted to your profile wall at %s" +msgstr "" + +#: ../../mod/item.php:821 +#, php-format +msgid "You may visit them online at %s" +msgstr "" + +#: ../../mod/profile_photo.php:193 +msgid "Upload File:" +msgstr "" + +#: ../../mod/profile_photo.php:194 +msgid "Upload Profile Photo" +msgstr "" + +#: ../../mod/profile_photo.php:195 +msgid "Upload" +msgstr "" + +#: ../../mod/profile_photo.php:196 +msgid "skip this step" +msgstr "" + +#: ../../mod/profile_photo.php:196 +msgid "select a photo from your photo albums" +msgstr "" + +#: ../../mod/profile_photo.php:209 +msgid "Crop Image" +msgstr "" + +#: ../../mod/profile_photo.php:210 +msgid "Please adjust the image cropping for optimum viewing." +msgstr "" + +#: ../../mod/profile_photo.php:211 +msgid "Done Editing" +msgstr "" + +#: ../../mod/message.php:98 ../../include/conversation.php:700 +msgid "Please enter a link URL:" +msgstr "" + +#: ../../mod/message.php:166 +msgid "D, d M Y - g:i A" +msgstr "" + +#: ../../mod/admin.php:66 ../../mod/admin.php:299 +msgid "Site" +msgstr "" + +#: ../../mod/admin.php:67 ../../mod/admin.php:463 ../../mod/admin.php:475 +msgid "Users" +msgstr "" + +#: ../../mod/admin.php:68 ../../mod/admin.php:552 ../../mod/admin.php:589 +msgid "Plugins" +msgstr "" + +#: ../../mod/admin.php:69 +msgid "Update" +msgstr "" + +#: ../../mod/admin.php:83 ../../mod/admin.php:654 +msgid "Logs" +msgstr "" + +#: ../../mod/admin.php:88 +msgid "User registrations waiting for confirmation" +msgstr "" + +#: ../../mod/admin.php:151 ../../mod/admin.php:298 ../../mod/admin.php:462 +#: ../../mod/admin.php:551 ../../mod/admin.php:588 ../../mod/admin.php:653 +msgid "Administration" +msgstr "" + +#: ../../mod/admin.php:152 +msgid "Summary" +msgstr "" + +#: ../../mod/admin.php:153 +msgid "Registered users" +msgstr "" + +#: ../../mod/admin.php:155 +msgid "Pending registrations" +msgstr "" + +#: ../../mod/admin.php:156 +msgid "Version" +msgstr "" + +#: ../../mod/admin.php:158 +msgid "Active plugins" +msgstr "" + +#: ../../mod/admin.php:247 +msgid "Site settings updated." +msgstr "" + +#: ../../mod/admin.php:291 +msgid "Closed" +msgstr "" + +#: ../../mod/admin.php:292 +msgid "Requires approval" +msgstr "" + +#: ../../mod/admin.php:293 +msgid "Open" +msgstr "" + +#: ../../mod/admin.php:302 +msgid "File upload" +msgstr "" + +#: ../../mod/admin.php:303 +msgid "Policies" +msgstr "" + +#: ../../mod/admin.php:304 +msgid "Advanced" +msgstr "" + +#: ../../mod/admin.php:308 ../../addon/statusnet/statusnet.php:462 +msgid "Site name" +msgstr "" + +#: ../../mod/admin.php:309 +msgid "Banner/Logo" +msgstr "" + +#: ../../mod/admin.php:310 +msgid "System language" +msgstr "" + +#: ../../mod/admin.php:311 +msgid "System theme" +msgstr "" + +#: ../../mod/admin.php:313 +msgid "Maximum image size" +msgstr "" + +#: ../../mod/admin.php:315 +msgid "Register policy" +msgstr "" + +#: ../../mod/admin.php:316 +msgid "Register text" +msgstr "" + +#: ../../mod/admin.php:317 +msgid "Allowed friend domains" +msgstr "" + +#: ../../mod/admin.php:318 +msgid "Allowed email domains" +msgstr "" + +#: ../../mod/admin.php:319 +msgid "Block public" +msgstr "" + +#: ../../mod/admin.php:320 +msgid "Force publish" +msgstr "" + +#: ../../mod/admin.php:321 +msgid "Global directory update URL" +msgstr "" + +#: ../../mod/admin.php:323 +msgid "Block multiple registrations" +msgstr "" + +#: ../../mod/admin.php:324 +msgid "OpenID support" +msgstr "" + +#: ../../mod/admin.php:325 +msgid "Gravatar support" +msgstr "" + +#: ../../mod/admin.php:326 +msgid "Fullname check" +msgstr "" + +#: ../../mod/admin.php:327 +msgid "UTF-8 Regular expressions" +msgstr "" + +#: ../../mod/admin.php:328 +msgid "Show Community Page" +msgstr "" + +#: ../../mod/admin.php:329 +msgid "Enable OStatus support" +msgstr "" + +#: ../../mod/admin.php:330 +msgid "Enable Diaspora support" +msgstr "" + +#: ../../mod/admin.php:331 +msgid "Only allow Friendika contacts" +msgstr "" + +#: ../../mod/admin.php:332 +msgid "Verify SSL" +msgstr "" + +#: ../../mod/admin.php:333 +msgid "Proxy user" +msgstr "" + +#: ../../mod/admin.php:334 +msgid "Proxy URL" +msgstr "" + +#: ../../mod/admin.php:335 +msgid "Network timeout" +msgstr "" + +#: ../../mod/admin.php:356 +#, php-format +msgid "%s user blocked" +msgid_plural "%s users blocked/unblocked" +msgstr[0] "" +msgstr[1] "" + +#: ../../mod/admin.php:363 +#, php-format +msgid "%s user deleted" +msgid_plural "%s users deleted" +msgstr[0] "" +msgstr[1] "" + +#: ../../mod/admin.php:397 +#, php-format +msgid "User '%s' deleted" +msgstr "" + +#: ../../mod/admin.php:404 +#, php-format +msgid "User '%s' unblocked" +msgstr "" + +#: ../../mod/admin.php:404 +#, php-format +msgid "User '%s' blocked" +msgstr "" + +#: ../../mod/admin.php:465 +msgid "select all" +msgstr "" + +#: ../../mod/admin.php:466 +msgid "User registrations waiting for confirm" +msgstr "" + +#: ../../mod/admin.php:467 +msgid "Request date" +msgstr "" + +#: ../../mod/admin.php:467 ../../mod/admin.php:476 +#: ../../include/contact_selectors.php:78 +msgid "Email" +msgstr "" + +#: ../../mod/admin.php:470 +msgid "Deny" +msgstr "" + +#: ../../mod/admin.php:472 +msgid "Block" +msgstr "" + +#: ../../mod/admin.php:473 +msgid "Unblock" +msgstr "" + +#: ../../mod/admin.php:476 +msgid "Register date" +msgstr "" + +#: ../../mod/admin.php:476 +msgid "Last login" +msgstr "" + +#: ../../mod/admin.php:476 +msgid "Last item" +msgstr "" + +#: ../../mod/admin.php:476 +msgid "Account" +msgstr "" + +#: ../../mod/admin.php:478 +msgid "" +"Selected users will be deleted!\\n\\nEverything these users had posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" +msgstr "" + +#: ../../mod/admin.php:479 +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 "" + +#: ../../mod/admin.php:515 +#, php-format +msgid "Plugin %s disabled." +msgstr "" + +#: ../../mod/admin.php:519 +#, php-format +msgid "Plugin %s enabled." +msgstr "" + +#: ../../mod/admin.php:529 +msgid "Disable" +msgstr "" + +#: ../../mod/admin.php:531 +msgid "Enable" +msgstr "" + +#: ../../mod/admin.php:553 +msgid "Toggle" +msgstr "" + +#: ../../mod/admin.php:616 +msgid "Log settings updated." +msgstr "" + +#: ../../mod/admin.php:656 +msgid "Clear" +msgstr "" + +#: ../../mod/admin.php:662 +msgid "Debugging" +msgstr "" + +#: ../../mod/admin.php:663 +msgid "Log file" +msgstr "" + +#: ../../mod/admin.php:663 +msgid "Must be writable by web server. Relative to your Friendika index.php." +msgstr "" + +#: ../../mod/admin.php:664 +msgid "Log level" +msgstr "" + +#: ../../mod/admin.php:705 +msgid "Close" +msgstr "" + +#: ../../mod/admin.php:711 +msgid "FTP Host" +msgstr "" + +#: ../../mod/admin.php:712 +msgid "FTP Path" +msgstr "" + +#: ../../mod/admin.php:713 +msgid "FTP User" +msgstr "" + +#: ../../mod/admin.php:714 +msgid "FTP Password" +msgstr "" + +#: ../../mod/profile.php:103 ../../mod/display.php:63 +msgid "Access to this profile has been restricted." +msgstr "" + +#: ../../mod/profile.php:134 +msgid "Tips for New Members" +msgstr "" + +#: ../../mod/openid.php:79 ../../include/auth.php:216 +msgid "Welcome " +msgstr "" + +#: ../../mod/openid.php:80 ../../include/auth.php:217 +msgid "Please upload a profile photo." +msgstr "" + +#: ../../mod/follow.php:39 +msgid "" +"This site is not configured to allow communications with other networks." +msgstr "" + +#: ../../mod/follow.php:40 ../../mod/follow.php:50 +msgid "No compatible communication protocols or feeds were discovered." +msgstr "" + +#: ../../mod/follow.php:52 +msgid "An author or name was not found." +msgstr "" + +#: ../../mod/follow.php:54 +msgid "No browser URL could be matched to this address." +msgstr "" + +#: ../../mod/follow.php:61 +msgid "" +"The profile address specified belongs to a network which has been disabled " +"on this site." +msgstr "" + +#: ../../mod/apps.php:11 +msgid "No installed applications." +msgstr "" + +#: ../../mod/profiles.php:353 +msgid "Hide your contact/friend list from viewers of this profile?" +msgstr "" + +#: ../../mod/profiles.php:371 +msgid "Edit Profile Details" +msgstr "" + +#: ../../mod/profiles.php:373 +msgid "View this profile" +msgstr "" + +#: ../../mod/profiles.php:374 +msgid "Create a new profile using these settings" +msgstr "" + +#: ../../mod/profiles.php:375 +msgid "Clone this profile" +msgstr "" + +#: ../../mod/profiles.php:376 +msgid "Delete this profile" +msgstr "" + +#: ../../mod/profiles.php:377 +msgid "Profile Name:" +msgstr "" + +#: ../../mod/profiles.php:378 +msgid "Your Full Name:" +msgstr "" + +#: ../../mod/profiles.php:379 +msgid "Title/Description:" +msgstr "" + +#: ../../mod/profiles.php:380 +msgid "Your Gender:" +msgstr "" + +#: ../../mod/profiles.php:381 +#, php-format +msgid "Birthday (%s):" +msgstr "" + +#: ../../mod/profiles.php:382 +msgid "Street Address:" +msgstr "" + +#: ../../mod/profiles.php:383 +msgid "Locality/City:" +msgstr "" + +#: ../../mod/profiles.php:384 +msgid "Postal/Zip Code:" +msgstr "" + +#: ../../mod/profiles.php:385 +msgid "Country:" +msgstr "" + +#: ../../mod/profiles.php:386 +msgid "Region/State:" +msgstr "" + +#: ../../mod/profiles.php:387 +msgid "<span class=\"heart\">♥</span> Marital Status:" +msgstr "" + +#: ../../mod/profiles.php:388 +msgid "Who: (if applicable)" +msgstr "" + +#: ../../mod/profiles.php:389 +msgid "Examples: cathy123, Cathy Williams, cathy@example.com" +msgstr "" + +#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:90 +msgid "Sexual Preference:" +msgstr "" + +#: ../../mod/profiles.php:391 +msgid "Homepage URL:" +msgstr "" + +#: ../../mod/profiles.php:392 ../../include/profile_advanced.php:115 +msgid "Political Views:" +msgstr "" + +#: ../../mod/profiles.php:393 +msgid "Religious Views:" +msgstr "" + +#: ../../mod/profiles.php:394 +msgid "Public Keywords:" +msgstr "" + +#: ../../mod/profiles.php:395 +msgid "Private Keywords:" +msgstr "" + +#: ../../mod/profiles.php:396 +msgid "Example: fishing photography software" +msgstr "" + +#: ../../mod/profiles.php:397 +msgid "(Used for suggesting potential friends, can be seen by others)" +msgstr "" + +#: ../../mod/profiles.php:398 +msgid "(Used for searching profiles, never shown to others)" +msgstr "" + +#: ../../mod/profiles.php:399 +msgid "Tell us about yourself..." +msgstr "" + +#: ../../mod/profiles.php:400 +msgid "Hobbies/Interests" +msgstr "" + +#: ../../mod/profiles.php:401 +msgid "Contact information and Social Networks" +msgstr "" + +#: ../../mod/profiles.php:402 +msgid "Musical interests" +msgstr "" + +#: ../../mod/profiles.php:403 +msgid "Books, literature" +msgstr "" + +#: ../../mod/profiles.php:404 +msgid "Television" +msgstr "" + +#: ../../mod/profiles.php:405 +msgid "Film/dance/culture/entertainment" +msgstr "" + +#: ../../mod/profiles.php:406 +msgid "Love/romance" +msgstr "" + +#: ../../mod/profiles.php:407 +msgid "Work/employment" +msgstr "" + +#: ../../mod/profiles.php:408 +msgid "School/education" +msgstr "" + +#: ../../mod/profiles.php:459 +msgid "Change profile photo" +msgstr "" + +#: ../../mod/profiles.php:460 +msgid "Create New Profile" +msgstr "" + +#: ../../mod/profiles.php:472 +msgid "visible to everybody" +msgstr "" + +#: ../../mod/profiles.php:473 +msgid "Edit visibility" +msgstr "" + +#: ../../mod/directory.php:46 +msgid "Normal site view" +msgstr "" + +#: ../../mod/directory.php:48 +msgid "View all site entries" +msgstr "" + +#: ../../mod/directory.php:56 +msgid "Site Directory" +msgstr "" + +#: ../../mod/directory.php:115 +msgid "Gender: " +msgstr "" + +#: ../../mod/directory.php:141 +msgid "No entries (some entries may be hidden)." +msgstr "" + +#: ../../mod/invite.php:92 +msgid "You have no more invitations available" +msgstr "" + +#: ../../mod/invite.php:104 +msgid "You will need to supply this invitation code: $invite_code" +msgstr "" + +#: ../../mod/dfrn_confirm.php:458 ../../include/conversation.php:79 +#, php-format +msgid "%1$s is now friends with %2$s" +msgstr "" + +#: ../../mod/dfrn_confirm.php:585 +#, php-format +msgid "Site public key not available in contact record for URL %s." +msgstr "" + +#: ../../addon/facebook/facebook.php:325 +msgid "Updating contacts" +msgstr "" + +#: ../../addon/facebook/facebook.php:347 +msgid "Install Facebook connector for this account." +msgstr "" + +#: ../../addon/facebook/facebook.php:354 +msgid "Remove Facebook connector" +msgstr "" + +#: ../../addon/facebook/facebook.php:364 +msgid "Link all your Facebook friends and conversations" +msgstr "" + +#: ../../addon/facebook/facebook.php:368 +msgid "" +"Do not link your Facebook profile wall posts - as these could be visible to " +"people that would not be able to see them on Facebook." +msgstr "" + +#: ../../addon/facebook/facebook.php:514 +msgid "" +"Post to Facebook cancelled because of multi-network access permission " +"conflict." +msgstr "" + +#: ../../addon/facebook/facebook.php:663 +msgid "View on Friendika" +msgstr "" + +#: ../../addon/facebook/facebook.php:694 +msgid "Facebook post failed. Queued for retry." +msgstr "" + +#: ../../addon/widgets/widgets.php:53 +msgid "Generate new key" +msgstr "" + +#: ../../addon/widgets/widgets.php:56 +msgid "Widgets key" +msgstr "" + +#: ../../addon/widgets/widgets.php:58 +msgid "Widgets available" +msgstr "" + +#: ../../addon/widgets/widget_friends.php:30 +msgid "Connect on Friendika!" +msgstr "" + +#: ../../addon/impressum/impressum.php:25 +msgid "Impressum" +msgstr "" + +#: ../../addon/impressum/impressum.php:38 +#: ../../addon/impressum/impressum.php:40 +#: ../../addon/impressum/impressum.php:70 +msgid "Site Owner" +msgstr "" + +#: ../../addon/impressum/impressum.php:38 +#: ../../addon/impressum/impressum.php:74 +msgid "Email Address" +msgstr "" + +#: ../../addon/impressum/impressum.php:43 +#: ../../addon/impressum/impressum.php:72 +msgid "Postal Address" +msgstr "" + +#: ../../addon/impressum/impressum.php:49 +msgid "" +"The impressum addon needs to be configured!<br />Please add at least the " +"<tt>owner</tt> variable to your config file. For other variables please " +"refer to the README file of the addon." +msgstr "" + +#: ../../addon/impressum/impressum.php:71 +msgid "Site Owners Profile" +msgstr "" + +#: ../../addon/impressum/impressum.php:73 +msgid "Notes" +msgstr "" + +#: ../../addon/oembed/oembed.php:30 +msgid "OEmbed settings updated" +msgstr "" + +#: ../../addon/oembed/oembed.php:43 +msgid "Use OEmbed for YouTube videos" +msgstr "" + +#: ../../addon/oembed/oembed.php:71 +msgid "URL to embed:" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:175 +msgid "" +"Please contact your site administrator.<br />The provided API URL is not " +"valid." +msgstr "" + +#: ../../addon/statusnet/statusnet.php:203 +msgid "We could not contact the StatusNet API with the Path you entered." +msgstr "" + +#: ../../addon/statusnet/statusnet.php:230 +msgid "StatusNet settings updated." +msgstr "" + +#: ../../addon/statusnet/statusnet.php:267 +msgid "Globally Available StatusNet OAuthKeys" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:268 +msgid "" +"There are preconfigured OAuth key pairs for some StatusNet servers " +"available. If you are useing one of them, please use these credentials. If " +"not feel free to connect to any other StatusNet instance (see below)." +msgstr "" + +#: ../../addon/statusnet/statusnet.php:276 +msgid "Provide your own OAuth Credentials" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:315 +msgid "Cancel Connection Process" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:317 +msgid "Current StatusNet API is" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:318 +msgid "Cancel StatusNet Connection" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:330 +msgid "" +"If enabled all your <strong>public</strong> postings can be posted to the " +"associated StatusNet account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "" + +#: ../../addon/statusnet/statusnet.php:332 +msgid "Allow posting to StatusNet" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:335 +msgid "Send public postings to StatusNet by default" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:463 +msgid "API URL" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:464 +msgid "Consumer Secret" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:465 +msgid "Consumer Key" +msgstr "" + +#: ../../addon/wppost/wppost.php:33 +msgid "Post to Wordpress" +msgstr "" + +#: ../../addon/wppost/wppost.php:65 +msgid "WordPress Post Settings" +msgstr "" + +#: ../../addon/wppost/wppost.php:67 +msgid "Enable WordPress Post Plugin" +msgstr "" + +#: ../../addon/wppost/wppost.php:72 +msgid "WordPress username" +msgstr "" + +#: ../../addon/wppost/wppost.php:77 +msgid "WordPress password" +msgstr "" + +#: ../../addon/wppost/wppost.php:82 +msgid "WordPress API URL" +msgstr "" + +#: ../../addon/wppost/wppost.php:87 +msgid "Post to WordPress by default" +msgstr "" + +#: ../../addon/piwik/piwik.php:70 +msgid "" +"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> " +"analytics tool." +msgstr "" + +#: ../../addon/piwik/piwik.php:73 +#, php-format +msgid "" +"If you do not want that your visits are logged this way you <a href='%s'>can " +"set a cookie to prevent Piwik from tracking further visits of the site</a> " +"(opt-out)." +msgstr "" + +#: ../../addon/piwik/piwik.php:82 +msgid "Piwik Base URL" +msgstr "" + +#: ../../addon/piwik/piwik.php:83 +msgid "Site ID" +msgstr "" + +#: ../../addon/piwik/piwik.php:84 +msgid "Show opt-out cookie link?" +msgstr "" + +#: ../../addon/twitter/twitter.php:115 +msgid "Twitter settings updated." +msgstr "" + +#: ../../addon/twitter/twitter.php:181 +msgid "" +"If enabled all your <strong>public</strong> postings can be posted to the " +"associated Twitter account. You can choose to do so by default (here) or for " +"every posting separately in the posting options when writing the entry." +msgstr "" + +#: ../../addon/twitter/twitter.php:183 +msgid "Allow posting to Twitter" +msgstr "" + +#: ../../addon/twitter/twitter.php:186 +msgid "Send public postings to Twitter by default" +msgstr "" + +#: ../../addon/twitter/twitter.php:282 +msgid "Consumer key" +msgstr "" + +#: ../../addon/twitter/twitter.php:283 +msgid "Consumer secret" +msgstr "" + +#: ../../include/profile_advanced.php:45 +msgid "j F, Y" +msgstr "" + +#: ../../include/profile_advanced.php:46 +msgid "j F" +msgstr "" + +#: ../../include/profile_advanced.php:59 +msgid "Age:" +msgstr "" + +#: ../../include/profile_advanced.php:70 +msgid "<span class=\"heart\">♥</span> Status:" +msgstr "" + +#: ../../include/profile_advanced.php:127 +msgid "Religion:" +msgstr "" + +#: ../../include/profile_advanced.php:138 +msgid "About:" +msgstr "" + +#: ../../include/profile_advanced.php:150 +msgid "Hobbies/Interests:" +msgstr "" + +#: ../../include/profile_advanced.php:162 +msgid "Contact information and Social Networks:" +msgstr "" + +#: ../../include/profile_advanced.php:174 +msgid "Musical interests:" +msgstr "" + +#: ../../include/profile_advanced.php:186 +msgid "Books, literature:" +msgstr "" + +#: ../../include/profile_advanced.php:198 +msgid "Television:" +msgstr "" + +#: ../../include/profile_advanced.php:210 +msgid "Film/dance/culture/entertainment:" +msgstr "" + +#: ../../include/profile_advanced.php:222 +msgid "Love/Romance:" +msgstr "" + +#: ../../include/profile_advanced.php:234 +msgid "Work/employment:" +msgstr "" + +#: ../../include/profile_advanced.php:246 +msgid "School/education:" +msgstr "" + +#: ../../include/contact_selectors.php:78 +msgid "OStatus" +msgstr "" + +#: ../../include/contact_selectors.php:78 +msgid "RSS/Atom" +msgstr "" + +#: ../../include/contact_selectors.php:78 +msgid "Zot!" +msgstr "" + +#: ../../include/event.php:17 ../../include/bb2diaspora.php:206 +msgid "Starts:" +msgstr "" + +#: ../../include/event.php:27 ../../include/bb2diaspora.php:214 +msgid "Finishes:" +msgstr "" + +#: ../../include/delivery.php:363 ../../include/notifier.php:549 +msgid "(no subject)" +msgstr "" + +#: ../../include/text.php:754 +msgid "bytes" +msgstr "" + +#: ../../include/text.php:837 +msgid "Select an alternate language" +msgstr "" + +#: ../../include/diaspora.php:390 +msgid "Sharing notification from Diaspora network" +msgstr "" + +#: ../../include/diaspora.php:940 +msgid "link" +msgstr "" + +#: ../../include/diaspora.php:1121 +#, php-format +msgid "[Relayed] Comment authored by %s from network %s" +msgstr "" + +#: ../../include/nav.php:41 +msgid "End this session" +msgstr "" + +#: ../../include/nav.php:44 +msgid "Sign in" +msgstr "" + +#: ../../include/nav.php:55 +msgid "Home Page" +msgstr "" + +#: ../../include/nav.php:59 +msgid "Create an account" +msgstr "" + +#: ../../include/nav.php:64 +msgid "Help and documentation" +msgstr "" + +#: ../../include/nav.php:67 +msgid "Addon applications, utilities, games" +msgstr "" + +#: ../../include/nav.php:69 +msgid "Search site content" +msgstr "" + +#: ../../include/nav.php:79 +msgid "Conversations on this site" +msgstr "" + +#: ../../include/nav.php:81 +msgid "People directory" +msgstr "" + +#: ../../include/nav.php:91 +msgid "Conversations from your friends" +msgstr "" + +#: ../../include/nav.php:93 +msgid "Your posts and conversations" +msgstr "" + +#: ../../include/nav.php:99 +msgid "Friend requests" +msgstr "" + +#: ../../include/nav.php:102 +msgid "Private mail" +msgstr "" + +#: ../../include/nav.php:105 +msgid "Manage other pages" +msgstr "" + +#: ../../include/nav.php:109 +msgid "Manage/edit profiles" +msgstr "" + +#: ../../include/nav.php:110 +msgid "Manage/edit friends and contacts" +msgstr "" + +#: ../../include/nav.php:117 +msgid "Admin" +msgstr "" + +#: ../../include/nav.php:117 +msgid "Site setup and configuration" +msgstr "" + +#: ../../include/datetime.php:228 +msgid "never" +msgstr "" + +#: ../../include/poller.php:423 +msgid "From: " +msgstr "" + +#: ../../include/bbcode.php:116 +msgid "Image/photo" +msgstr "" + +#: ../../include/acl_selectors.php:279 +msgid "Visible to everybody" +msgstr "" + +#: ../../include/acl_selectors.php:280 +msgid "show" +msgstr "" + +#: ../../include/acl_selectors.php:281 +msgid "don't show" +msgstr "" + +#: ../../include/Contact.php:121 ../../include/conversation.php:609 +msgid "View status" +msgstr "" + +#: ../../include/Contact.php:122 ../../include/conversation.php:610 +msgid "View profile" +msgstr "" + +#: ../../include/Contact.php:123 ../../include/conversation.php:611 +msgid "View photos" +msgstr "" + +#: ../../include/Contact.php:124 ../../include/conversation.php:612 +msgid "View recent" +msgstr "" + +#: ../../include/Contact.php:126 ../../include/conversation.php:614 +msgid "Send PM" +msgstr "" + +#: ../../include/conversation.php:23 +msgid "event" +msgstr "" + +#: ../../include/conversation.php:214 ../../include/conversation.php:489 +#: ../../include/conversation.php:490 +#, php-format +msgid "View %s's profile" +msgstr "" + +#: ../../include/conversation.php:223 ../../include/conversation.php:502 +#, php-format +msgid "%s from %s" +msgstr "" + +#: ../../include/conversation.php:302 +msgid "See more posts like this" +msgstr "" + +#: ../../include/conversation.php:330 +#, php-format +msgid "See all %d comments" +msgstr "" + +#: ../../include/conversation.php:428 +msgid "Select" +msgstr "" + +#: ../../include/conversation.php:430 +msgid "toggle star status" +msgstr "" + +#: ../../include/conversation.php:535 +msgid "Delete Selected Items" +msgstr "" + +#: ../../include/conversation.php:699 +msgid "Visible to <strong>everybody</strong>" +msgstr "" + +#: ../../include/conversation.php:701 +msgid "Please enter a YouTube link:" +msgstr "" + +#: ../../include/conversation.php:702 +msgid "Please enter a video(.ogg) link/URL:" +msgstr "" + +#: ../../include/conversation.php:703 +msgid "Please enter an audio(.ogg) link/URL:" +msgstr "" + +#: ../../include/conversation.php:704 +msgid "Where are you right now?" +msgstr "" + +#: ../../include/conversation.php:705 +msgid "Enter a title for this item" +msgstr "" + +#: ../../include/conversation.php:756 +msgid "Set title" +msgstr "" + +#: ../../boot.php:410 +msgid "Delete this item?" +msgstr "" + +#: ../../boot.php:987 +msgid "g A l F d" +msgstr "" diff --git a/view/es/strings.php b/view/es/strings.php index 8e7a8fe112..4044755a54 100644 --- a/view/es/strings.php +++ b/view/es/strings.php @@ -1,20 +1,17 @@ <?php -function string_plural_select($n){ - return ($n != 1); -} ; $a->strings["Not Found"] = "No se ha encontrado"; -$a->strings["Page not found."] = "Página no encontrada."; +$a->strings["Page not found."] = "Página no encontrada."; $a->strings["Permission denied"] = "Permiso denegado"; $a->strings["Permission denied."] = "Permiso denegado."; -$a->strings["Create a New Account"] = "Crea una nueva cuenta"; +$a->strings["Create a New Account"] = "Crear una nueva cuenta"; $a->strings["Register"] = "Registrarse"; $a->strings["Nickname or Email address: "] = "Apodo o dirección de email: "; -$a->strings["Password: "] = "Contraseña: "; +$a->strings["Password: "] = "Contraseña: "; $a->strings["Login"] = "Acceder"; $a->strings["Nickname/Email/OpenID: "] = "Apodo/Email/OpenID: "; -$a->strings["Password (if not OpenID): "] = "Contraseña (si no OpenID): "; +$a->strings["Password (if not OpenID): "] = "Contraseña (si no OpenID): "; $a->strings["Forgot your password?"] = "¿Olvidó la contraseña?"; $a->strings["Password Reset"] = "Resetear la contraseña"; $a->strings["Logout"] = "Salir"; @@ -34,7 +31,7 @@ $a->strings["No contacts"] = "Nigún contacto"; $a->strings["Contacts"] = "Contactos"; $a->strings["View Contacts"] = "Ver contactos"; $a->strings["Search"] = "Busca"; -$a->strings["No profile"] = "Nigún perfil"; +$a->strings["No profile"] = "Nigún perfil"; $a->strings["Connect"] = "Conecta"; $a->strings["Location:"] = "Ubicación:"; $a->strings[", "] = ", "; @@ -329,9 +326,9 @@ $a->strings["Please login to confirm introduction."] = "Inicia sesión para conf $a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Inicio de sesión con la identificación incorrecta. Entra en <strong>este</ strong> perfil."; $a->strings["[Name Withheld]"] = "[Nombre oculto]"; $a->strings["Introduction received at "] = "Presentación recibida en"; -$a->strings["Friend/Connection Request"] = "Solicitud de Amistad/Conexión"; +$a->strings["Friend/Connection Request"] = "Solicitud de Amistad/Conexión"; $a->strings["Please answer the following:"] = "Por favor responda lo siguiente:"; -$a->strings["Does \$name know you?"] = "\$name te conoce?"; +$a->strings["Does \$name know you?"] = "$name te conoce?"; $a->strings["Add a personal note:"] = "Agregar una nota personal:"; $a->strings["Please enter your profile address from one of the following supported social networks:"] = "Por favor, introduzca su dirección de perfil de uno de las siguientes redes sociales soportadas:"; $a->strings["Friendika"] = "Friendika"; @@ -577,3 +574,522 @@ $a->strings["%d Contact"] = array( 0 => "%d Contacto", 1 => "%d Contactos", ); +$a->strings["Post successful."] = ""; +$a->strings["Contact settings applied."] = ""; +$a->strings["Contact update failed."] = ""; +$a->strings["Repair Contact Settings"] = ""; +$a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working."] = ""; +$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = ""; +$a->strings["Name"] = ""; +$a->strings["Account Nickname"] = ""; +$a->strings["@Tagname - overrides Name/Nickname"] = ""; +$a->strings["Account URL"] = ""; +$a->strings["Friend Request URL"] = ""; +$a->strings["Friend Confirm URL"] = ""; +$a->strings["Notification Endpoint URL"] = ""; +$a->strings["Poll/Feed URL"] = ""; +$a->strings["Help:"] = ""; +$a->strings["Help"] = ""; +$a->strings["File exceeds size limit of %d"] = ""; +$a->strings["File upload failed."] = ""; +$a->strings["Friend suggestion sent."] = ""; +$a->strings["Suggest Friends"] = ""; +$a->strings["Suggest a friend for %s"] = ""; +$a->strings["Status"] = ""; +$a->strings["Profile"] = ""; +$a->strings["Photos"] = ""; +$a->strings["Events"] = ""; +$a->strings["Personal Notes"] = ""; +$a->strings["Create New Event"] = ""; +$a->strings["Previous"] = ""; +$a->strings["Next"] = ""; +$a->strings["l, F j"] = ""; +$a->strings["Edit event"] = ""; +$a->strings["hour:minute"] = ""; +$a->strings["Event details"] = ""; +$a->strings["Format is %s %s. Starting date and Description are required."] = ""; +$a->strings["Event Starts:"] = ""; +$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["Share this event"] = ""; +$a->strings["everybody"] = ""; +$a->strings["Image file is empty."] = ""; +$a->strings["Public access denied."] = ""; +$a->strings["Access to this item is restricted."] = ""; +$a->strings["Comment"] = ""; +$a->strings["Not available."] = ""; +$a->strings["Community"] = ""; +$a->strings["Post to Email"] = ""; +$a->strings["Attach file"] = ""; +$a->strings["Public post"] = ""; +$a->strings["Welcome home %s."] = ""; +$a->strings["Please confirm your introduction/connection request to %s."] = ""; +$a->strings["Confirm"] = ""; +$a->strings["Diaspora members: Please do not use this form. Instead, enter \"%s\" into your Diaspora search bar."] = ""; +$a->strings["Please enter your 'Identity Address' from one of the following supported social networks:"] = ""; +$a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = ""; +$a->strings["Does %s know you?"] = ""; +$a->strings["Diaspora"] = ""; +$a->strings["- please share from your own site as noted above"] = ""; +$a->strings["Your Identity Address:"] = ""; +$a->strings["Proceed with Installation"] = ""; +$a->strings["Your Friendika site database has been installed."] = ""; +$a->strings["Proceed to registration"] = ""; +$a->strings["Friendika Social Network"] = ""; +$a->strings["Installation"] = ""; +$a->strings["In order to install Friendika we need to know how to connect to your database."] = ""; +$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = ""; +$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = ""; +$a->strings["Database Server Name"] = ""; +$a->strings["Database Login Name"] = ""; +$a->strings["Database Login Password"] = ""; +$a->strings["Database Name"] = ""; +$a->strings["Please select a default timezone for your website"] = ""; +$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = ""; +$a->strings["Error: mb_string PHP module required but not installed."] = ""; +$a->strings["l F d, Y \\@ g:i A"] = ""; +$a->strings["Time Conversion"] = ""; +$a->strings["Friendika provides this service for sharing events with other networks and friends in unknown timezones."] = ""; +$a->strings["Converted localtime: %s"] = ""; +$a->strings["UTC time: %s"] = ""; +$a->strings["Please select your timezone:"] = ""; +$a->strings["[Embedded content - reload page to view]"] = ""; +$a->strings["Profile Match"] = ""; +$a->strings["No keywords to match. Please add keywords to your default profile."] = ""; +$a->strings["No matches"] = ""; +$a->strings["Pending Friend/Connect Notifications"] = ""; +$a->strings["Friend Suggestion"] = ""; +$a->strings["suggested by %s"] = ""; +$a->strings["Sharer"] = ""; +$a->strings["%d invitation available"] = array( + 0 => "", + 1 => "", +); +$a->strings["Find People With Shared Interests"] = ""; +$a->strings["Privacy Unavailable"] = ""; +$a->strings["Private communications are not available for this contact."] = ""; +$a->strings["Suggest friends"] = ""; +$a->strings["Network type: %s"] = ""; +$a->strings["Profile Visibility"] = ""; +$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = ""; +$a->strings["Contact Information / Notes"] = ""; +$a->strings["Online Reputation"] = ""; +$a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = ""; +$a->strings["You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them."] = ""; +$a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = ""; +$a->strings["Visit %s's profile [%s]"] = ""; +$a->strings["Repair contact URL settings"] = ""; +$a->strings["Repair contact URL settings (WARNING: Advanced)"] = ""; +$a->strings["View conversations"] = ""; +$a->strings["No valid account found."] = ""; +$a->strings["Password reset request issued. Check your email."] = ""; +$a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = ""; +$a->strings["Your password has been reset as requested."] = ""; +$a->strings["Your new password is"] = ""; +$a->strings["Save or copy your new password - and then"] = ""; +$a->strings["click here to login"] = ""; +$a->strings["Your password may be changed from the <em>Settings</em> page after successful login."] = ""; +$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: "] = ""; +$a->strings["Reset"] = ""; +$a->strings["Failed to connect with email account using the settings provided."] = ""; +$a->strings["Account settings"] = ""; +$a->strings["Plugin settings"] = ""; +$a->strings["Normal Account"] = ""; +$a->strings["This account is a normal personal profile"] = ""; +$a->strings["Soapbox Account"] = ""; +$a->strings["Automatically approve all connection/friend requests as read-only fans"] = ""; +$a->strings["Community/Celebrity Account"] = ""; +$a->strings["Automatically approve all connection/friend requests as read-write fans"] = ""; +$a->strings["Automatic Friend Account"] = ""; +$a->strings["Automatically approve all connection/friend requests as friends"] = ""; +$a->strings["OpenID:"] = ""; +$a->strings["(Optional) Allow this OpenID to login to this account."] = ""; +$a->strings["Publish your default profile in your local site directory?"] = ""; +$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 profile details and all your messages from unknown viewers?"] = ""; +$a->strings["or"] = ""; +$a->strings["Your Identity Address is"] = ""; +$a->strings["Export Personal Data"] = ""; +$a->strings["Password Settings"] = ""; +$a->strings["New Password:"] = ""; +$a->strings["Confirm:"] = ""; +$a->strings["Leave password fields blank unless changing"] = ""; +$a->strings["Basic Settings"] = ""; +$a->strings["Full Name:"] = ""; +$a->strings["Email Address:"] = ""; +$a->strings["Your Timezone:"] = ""; +$a->strings["Default Post Location:"] = ""; +$a->strings["Use Browser Location:"] = ""; +$a->strings["Display Theme:"] = ""; +$a->strings["Security and Privacy Settings"] = ""; +$a->strings["Maximum Friend Requests/Day:"] = ""; +$a->strings["(to prevent spam abuse)"] = ""; +$a->strings["(click to open/close)"] = ""; +$a->strings["Allow friends to post to your profile page:"] = ""; +$a->strings["Automatically expire posts after days:"] = ""; +$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = ""; +$a->strings["Notification Settings"] = ""; +$a->strings["Send a notification email when:"] = ""; +$a->strings["You receive an introduction"] = ""; +$a->strings["Your introductions are confirmed"] = ""; +$a->strings["Someone writes on your profile wall"] = ""; +$a->strings["Someone writes a followup comment"] = ""; +$a->strings["You receive a private message"] = ""; +$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."] = ""; +$a->strings["Last successful email check:"] = ""; +$a->strings["Email access is disabled on this site."] = ""; +$a->strings["IMAP server name:"] = ""; +$a->strings["IMAP port:"] = ""; +$a->strings["Security:"] = ""; +$a->strings["None"] = ""; +$a->strings["Email login name:"] = ""; +$a->strings["Email password:"] = ""; +$a->strings["Reply-to address:"] = ""; +$a->strings["Send public posts to all email contacts:"] = ""; +$a->strings["Advanced Page Settings"] = ""; +$a->strings["View Conversations"] = ""; +$a->strings["View New Items"] = ""; +$a->strings["View Any Items"] = ""; +$a->strings["View Starred Items"] = ""; +$a->strings["View Bookmarks"] = ""; +$a->strings["Saved Searches"] = ""; +$a->strings["Remove term"] = ""; +$a->strings["Warning: This group contains %s member from an insecure network."] = array( + 0 => "", + 1 => "", +); +$a->strings["Private messages to this group are at risk of public disclosure."] = ""; +$a->strings["Contact: "] = ""; +$a->strings["Private messages to this person are at risk of public disclosure."] = ""; +$a->strings["Invalid contact."] = ""; +$a->strings["Save"] = ""; +$a->strings["Welcome to Friendika"] = ""; +$a->strings["New Member Checklist"] = ""; +$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = ""; +$a->strings["On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = ""; +$a->strings["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."] = ""; +$a->strings["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."] = ""; +$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = ""; +$a->strings["Enter your email access information on your Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = ""; +$a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = ""; +$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["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 <em>Connect</em> dialog."] = ""; +$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = ""; +$a->strings["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."] = ""; +$a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = ""; +$a->strings["Item not available."] = ""; +$a->strings["Item was not found."] = ""; +$a->strings["Create a group of contacts/friends."] = ""; +$a->strings["Group Name: "] = ""; +$a->strings["Click on a contact to add or remove."] = ""; +$a->strings["Group Editor"] = ""; +$a->strings["Members"] = ""; +$a->strings["All Contacts"] = ""; +$a->strings["Invalid profile identifier."] = ""; +$a->strings["Profile Visibility Editor"] = ""; +$a->strings["Visible To"] = ""; +$a->strings["All Contacts (with secure profile access)"] = ""; +$a->strings["An invitation is required."] = ""; +$a->strings["Invitation could not be verified."] = ""; +$a->strings["That doesn't appear to be your full (First Last) name."] = ""; +$a->strings["Membership on this site is by invitation only."] = ""; +$a->strings["Your invitation ID: "] = ""; +$a->strings["This is Friendika version"] = ""; +$a->strings["running at web location"] = ""; +$a->strings["Shared content within the Friendika network is provided under the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0 license</a>"] = ""; +$a->strings["Please visit <a href=\"http://project.friendika.com\">Project.Friendika.com</a> to learn more about the Friendika project."] = ""; +$a->strings["Bug reports and issues: please visit"] = ""; +$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = ""; +$a->strings["Installed plugins/addons/apps"] = ""; +$a->strings["No installed plugins/addons/apps"] = ""; +$a->strings["Administrator@"] = ""; +$a->strings["%s posted to your profile wall at %s"] = ""; +$a->strings["You may visit them online at %s"] = ""; +$a->strings["Upload File:"] = ""; +$a->strings["Upload Profile Photo"] = ""; +$a->strings["Upload"] = ""; +$a->strings["skip this step"] = ""; +$a->strings["select a photo from your photo albums"] = ""; +$a->strings["Crop Image"] = ""; +$a->strings["Please adjust the image cropping for optimum viewing."] = ""; +$a->strings["Done Editing"] = ""; +$a->strings["Please enter a link URL:"] = ""; +$a->strings["D, d M Y - g:i A"] = ""; +$a->strings["Site"] = ""; +$a->strings["Users"] = ""; +$a->strings["Plugins"] = ""; +$a->strings["Update"] = ""; +$a->strings["Logs"] = ""; +$a->strings["User registrations waiting for confirmation"] = ""; +$a->strings["Administration"] = ""; +$a->strings["Summary"] = ""; +$a->strings["Registered users"] = ""; +$a->strings["Pending registrations"] = ""; +$a->strings["Version"] = ""; +$a->strings["Active plugins"] = ""; +$a->strings["Site settings updated."] = ""; +$a->strings["Closed"] = ""; +$a->strings["Requires approval"] = ""; +$a->strings["Open"] = ""; +$a->strings["File upload"] = ""; +$a->strings["Policies"] = ""; +$a->strings["Advanced"] = ""; +$a->strings["Site name"] = ""; +$a->strings["Banner/Logo"] = ""; +$a->strings["System language"] = ""; +$a->strings["System theme"] = ""; +$a->strings["Maximum image size"] = ""; +$a->strings["Register policy"] = ""; +$a->strings["Register text"] = ""; +$a->strings["Allowed friend domains"] = ""; +$a->strings["Allowed email domains"] = ""; +$a->strings["Block public"] = ""; +$a->strings["Force publish"] = ""; +$a->strings["Global directory update URL"] = ""; +$a->strings["Block multiple registrations"] = ""; +$a->strings["OpenID support"] = ""; +$a->strings["Gravatar support"] = ""; +$a->strings["Fullname check"] = ""; +$a->strings["UTF-8 Regular expressions"] = ""; +$a->strings["Show Community Page"] = ""; +$a->strings["Enable OStatus support"] = ""; +$a->strings["Enable Diaspora support"] = ""; +$a->strings["Only allow Friendika contacts"] = ""; +$a->strings["Verify SSL"] = ""; +$a->strings["Proxy user"] = ""; +$a->strings["Proxy URL"] = ""; +$a->strings["Network timeout"] = ""; +$a->strings["%s user blocked"] = array( + 0 => "", + 1 => "", +); +$a->strings["%s user deleted"] = array( + 0 => "", + 1 => "", +); +$a->strings["User '%s' deleted"] = ""; +$a->strings["User '%s' unblocked"] = ""; +$a->strings["User '%s' blocked"] = ""; +$a->strings["select all"] = ""; +$a->strings["User registrations waiting for confirm"] = ""; +$a->strings["Request date"] = ""; +$a->strings["Email"] = ""; +$a->strings["Deny"] = ""; +$a->strings["Block"] = ""; +$a->strings["Unblock"] = ""; +$a->strings["Register date"] = ""; +$a->strings["Last login"] = ""; +$a->strings["Last item"] = ""; +$a->strings["Account"] = ""; +$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; +$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; +$a->strings["Plugin %s disabled."] = ""; +$a->strings["Plugin %s enabled."] = ""; +$a->strings["Disable"] = ""; +$a->strings["Enable"] = ""; +$a->strings["Toggle"] = ""; +$a->strings["Log settings updated."] = ""; +$a->strings["Clear"] = ""; +$a->strings["Debugging"] = ""; +$a->strings["Log file"] = ""; +$a->strings["Must be writable by web server. Relative to your Friendika index.php."] = ""; +$a->strings["Log level"] = ""; +$a->strings["Close"] = ""; +$a->strings["FTP Host"] = ""; +$a->strings["FTP Path"] = ""; +$a->strings["FTP User"] = ""; +$a->strings["FTP Password"] = ""; +$a->strings["Access to this profile has been restricted."] = ""; +$a->strings["Tips for New Members"] = ""; +$a->strings["Welcome "] = ""; +$a->strings["Please upload a profile photo."] = ""; +$a->strings["This site is not configured to allow communications with other networks."] = ""; +$a->strings["No compatible communication protocols or feeds were discovered."] = ""; +$a->strings["An author or name was not found."] = ""; +$a->strings["No browser URL could be matched to this address."] = ""; +$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = ""; +$a->strings["No installed applications."] = ""; +$a->strings["Hide your contact/friend list from viewers of this profile?"] = ""; +$a->strings["Edit Profile Details"] = ""; +$a->strings["View this profile"] = ""; +$a->strings["Create a new profile using these settings"] = ""; +$a->strings["Clone this profile"] = ""; +$a->strings["Delete this profile"] = ""; +$a->strings["Profile Name:"] = ""; +$a->strings["Your Full Name:"] = ""; +$a->strings["Title/Description:"] = ""; +$a->strings["Your Gender:"] = ""; +$a->strings["Birthday (%s):"] = ""; +$a->strings["Street Address:"] = ""; +$a->strings["Locality/City:"] = ""; +$a->strings["Postal/Zip Code:"] = ""; +$a->strings["Country:"] = ""; +$a->strings["Region/State:"] = ""; +$a->strings["<span class=\"heart\">♥</span> Marital Status:"] = ""; +$a->strings["Who: (if applicable)"] = ""; +$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = ""; +$a->strings["Sexual Preference:"] = ""; +$a->strings["Homepage URL:"] = ""; +$a->strings["Political Views:"] = ""; +$a->strings["Religious Views:"] = ""; +$a->strings["Public Keywords:"] = ""; +$a->strings["Private Keywords:"] = ""; +$a->strings["Example: fishing photography software"] = ""; +$a->strings["(Used for suggesting potential friends, can be seen by others)"] = ""; +$a->strings["(Used for searching profiles, never shown to others)"] = ""; +$a->strings["Tell us about yourself..."] = ""; +$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["Change profile photo"] = ""; +$a->strings["Create New Profile"] = ""; +$a->strings["visible to everybody"] = ""; +$a->strings["Edit visibility"] = ""; +$a->strings["Normal site view"] = ""; +$a->strings["View all site entries"] = ""; +$a->strings["Site Directory"] = ""; +$a->strings["Gender: "] = ""; +$a->strings["No entries (some entries may be hidden)."] = ""; +$a->strings["You have no more invitations available"] = ""; +$a->strings["You will need to supply this invitation code: \$invite_code"] = ""; +$a->strings["%1\$s is now friends with %2\$s"] = ""; +$a->strings["Site public key not available in contact record for URL %s."] = ""; +$a->strings["Updating contacts"] = ""; +$a->strings["Install Facebook connector for this account."] = ""; +$a->strings["Remove Facebook connector"] = ""; +$a->strings["Link all your Facebook friends and conversations"] = ""; +$a->strings["Do not link your Facebook profile wall posts - as these could be visible to people that would not be able to see them on Facebook."] = ""; +$a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = ""; +$a->strings["View on Friendika"] = ""; +$a->strings["Facebook post failed. Queued for retry."] = ""; +$a->strings["Generate new key"] = ""; +$a->strings["Widgets key"] = ""; +$a->strings["Widgets available"] = ""; +$a->strings["Connect on Friendika!"] = ""; +$a->strings["Impressum"] = ""; +$a->strings["Site Owner"] = ""; +$a->strings["Email Address"] = ""; +$a->strings["Postal Address"] = ""; +$a->strings["The impressum addon needs to be configured!<br />Please add at least the <tt>owner</tt> variable to your config file. For other variables please refer to the README file of the addon."] = ""; +$a->strings["Site Owners Profile"] = ""; +$a->strings["Notes"] = ""; +$a->strings["OEmbed settings updated"] = ""; +$a->strings["Use OEmbed for YouTube videos"] = ""; +$a->strings["URL to embed:"] = ""; +$a->strings["Please contact your site administrator.<br />The provided API URL is not valid."] = ""; +$a->strings["We could not contact the StatusNet API with the Path you entered."] = ""; +$a->strings["StatusNet settings updated."] = ""; +$a->strings["Globally Available StatusNet OAuthKeys"] = ""; +$a->strings["There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance (see below)."] = ""; +$a->strings["Provide your own OAuth Credentials"] = ""; +$a->strings["Cancel Connection Process"] = ""; +$a->strings["Current StatusNet API is"] = ""; +$a->strings["Cancel StatusNet Connection"] = ""; +$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = ""; +$a->strings["Allow posting to StatusNet"] = ""; +$a->strings["Send public postings to StatusNet by default"] = ""; +$a->strings["API URL"] = ""; +$a->strings["Consumer Secret"] = ""; +$a->strings["Consumer Key"] = ""; +$a->strings["Post to Wordpress"] = ""; +$a->strings["WordPress Post Settings"] = ""; +$a->strings["Enable WordPress Post Plugin"] = ""; +$a->strings["WordPress username"] = ""; +$a->strings["WordPress password"] = ""; +$a->strings["WordPress API URL"] = ""; +$a->strings["Post to WordPress by default"] = ""; +$a->strings["This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."] = ""; +$a->strings["If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."] = ""; +$a->strings["Piwik Base URL"] = ""; +$a->strings["Site ID"] = ""; +$a->strings["Show opt-out cookie link?"] = ""; +$a->strings["Twitter settings updated."] = ""; +$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = ""; +$a->strings["Allow posting to Twitter"] = ""; +$a->strings["Send public postings to Twitter by default"] = ""; +$a->strings["Consumer key"] = ""; +$a->strings["Consumer secret"] = ""; +$a->strings["j F, Y"] = ""; +$a->strings["j F"] = ""; +$a->strings["Age:"] = ""; +$a->strings["<span class=\"heart\">♥</span> Status:"] = ""; +$a->strings["Religion:"] = ""; +$a->strings["About:"] = ""; +$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["OStatus"] = ""; +$a->strings["RSS/Atom"] = ""; +$a->strings["Zot!"] = ""; +$a->strings["Starts:"] = ""; +$a->strings["Finishes:"] = ""; +$a->strings["(no subject)"] = ""; +$a->strings["bytes"] = ""; +$a->strings["Select an alternate language"] = ""; +$a->strings["Sharing notification from Diaspora network"] = ""; +$a->strings["link"] = ""; +$a->strings["[Relayed] Comment authored by %s from network %s"] = ""; +$a->strings["End this session"] = ""; +$a->strings["Sign in"] = ""; +$a->strings["Home Page"] = ""; +$a->strings["Create an account"] = ""; +$a->strings["Help and documentation"] = ""; +$a->strings["Addon applications, utilities, games"] = ""; +$a->strings["Search site content"] = ""; +$a->strings["Conversations on this site"] = ""; +$a->strings["People directory"] = ""; +$a->strings["Conversations from your friends"] = ""; +$a->strings["Your posts and conversations"] = ""; +$a->strings["Friend requests"] = ""; +$a->strings["Private mail"] = ""; +$a->strings["Manage other pages"] = ""; +$a->strings["Manage/edit profiles"] = ""; +$a->strings["Manage/edit friends and contacts"] = ""; +$a->strings["Admin"] = ""; +$a->strings["Site setup and configuration"] = ""; +$a->strings["never"] = ""; +$a->strings["From: "] = ""; +$a->strings["Image/photo"] = ""; +$a->strings["Visible to everybody"] = ""; +$a->strings["show"] = ""; +$a->strings["don't show"] = ""; +$a->strings["View status"] = ""; +$a->strings["View profile"] = ""; +$a->strings["View photos"] = ""; +$a->strings["View recent"] = ""; +$a->strings["Send PM"] = ""; +$a->strings["event"] = ""; +$a->strings["View %s's profile"] = ""; +$a->strings["%s from %s"] = ""; +$a->strings["See more posts like this"] = ""; +$a->strings["See all %d comments"] = ""; +$a->strings["Select"] = ""; +$a->strings["toggle star status"] = ""; +$a->strings["Delete Selected Items"] = ""; +$a->strings["Visible to <strong>everybody</strong>"] = ""; +$a->strings["Please enter a YouTube link:"] = ""; +$a->strings["Please enter a video(.ogg) link/URL:"] = ""; +$a->strings["Please enter an audio(.ogg) link/URL:"] = ""; +$a->strings["Where are you right now?"] = ""; +$a->strings["Enter a title for this item"] = ""; +$a->strings["Set title"] = ""; +$a->strings["Delete this item?"] = ""; +$a->strings["g A l F d"] = ""; diff --git a/view/follow.tpl b/view/follow.tpl index 49bebee8b8..2c024930ca 100644 --- a/view/follow.tpl +++ b/view/follow.tpl @@ -1,10 +1,9 @@ -<div class="side-follow-wrapper" id="side-follow-wrapper" > -<form action="follow" method="post" /> -<label id="side-follow-label" for="side-follow-url" >$label</label> -<input id="side-follow-url" type="text" name="url" size="24" title="$hint" /> -<div class="side-follow-input-end"></div> -<input id="side-follow-submit" type="submit" name="submit" value="$follow" /> -</form> +<div id="follow-sidebar" class="widget"> + <h3>Find People</h3> + <form action="follow" method="post" /> + <input id="side-follow-url" type="text" name="url" size="24" title="$hint" /><input id="side-follow-submit" type="submit" name="submit" value="$follow" /> + </form> + $findSimilar + $inviteFriends </div> -<div class="side-follow-end"></div> diff --git a/view/fr/strings.php b/view/fr/strings.php index a9735940cd..bbe728bf03 100644 --- a/view/fr/strings.php +++ b/view/fr/strings.php @@ -1,6 +1,6 @@ <?php -function string_plural_select($n){ +function string_plural_select_fr($n){ return ($n != 1); } ; diff --git a/view/group_drop.tpl b/view/group_drop.tpl index bd9852b962..cbae1610f4 100644 --- a/view/group_drop.tpl +++ b/view/group_drop.tpl @@ -1,7 +1,6 @@ -<div class="group-delete-wrapper" id="group-delete-wrapper-$id" > +<div class="group-delete-wrapper button" id="group-delete-wrapper-$id" > <a href="group/drop/$id" onclick="return confirmDelete();" - title="$delete" id="group-delete-icon-$id" class="icon drophide group-delete-icon" onmouseover="imgbright(this);" diff --git a/view/head.tpl b/view/head.tpl index 9d73269e1e..b6d78da390 100644 --- a/view/head.tpl +++ b/view/head.tpl @@ -1,8 +1,12 @@ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <base href="$baseurl/" /> <meta name="generator" content="$generator" /> -<link rel="stylesheet" type="text/css" href="$stylesheet" media="all" /> <link rel="stylesheet" href="$baseurl/library/fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" /> +<link rel="stylesheet" href="$baseurl/library/tiptip/tipTip.css" type="text/css" media="screen" /> +<link rel="stylesheet" href="$baseurl/library/jgrowl/jquery.jgrowl.css" type="text/css" media="screen" /> + +<link rel="stylesheet" type="text/css" href="$stylesheet" media="all" /> + <link rel="shortcut icon" href="$baseurl/images/friendika-32.png" /> <link rel="search" href="$baseurl/opensearch" @@ -12,11 +16,13 @@ <!--[if IE]> <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> -<script type="text/javascript" src="$baseurl/include/jquery.js" ></script> +<script type="text/javascript" src="$baseurl/js/jquery.js" ></script> <script type="text/javascript" src="$baseurl/library/fancybox/jquery.fancybox-1.3.4.pack.js"></script> +<script type="text/javascript" src="$baseurl/library/tiptip/jquery.tipTip.minified.js"></script> +<script type="text/javascript" src="$baseurl/library/jgrowl/jquery.jgrowl_minimized.js"></script> <script type="text/javascript" src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js" ></script> -<script type="text/javascript" src="$baseurl/include/acl.js" ></script> -<script type="text/javascript" src="$baseurl/include/main.js" ></script> +<script type="text/javascript" src="$baseurl/js/acl.js" ></script> +<script type="text/javascript" src="$baseurl/js/main.js" ></script> <script> function confirmDelete() { return confirm("$delitem"); } diff --git a/view/it/messages.po b/view/it/messages.po index 6b28ba782d..235cfbcf7a 100644 --- a/view/it/messages.po +++ b/view/it/messages.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: friendika\n" "Report-Msgid-Bugs-To: http://bugs.friendika.com/\n" "POT-Creation-Date: 2011-08-14 21:17-0700\n" -"PO-Revision-Date: 2011-08-17 17:49+0000\n" +"PO-Revision-Date: 2011-09-01 10:32+0000\n" "Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n" "Language-Team: Italian (http://www.transifex.net/projects/p/friendika/team/it/)\n" "MIME-Version: 1.0\n" @@ -1082,7 +1082,7 @@ msgstr "Amico" #: ../../mod/notifications.php:141 msgid "Fan/Admirer" -msgstr "Fan/Admiratore" +msgstr "Fan/Ammiratore" #: ../../mod/notifications.php:149 msgid "Friend/Connect Request" @@ -2158,7 +2158,7 @@ msgstr "Regitrati" #: ../../include/diaspora.php:446 ../../include/conversation.php:26 #: ../../include/conversation.php:35 msgid "status" -msgstr "stato" +msgstr "lo stato" #: ../../mod/like.php:127 ../../addon/facebook/facebook.php:958 #: ../../include/diaspora.php:463 ../../include/conversation.php:43 @@ -4420,7 +4420,7 @@ msgstr "Hai un nuovo seguace su " #: ../../include/conversation.php:23 msgid "event" -msgstr "evento" +msgstr "l'evento" #: ../../include/conversation.php:213 ../../include/conversation.php:488 #: ../../include/conversation.php:489 diff --git a/view/it/strings.php b/view/it/strings.php index 9e3a2262f3..3a0aed70f4 100644 --- a/view/it/strings.php +++ b/view/it/strings.php @@ -1,6 +1,6 @@ <?php -function string_plural_select($n){ +function string_plural_select_it($n){ return ($n != 1); } ; @@ -224,7 +224,7 @@ $a->strings["yes"] = "si"; $a->strings["no"] = "no"; $a->strings["Approve as: "] = "Approva come: "; $a->strings["Friend"] = "Amico"; -$a->strings["Fan/Admirer"] = "Fan/Admiratore"; +$a->strings["Fan/Admirer"] = "Fan/Ammiratore"; $a->strings["Friend/Connect Request"] = "Richiesta Amicizia/Connessione"; $a->strings["New Follower"] = "Nuovo Seguace"; $a->strings["No notifications."] = "Nessuna notifica."; @@ -459,7 +459,7 @@ $a->strings["Your Email Address: "] = "Il tuo Indirizzo Email: "; $a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@\$sitename</strong>'."] = "Scegli un soprannome. Deve cominciare con un carattere. L'indirizzo del tuo profilo sarà '<strong>soprannome@\$sitename</strong>'."; $a->strings["Choose a nickname: "] = "Scegli un soprannome: "; $a->strings["Register"] = "Regitrati"; -$a->strings["status"] = "stato"; +$a->strings["status"] = "lo stato"; $a->strings["%1\$s likes %2\$s's %3\$s"] = "A %1\$s piace %3\$s di %2\$s"; $a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "A %1\$s non piace %3\$s di %2\$s"; $a->strings["This is Friendika version"] = "Questo è Friendika versione"; @@ -985,7 +985,7 @@ $a->strings["show"] = "mostra"; $a->strings["don't show"] = "non mostrare"; $a->strings["(no subject)"] = "(nessun oggetto)"; $a->strings["You have a new follower at "] = "Hai un nuovo seguace su "; -$a->strings["event"] = "evento"; +$a->strings["event"] = "l'evento"; $a->strings["View %s's profile"] = "Vedi il profilo di %s"; $a->strings["%s from %s"] = "%s da %s"; $a->strings["View in context"] = "Vedi nel contesto"; diff --git a/view/it/wall_received_html_body_eml.tpl b/view/it/wall_received_html_body_eml.tpl new file mode 100644 index 0000000000..cdc05cfa38 --- /dev/null +++ b/view/it/wall_received_html_body_eml.tpl @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN"> +<html> +<head> + <title>Messaggio da Friendika + + + + + + + + + + + + + + + + + +
    Friendika
    $from ha scritto sulla tua bacheca.
    $from
    $body
    Vai su $siteurl per vedere o cancellare il post.
    Grazie,
    L'amministratore di $sitename
    + + \ No newline at end of file diff --git a/view/it/wall_received_text_body_eml.tpl b/view/it/wall_received_text_body_eml.tpl new file mode 100644 index 0000000000..327557ea1e --- /dev/null +++ b/view/it/wall_received_text_body_eml.tpl @@ -0,0 +1,18 @@ + +Caro $username, + + '$from' ha scritto sulla tua bacheca. + +----- +$body +----- + +Vai su $siteurl per vedere o cancellare il post: + +$display + +Grazie, + L'amministratore di $sitename + + + diff --git a/view/jot-header.tpl b/view/jot-header.tpl index 6195c5bbc6..5eb07db44c 100644 --- a/view/jot-header.tpl +++ b/view/jot-header.tpl @@ -80,7 +80,7 @@ function initEditor(cb){ } - + - + - + + + + + diff --git a/view/theme/testbubble/jot.tpl b/view/theme/testbubble/jot.tpl new file mode 100644 index 0000000000..d60e8adc22 --- /dev/null +++ b/view/theme/testbubble/jot.tpl @@ -0,0 +1,75 @@ + +
    +
    +
     
    + +
    + +
    +
    + +
    + + + + + + + + + + + {{ if $content }}{{ endif }} + + + + + + + + + + + + + + +
    + +
    +
    + $acl +
    +
    $emailcc
    +
    + $jotnets +
    +
    + +
    +
    +
    diff --git a/view/theme/testbubble/login-bg.gif b/view/theme/testbubble/login-bg.gif new file mode 100644 index 0000000000..cde836c893 Binary files /dev/null and b/view/theme/testbubble/login-bg.gif differ diff --git a/view/theme/testbubble/login.tpl b/view/theme/testbubble/login.tpl new file mode 100644 index 0000000000..c17950ecec --- /dev/null +++ b/view/theme/testbubble/login.tpl @@ -0,0 +1,25 @@ + +
    + +
    + + +
    +
    +
    + + +
    +
    +
    + + $lostlink +
    +
    + +
    +
    + diff --git a/view/theme/testbubble/lrarrow.gif b/view/theme/testbubble/lrarrow.gif new file mode 100644 index 0000000000..fa26769446 Binary files /dev/null and b/view/theme/testbubble/lrarrow.gif differ diff --git a/view/theme/testbubble/mail_head.tpl b/view/theme/testbubble/mail_head.tpl new file mode 100644 index 0000000000..2a4596cd66 --- /dev/null +++ b/view/theme/testbubble/mail_head.tpl @@ -0,0 +1,7 @@ +

    $messages

    + + diff --git a/view/theme/testbubble/match.tpl b/view/theme/testbubble/match.tpl new file mode 100644 index 0000000000..49c3c81e4b --- /dev/null +++ b/view/theme/testbubble/match.tpl @@ -0,0 +1,10 @@ +
    +
    + + $name + +
    + $name is interested in:
    $tags
    +
    +
    +
    \ No newline at end of file diff --git a/view/theme/testbubble/menu-user-pin.jpg b/view/theme/testbubble/menu-user-pin.jpg new file mode 100644 index 0000000000..26449569f4 Binary files /dev/null and b/view/theme/testbubble/menu-user-pin.jpg differ diff --git a/view/theme/testbubble/menu-user-pin.png b/view/theme/testbubble/menu-user-pin.png new file mode 100644 index 0000000000..6becfbb663 Binary files /dev/null and b/view/theme/testbubble/menu-user-pin.png differ diff --git a/view/theme/testbubble/nav.tpl b/view/theme/testbubble/nav.tpl new file mode 100644 index 0000000000..38d2dfac68 --- /dev/null +++ b/view/theme/testbubble/nav.tpl @@ -0,0 +1,55 @@ + + diff --git a/view/theme/testbubble/next.png b/view/theme/testbubble/next.png new file mode 100644 index 0000000000..353e2e72a6 Binary files /dev/null and b/view/theme/testbubble/next.png differ diff --git a/view/theme/testbubble/notifications.png b/view/theme/testbubble/notifications.png new file mode 100644 index 0000000000..803257fec0 Binary files /dev/null and b/view/theme/testbubble/notifications.png differ diff --git a/view/theme/testbubble/photo-menu.jpg b/view/theme/testbubble/photo-menu.jpg new file mode 100644 index 0000000000..b96a96fa15 Binary files /dev/null and b/view/theme/testbubble/photo-menu.jpg differ diff --git a/view/theme/testbubble/photo_album.tpl b/view/theme/testbubble/photo_album.tpl new file mode 100644 index 0000000000..a0e3f46c49 --- /dev/null +++ b/view/theme/testbubble/photo_album.tpl @@ -0,0 +1,8 @@ + +

    $desc

    +
    +
    +
    diff --git a/view/theme/testbubble/photo_top.tpl b/view/theme/testbubble/photo_top.tpl new file mode 100644 index 0000000000..d552409c4f --- /dev/null +++ b/view/theme/testbubble/photo_top.tpl @@ -0,0 +1,8 @@ + +
    +
    + $imgalt +
    + +
    +
    diff --git a/view/theme/testbubble/photo_view.tpl b/view/theme/testbubble/photo_view.tpl new file mode 100644 index 0000000000..4c754f5978 --- /dev/null +++ b/view/theme/testbubble/photo_view.tpl @@ -0,0 +1,40 @@ +
    +

    $album.1

    + + + +
    + {{ if $prevlink }}{{ endif }} + + {{ if $nextlink }}{{ endif }} +
    + +
    +
    $desc
    +{{ if $tags }} +
    $tags.0
    +
    $tags.1
    +{{ endif }} +{{ if $tags.2 }}{{ endif }} + +{{ if $edit }}$edit{{ endif }} + +{{ if $likebuttons }} +
    + $likebuttons + $like + $dislike +
    +{{ endif }} + +$comments + +$paginate + diff --git a/view/theme/testbubble/photography.png b/view/theme/testbubble/photography.png new file mode 100644 index 0000000000..7ec919f2b3 Binary files /dev/null and b/view/theme/testbubble/photography.png differ diff --git a/view/theme/testbubble/premium.png b/view/theme/testbubble/premium.png new file mode 100644 index 0000000000..1ad601c0f1 Binary files /dev/null and b/view/theme/testbubble/premium.png differ diff --git a/view/theme/testbubble/prev.png b/view/theme/testbubble/prev.png new file mode 100644 index 0000000000..0ae6022af5 Binary files /dev/null and b/view/theme/testbubble/prev.png differ diff --git a/view/theme/testbubble/profile_entry.tpl b/view/theme/testbubble/profile_entry.tpl new file mode 100644 index 0000000000..5bea298ac5 --- /dev/null +++ b/view/theme/testbubble/profile_entry.tpl @@ -0,0 +1,11 @@ + +
    +
    +$alt +
    +
    + +
    $visible
    +
    +
    + diff --git a/view/theme/testbubble/profile_tabs.tpl b/view/theme/testbubble/profile_tabs.tpl new file mode 100644 index 0000000000..ae7c65e1ca --- /dev/null +++ b/view/theme/testbubble/profile_tabs.tpl @@ -0,0 +1,9 @@ + +
    + $status + $profile + $photos + {{ if $events }}$events{{ endif }} + {{ if $notes }}$notes{{ endif }} +
    +
    diff --git a/view/theme/testbubble/profile_vcard.tpl b/view/theme/testbubble/profile_vcard.tpl new file mode 100644 index 0000000000..0ee6919bc9 --- /dev/null +++ b/view/theme/testbubble/profile_vcard.tpl @@ -0,0 +1,45 @@ +
    +
    $profile.name
    + + + {{ if $pdesc }}
    $profile.pdesc
    {{ endif }} +
    $profile.name
    + + + + {{ if $location }} +
    $location
    +
    + {{ if $profile.address }}
    $profile.address
    {{ endif }} + + $profile.locality{{ if $profile.locality }}, {{ endif }} + $profile.region + $profile.postal-code + + {{ if $profile.country-name }}$profile.country-name{{ endif }} +
    +
    + {{ endif }} + + {{ if $gender }}
    $gender
    $profile.gender
    {{ endif }} + + {{ if $profile.pubkey }}{{ endif }} + + {{ if $marital }}
    $marital
    $profile.marital
    {{ endif }} + + {{ if $homepage }}
    $homepage
    $profile.homepage
    {{ endif }} + + {{ inc diaspora_vcard.tpl }}{{ endinc }} + + +
    + +$contact_block + + diff --git a/view/theme/testbubble/search.png b/view/theme/testbubble/search.png new file mode 100644 index 0000000000..51c428594b Binary files /dev/null and b/view/theme/testbubble/search.png differ diff --git a/view/theme/testbubble/search_item.tpl b/view/theme/testbubble/search_item.tpl new file mode 100644 index 0000000000..1762983e27 --- /dev/null +++ b/view/theme/testbubble/search_item.tpl @@ -0,0 +1,48 @@ +
    +
    +
    +
    + + $name + menu +
    +
      + $item_photo_menu +
    +
    +
    +
    +
    {{ if $location }}$location {{ endif }}
    +
    +
    + {{ if $lock }}
    $lock
    + {{ else }}
    {{ endif }} +
    +
    +
    + {{ if $drop.dropping }}{{ endif }} +
    + {{ if $drop.dropping }}{{ endif }} +
    +
    +
    +
    $title
    +
    +
    $body
    +
    +
    + $name +
    $ago
    + +
    + +
    +
    + {{ if $conv }}$conv.title{{ endif }} +
    +
    +
    + +
    diff --git a/view/theme/testbubble/star.png b/view/theme/testbubble/star.png new file mode 100644 index 0000000000..a327ba14e4 Binary files /dev/null and b/view/theme/testbubble/star.png differ diff --git a/view/theme/testbubble/style.css b/view/theme/testbubble/style.css new file mode 100644 index 0000000000..a468296fb2 --- /dev/null +++ b/view/theme/testbubble/style.css @@ -0,0 +1,2960 @@ +/* + style.css + TestBubble + + Created by Anne Walk and Devlon Duthie on 2011-09-24. + Based loosely on the Dipsy theme. +*/ +/* ========== */ +/* = Colors +Red links - #b20202 +Red link hover - #db0503 +Red Gradients (buttons and other gradients) - #b20202 and #d60808 +Grey/body text - #626262 +Grey Gradients (buttons and other gradients) - #bdbdbd and #a2a2a2 +Dark Grey Gradients - #7c7d7b and #555753 + +You can switch out the colors of the header, buttons and links by using a find and replace in your text editor. + + = */ +/* ========== */ + +body { + margin: 0px; + padding: 0px; + font-family: freesans,helvetica,arial,clean,sans-serif; + font-size: 15px; + color: #626262; + width: 100%; +} + +img { border: 0 none; max-width: 550px; } + +a { color: #b20202; text-decoration: none; margin-bottom:1px;} +a:hover { color: #db0503; padding-bottom: 0px;} + +h3 > a, h4 > a { + font-size: 18px; + color: #626262; +} + +h3 { + margin: 0px; + margin-bottom: 5px; + font-size: 18px; + color: #626262; +} + +h2 { + color: #626262; +} + +p { + + max-width: 600px; +} + +label { + font-variant:small-caps; +} + +li { + list-style: none; +} + +.required { display: inline; color: #b20202; } +.fakelink { color: #b20202; cursor: pointer; } +.fakelink :hover { color: #db0503; } + +input[type=text] { + border: 2px solid #b0b0b0; + padding: 2px; + margin: 0px; + -webkit-border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; +} + +input[type=submit] { + margin: 10px 2px 5px 2px; + border: none; + font-size: 0.9em; + padding: 5px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + color:#efefef; + text-align: center; +} + +input[type=submit]:hover { + border: none; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; + color: #efefef; +} +input[type=submit]:active { + position:relative; + top:1px; +} + +.smalltext { font-size: 0.7em } + +::selection { background:#fdf795; color: #000; /* Safari and Opera */ } +::-moz-selection { background:#fdf795; color: #000; /* Firefox */ } + +section { + margin: 20px 11% 0px 11%; + font-size: 0.9em; + line-height: 1.2em; + padding-right: 230px; +} + +.lframe { + border: 1px solid #dddddd; + -moz-box-shadow: 3px 3px 6px #959494; + -webkit-box-shadow: 3px 3px 6px #959494; + box-shadow: 3px 3px 6px #959494; + background-color: #efefef; + padding: 10px; +} + +.mframe { + padding: 5px; + background-color: #efefef; + border: 2px solid #dddddd; + -moz-box-shadow: 3px 3px 4px #959494; + -webkit-box-shadow: 3px 3px 4px #959494; + box-shadow: 3px 3px 4px #959494; +} + +#wall-item-lock { + margin-left: 10px; +} + +.button { + border: none; + font-size: 1em; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + color:#efefef; + text-align: center; +} + +.button:hover { + border: none; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; + color: #efefef; +} + +.button:active { + position:relative; + top:1px; +} + +.button a { + color: #efefef; +} + +/* ========= */ +/* = Login = */ +/* ========= */ + +#login-name-wrapper { + vertical-align: middle; + margin: auto; +} + +#login-name-wrapper input { + width: 120px; + margin-left: 20px; +} + +#login-password-wrapper { + vertical-align: middle; + margin: auto; +} + +#login-extra-links { + width: 90px; + margin-top: 20px; +} + +#login-extra-links a { + display: block; + margin: 10px; + padding: 5px 0px 5px 0px; + text-align: center; + margin-right: 20px; +} + +#login-extra-filler { + display: none; +} + +/* ========= */ +/* = Panel = */ +/* ========= */ + +#panel { + position: absolute; + font-size:0.8em; + -webkit-border-radius: 5px ; + -moz-border-radius: 5px; + border-radius: 5px; + border: 1px solid #494948; + background-color: #2e3436; + opacity:50%; + color: #eeeeec; + padding:1em; + z-index: 200; + -moz-box-shadow: 7px 7px 12px #434343; + -webkit-box-shadow: 7px75px 12px #434343; + box-shadow: 7px 7px 10px #434343; +} + +/* ========= */ +/* = Pager = */ +/* ========= */ + +.pager { + padding-top: 30px; + display:block; + clear: both; + text-align: center; +} + +.pager a { + color: #626262; +} + +.pager span { padding: 4px; margin:4px; } +.pager_current { background-color: #b20202; color: #ffffff; } + +/* ======= */ +/* = Nav = */ +/* ======= */ + +nav { + height: 50px; + display: block; + position: relative; + padding: 0px 10%; + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #7c7d7b), color-stop(1, #555753) ); + background:-moz-linear-gradient( center top, #7c7d7b 5%, #555753 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7c7d7b', endColorstr='#555753'); + background-color:#7c7d7b; + border-bottom: 1px solid #494948; +} +nav a { text-decoration: none; color: #eeeeec; border:0px;} +nav a:hover { text-decoration: none; color: #eeeeec; border:0px;} + +nav #banner { + display: block; + position: absolute; + margin-left: 20px; + margin-top: 5px; + padding-bottom:5px; +} +nav #banner #logo-text a { + display: hidden; + font-size: 40px; + font-weight: bold; + margin-left: 3px; +} + +nav #user-menu { + display: block; + width: 250px; + float: right; + margin-right:15px; + margin-top: 10px; + padding: 5px; + position: relative; + vertical-align: middle; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #797979), color-stop(1, #898988) ); + background:-moz-linear-gradient( center top, #797979 5%, #898988 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#797979', endColorstr='#898988'); + background-color:#a2a2a2; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + border: 1px solid #9A9A9A; + color:#efefef; + text-decoration:none; + text-align: center; +} + +nav #user-menu-label::after { + content: url("menu-user-pin.png") no-repeat; + padding-left: 15px; +} + +nav #user-menu-label { + vertical-align: middle; + font-size: 12px; + padding: 5px; + text-align: center; +} + +ul#user-menu-popup { + display: none; + position: absolute; + background:-webk/* margin-right:10px;*/it-gradient( linear, left top, left bottom, color-stop(0.05, #797979), color-stop(1, #898988) ); + background:-moz-linear-gradient( center top, #a2a2a2 5%, #898988 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#797979', endColorstr='#898988'); + background-color:#898988; + width: 100%; + padding: 10px 0px; + margin: 0px; + margin-top: 4px; + top: 20px; + left: 0px; + border: 1px solid #9a9a9a; + border-top: none; + -webkit-border-radius: 0px 0px 5px 5px; + -moz-border-radius: 0px 0px 5px 5px; + border-radius: 0px 0px 5px 5px; + -moz-box-shadow: 5px 5px 10px #242424; + -webkit-box-shadow: 5px 5px 10px #242424; + box-shadow: 5px 5px 10px #242424; + z-index: 10000; +} + +ul#user-menu-popup li { display: block; } +ul#user-menu-popup li a { display: block; padding: 5px; } +ul#user-menu-popup li a:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) ); + background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202'); + background-color:#d60808; +} + +ul#user-menu-popup li a.nav-sep { border-top: 1px solid #989898; border-style:inset; } + +/* ============= */ +/* = Notifiers = */ +/* ============= */ + +#notifications { + height: 32px; + position: absolute; + top:10px; left: 40%; +} +.nav-ajax-update { + width: 44px; + height: 32px; + background: transparent url('notifications.png') 0px 0px no-repeat; + color: #efefef; + font-weight: bold; + font-size: 0.8em; + padding-top: 0.5em; + float: left; + padding-left: 11px; + /*display: none;*/ +} +#net-update { background-position: 0px 0px; } +#mail-update { background-position: 0px -40px; } +#notify-update { background-position: 0px -84px; } +#home-update { background-position: 0px -126px; } + +#lang-select-icon { + cursor: pointer; + position: absolute; + left: 5px; + top: 5px; +} + +#language-selector { + position: absolute; + top: 0; + left: 16px; +} + +/* =================== */ +/* = System Messages = */ +/* =================== */ + +#sysmsg_info, #sysmsg { + position:fixed; + bottom: 0px; right:20%; + -moz-box-shadow: 7px 7px 12px #434343; + -webkit-box-shadow: 7px75px 12px #434343; + box-shadow: 7px 7px 10px #434343; + padding: 10px; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; + -webkit-border-radius: 5px 5px 0px 0px; + -moz-border-radius: 5px 5px 0px 0px; + border-radius: 5px 5px 0px 0px; + border: 1px solid #da2c2c; + border-bottom:0px; + padding-bottom: 50px; + z-index: 1000; + color: #efefef; + font-style: bold; +} + +#sysmsg_info br, +#sysmsg br { + display:block; + margin:2px 0px; + border-top: 1px solid #dddddd; +} + +/* ================= */ +/* = Aside/Sidebar = */ +/* ================= */ + +aside { + position: absolute; + right: 11%; + width: 260px; + margin-top: auto; + font-size: 0.8em; + font-style: bold; +} + +aside a{ + padding-bottom: 5px; + +} + +.vcard { + font-size: 1em; + font-variant:small-caps; +} + +.vcard dd { + font-size: 12px; + font-variant: normal; + -webkit-margin-start: 10px; +} + +.vcard .fn { + font-size: 1.4em; + font-weight: bold; + border-bottom: none; + padding-top: 10px; +} + +.vcard #profile-photo-wrapper { + margin: 10px 0px; + padding: 12px; + width: 175px; + background-color: #f3f3f3; + border: 1px solid #dddddd; + -moz-box-shadow: 3px 3px 4px #959494; + -webkit-box-shadow: 3px 3px 4px #959494; + box-shadow: 3px 3px 4px #959494; +} + +aside h4 { font-size: 1.3em; } + +aside #viewcontacts { + text-align: center; + font-weight: bold; + font-variant:small-caps; + font-size: 1.1em; + padding-top: 5px; +} + +#viewcontacts a { + color: #898989; +} + +#profile-extra-links ul { margin-left: 0px; padding-left: 0px; list-style: none; } + +#dfrn-request-link { + -moz-box-shadow:inset 0px 1px 0px 0px #a65151; + -webkit-box-shadow:inset 0px 1px 0px 0px #a65151; + box-shadow:inset 0px 1px 0px 0px #a65151; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) ); + background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202'); + background-color:#d60808; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + border:1px solid #fc5656; + display:inline-block; + color:#f0e7e7; + font-family:Trebuchet MS; + font-size:19px; + font-weight:bold; + text-align: center; + padding:10px; + width: 185px; + text-decoration:none; + text-shadow:1px 1px 0px #b36f6f; +} + +#dfrn-request-link:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +#dfrn-request-link:active { + position:relative; + top:1px; +} + +#dfrn-request-intro { + width: 600px; +} + +#netsearch-box { + background-color: #f6f6f6; + padding: 10px 8px 10px 8px; +} +#netsearch-box input[type="text"] { + width: 97%; +} +#netsearch-box input[type="submit"] { + width: 48%; +} + +h3#search:before { + content: url("search.png"); + padding-right: 10px; + vertical-align: middle; +} + +#network-new-link { + background-color: #f3f3f3; + border: 1px solid #cdcdcd; + margin-bottom: 10px; + -webkit-border-radius: 5px 5px 5px 5px; + -moz-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} + +#group-sidebar { + vertical-align: middle; + margin: auto; + margin-top: 20px; + padding-bottom: 10px; +} + +#sidebar-group-list { + margin-left: 30px; + margin-right: 30px; +} + +#sidebar-group-list > a{ + padding-bottom: 10px; +} + +.widget { + margin-top: 20px; + -moz-box-shadow: 1px 2px 6px 0px #959494; + -webkit-box-shadow: 1px 2px 6px 0px #959494; + box-shadow: 1px 2px 6px 0px #959494; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f8f8f8), color-stop(1, #f6f6f6) ); + background:-moz-linear-gradient( center top, #f8f8f8 5%, #f6f6f6 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f6f6f6'); + background-color:#f8f8f8; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + border:1px solid #eee; + color:#e6e6e6; + text-shadow:-1px 0px 0px #bdbdbd; + border: 1px solid #cdcdcd; +} + +#sidebar-new-group { + padding:7px; + width: 165px; + margin: auto; + margin-left: 40px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + display:inline-block; + color:#efefef; + text-decoration:none; + text-align: center; +} + +#sidebar-new-group:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +#sidebar-new-group:active { + position:relative; + top:1px; +} + +#sidebar-new-group a { + color: #efefef; + font-size: 14px; + text-align: center; + margin: auto; +} + +ul .sidebar-group-li{ + list-style: none; + font-size: 1.2em; + padding-bottom: 5px; +} + +ul .sidebar-group-li img{ + display: none; +} + +.widget h3{ + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f0edf0), color-stop(1, #e2e2e2) ); + background:-moz-linear-gradient( center top, #f0edf0 5%, #e2e2e2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f0edf0', endColorstr='#e2e2e2'); + background-color:#f0edf0; + -moz-border-radius:5px 5px 0px 0px; + -webkit-border-radius:5px 5px 0px 0px; + border-radius:5px 5px 0px 0px; + border:1px solid #e2e2e2; + border-bottom: 1px solid #cdcdcd; + padding-top:5px; + padding-bottom: 5px; + vertical-align: baseline; + text-align: center; + text-shadow:-1px 0px 0px #bdbdbd; +} + +#group-sidebar h3:before{ + content: url("groups.png"); + padding-right: 10px; + vertical-align: middle; +} + +#saved-search-list{ + margin-top: 15px; + padding-bottom: 20px; +} + +.saved-search-li { + list-style: none; + font-size: 1.2em; +} + +.saved-search-li .icon { + margin-right: 5px; +} + +/* ================== */ +/* = Contacts Block = */ +/* ================== */ + +.contact-block-img { + width: 42px; + height: 42px; + padding-right: 2px; +} +.contact-block-div { + float: left; +} + +.contact-block-textdiv { width: 150px; height: 34px; float: left; } +#contact-block-end { clear: both; } + +/* ======= */ +/* = Jot = */ +/* ======= */ + +#profile-jot-text_tbl { margin-bottom: 10px; } +#profile-jot-text_ifr { width: 99.9%!important } +#profile-jot-submit-wrapper { +} + +#profile-jot-perms, #profile-jot-submit { + width: 60px; + font-size: 12px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + display:inline-block; + color:#efefef; + text-decoration:none; + text-align: center; +} + +#profile-jot-perms { + width: 30px; + overflow: hidden; + border: 0px; + margin-left:5px; +} + +#jot-perms-perms .icon { + height: 1px; +} + +#profile-jot-submit { + float: left; + margin-right:5px; + border: 0px; + margin-top: 0px; + margin-left: -30px; +} + +#profile-jot-perms:hover, #profile-jot-submit:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} +#profile-jot-perms:active, #profile-jot-submit:active { + position:relative; + top:1px; +} + +#character-counter { + position: absolute: right: 100px; top:100px; +} +#profile-rotator-wrapper { + float: right; +} + +.jot-tool { + float: left; + margin-right: 5px; +} +#profile-jot-tools-end, +#profile-jot-banner-end { clear: both; } + +#profile-jot-email-wrapper { + margin: 10px 10% 0px 10%; + border: 1px solid #eeeeee; + border-bottom: 0px; +} +#profile-jot-email-label { background-color: #555753; color: #ccccce; padding: 5px;} +#profile-jot-email { margin: 5px; width: 98%; } + +#profile-jot-networks { + margin: 0px 10%; + border: 1px solid #eeeeee; + border-top: 0px; + border-bottom: 0px; + padding: 5px; +} +#profile-jot-acl-wrapper { + margin: 0px 10px; + border: 1px solid #eeeeee; + border-top: 0px; + display:block!important; +} +#group_allow_wrapper, +#group_deny_wrapper, +#acl-permit-outer-wrapper { width: 47%; float: left; } + +#contact_allow_wrapper, +#contact_deny_wrapper, +#acl-deny-outer-wrapper { width: 47%; float: right; } + +#acl-permit-text {background-color: #555753; color: #ccccce; padding: 5px; float: left;} +#jot-public {background-color: #555753; color: #ff0000; padding: 5px; float: left;} +#acl-deny-text {background-color: #555753; color: #ccccce; padding: 5px; float: left;} + +#acl-permit-text-end, +#acl-deny-text-end { clear: both; } +#profile-jot-wrapper { + margin-top: 0px; + padding-top: 0px; +} + +profile-jot-banner-wrapper { + padding: 0px; + margin: 0px; +} + +.contact-h4 { + font-size: 1.2em; +} + +/* ======== */ +/* = Tabs = */ +/* ======== */ + +.tabs-wrapper { + width: 450px; + list-style: none; + padding: 10px; + margin: 0px 0px 10px 0px; + border-bottom: 1px solid #efefef; +} +.tabs-wrapper li { display: inline;} + +.tabs { + padding: 5px 10px 5px 10px; + margin-right: 5px; + font-style: bold; +} + +.tabs:hover { + padding: 5px 10px 5px 10px; +} + +/* ========= */ +/* = Posts = */ +/* ========= */ + +.wall-item-outside-wrapper { + max-width: 83%; + border-bottom: 1px solid #dedede; + margin-top: 20px; + padding-right: 10px; +} + +.wall-item-outside-wrapper-end { clear: both;} +.wall-item-content-wrapper { position: relative; max-width: 100%; } +.wall-item-photo-menu { display: none;} +.wall-item-photo-menu-button { + display:none; + text-indent: -99999px; + background: #eeeeee url("menu-user-pin.png") no-repeat 75px center; + position: absolute; + overflow: hidden; + height: 20px; width: 90px; + top: 85px; left: -1px; + -webkit-border-radius: 0px 0px 5px 5px; + -moz-border-radius: 0px 0px 5px 5px; + border-radius: 0px 0px 5px 5px; +} + +.wall-item-info { float: left; width: 140px; } +.wall-item-photo-wrapper { + width: 80px; height: 80px; + position: relative; +} + +.wall-item-tools { + filter: alpha(opacity=60); + opacity: 0.7; + -webkit-transition: all 0.25s ease-in-out; + -moz-transition: all 0.25s ease-in-out; + -o-transition: all 0.25s ease-in-out; + -ms-transition: all 0.25s ease-in-out; + transition: all 0.25s ease-in-out; + margin-left: 140px; + margin-top: 10px; + padding-bottom: 6px; +} + +.wall-item-tools:hover { + filter: alpha(opacity=100); + opacity: 1; + -webkit-transition: all 0.25s ease-in-out; + -moz-transition: all 0.25s ease-in-out; + -o-transition: all 0.25s ease-in-out; + -ms-transition: all 0.25s ease-in-out; + transition: all 0.25s ease-in-out; + margin-left: 140px; +} + +.wall-item-outside-wrapper.comment .wall-item-tools { + margin: 5px 5px 10px 70px; + float: left; +} + +.wall-item-like-buttons { + float: left; + padding-left: 10px; +} +.wall-item-like-buttons a.icon { + float: left; + margin-right: 5px; + display: inline; +} +.wall-item-links-wrapper { + width: 20px; + float: left; +} +.wall-item-delete-wrapper { + float: left; +} +.wall-item-links-wrapper a.icon { + float: left; + margin-right: 5px; + display: inline; +} +.pencil { + float: left; +} + +.star-item { + margin-left: 5px; + margin-right: 2px; + float: left; +} +.wall-item-title { font-size: 1.2em; font-weight: bold;} +.wall-item-body { + margin-left: 140px; + padding-right: 10px; + max-width: 85%; +} + +.wall-item-body p { + font-size: 0.8em; +} +.wall-item-lock-wrapper { float: right; } +.wall-item-dislike, +.wall-item-like, +.wall-item-author { + clear: left; + font-size: 0.9em; + margin: 4px 0px 0px 140px; + padding-left: 10px; + font-variant:small-caps; +} + +.wall-item-author a { + color: #898989; +} + +.wall-item-ago { display: inline; padding-left: 10px; color: #898989;} +.wall-item-wrapper-end { clear:both; } +.wall-item-location { + margin-top:5px; + width: 100px; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} + +.wall-item-location .icon { float: left; } +.wall-item-location > a { + margin-left: 25px; + font-size: 0.9em; + display: block; + font-variant:small-caps; + color: #898989; +} + +.wall-item-location .smalltext { margin-left: 25px; font-size: 0.9em; display: block;} +.wall-item-location > br { display: none; } +.wall-item-conv a{ + font-size: 0.9em; + color: #898989; + font-variant:small-caps; +} + +.wallwall .wwto { + left: -10px; + margin: 0; + position: absolute; + top: 65px; + width: 30px; + z-index: 10001; + width: 30px; + height: 30px; +} + +.wallwall .wwto img { width: 30px!important; height: 30px!important;} +.wallwall .wall-item-photo-end { clear: both; } +.wall-item-arrowphoto-wrapper { + position: absolute; + left: 20px; + top: 70px; + z-index: 10002; +} + +.wall-item-photo-menu { + min-width: 92px; + color: #2e3436; + border-top: 0px; + background: #eeeeee; + border-right: 1px solid #dddddd; + border-left: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + position: absolute; + left: -2px; top: 101px; + display: none; + z-index: 10000; + -webkit-border-radius: 0px 5px 5px 5px; + -moz-border-radius: 0px 5px 5px 5px; + border-radius: 0px 5px 5px 5px; + -moz-box-shadow: 3px 3px 4px #959494; + -webkit-box-shadow: 3px 3px 4px #959494; + box-shadow: 3px 3px 4px #959494; +} + +.wall-item-photo-menu-button { + border-right: 1px solid #dddddd; + border-left: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + -moz-box-shadow: 3px 3px 4px #959494; + -webkit-box-shadow: 3px 3px 4px #959494; + box-shadow: 3px 3px 4px #959494; +} + +.fakelink wall-item-photo-menu-button { + -webkit-border-radius: 0px 5px 5px 5px; + -moz-border-radius: 0px 5px 5px 5px; + border-radius: 0px 5px 5px 5px; + -moz-box-shadow: 3px 3px 4px #959494; + -webkit-box-shadow: 3px 3px 4px #959494; + box-shadow: 3px 3px 4px #959494; +} + +.wall-item-photo-menu ul { margin:0px; padding: 0px; list-style: none } +.wall-item-photo-menu li a { white-space: nowrap; display: block; padding: 5px 2px; color: #2e3436; } +.wall-item-photo-menu li a:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; + order-bottom: none; +} + +.icon.drop, +.icon.drophide { float: left; } +#item-delete-selected { overflow: auto; width: 100%;} + + +/* ============ */ +/* = Comments = */ +/* ============ */ + + .ccollapse-wrapper { + font-size: 0.9em; + color: #898989; + margin-left: 60px; + font-variant:small-caps; +} + +.wall-item-outside-wrapper.comment { margin-left: 70px; } +.wall-item-outside-wrapper.comment .wall-item-photo { + width: 40px!important; + height: 40px!important; +} + +.wall-item-outside-wrapper.comment .wall-item-photo-wrapper {width: 40px; height: 40px; } +.wall-item-outside-wrapper.comment .wall-item-photo-menu-button { + width: 50px; + top: 45px; + background-position: 35px center; +} +.wall-item-outside-wrapper.comment .wall-item-info { width: 60px; } +.wall-item-outside-wrapper.comment .wall-item-body { + margin-left: 70px; + max-width: 85%; + padding-right: 10px; + padding-left: 10px; +} + +.wall-item-outside-wrapper.comment .wall-item-author { margin-left: 60px;} + +.wall-item-outside-wrapper.comment .wall-item-photo-menu { + min-width: 50px; + top: 60px; +} +.icollapse-wrapper { + font-size: 0.9em; + color: #898989; + font-variant:small-caps; +} + +.comment-wwedit-wrapper, +.comment-edit-wrapper { margin: 30px 0px 0px 80px;} +.comment-wwedit-wrapper img, +.comment-edit-wrapper img { width: 20px; height: 20px; } +.comment-edit-photo-link { float: left; width: 40px;} +.comment-edit-text-empty { + width: 80%; + height: 20px; + border: 0px; + color: #babdb6; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + -ms-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; +} +.comment-edit-text-empty:hover { color: #999999;} +.comment-edit-text-full { width: 80%; height: 6em; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + -ms-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; +} +.comment-edit-submit-wrapper { width: 80%; margin-left: 40px; text-align: right; } +.comment-edit-submit { + height: 22px; + background-color: #a2a2a2; + color: #eeeeec; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border: 0px; +} + +.comment-edit-submit:hover { + background-color: #b20202; +} + +.comment-edit-submit:active { + background-color: #b20202; +} + +#item-delete-selected-desc { + color: #898989; +} + +.wall-item-body code { + font-family: Courier, monospace; + white-space: pre; + display: block; + overflow: auto; + border: 1px solid #cccccc; + border-width: 1px 1px 1px 10px; + padding-left: 10px; + margin-top: 20px; +} + +/* =========== */ +/* = Profile = */ +/* =========== */ + +.advanced-profile-content { + margin-top: 5px; + margin-bottom: 10px; + margin-left: 30px; + width: 60%; +} + +.advanced-profile-label { + margin-top: 10px; + margin-bottom: 0px; + padding-bottom: 5px; + font-size: 18px; + font-variant:small-caps; +} + +div[id$="wrapper"] { height: 100%;} +div[id$="wrapper"] br { clear: left; } +#advanced-profile-with { margin-left: 20px;} + +#profile-listing-desc { + float: left; + display: inline; + padding: 5px 10px 5px 10px; + width: 150px; + margin-bottom:20px; + margin-top: 20px; + display:inline-block; + font-style: bold; + text-align: center; +} + +#profile-listing-new-link-wrapper { + float: left; + display: inline; + width: 130px; + margin-left:5px; + margin-top: 20px; + padding: 5px 10px 5px 10px; + font-style: bold; + text-align: center; +} + +.profile-listing-name { + font-size: 1em; + font-variant: small-caps; +} +.profile-listing-name a { + color: #898989; +} + +#profile-edit-links li { + display: inline; + width: 150px; + margin-bottom:20px; + margin-top: 20px; + background-color: #a2a2a2; + color: #eeeeec; + padding: 5px 10px 5px 10px; + margin-right: 5px; + font-style: bold; + -webkit-border-radius: 5px 5px 5px 5px; + -moz-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} + +#profile-edit-links li a { + color: #efefef; +} + +#profile-edit-links li:hover { + background-color: #b20202; +} + +#profile-edit-links li:active { + background-color: #b20202; +} + +#cropimage-wrapper { float:left; } +#crop-image-form { clear:both; } + +.profile-match-name a{ + color: #999; + font-variant: small-caps; + font-size: 1em; +} + +.profile-match-name a:hover { + color: #999; +} + +.profile-match-wrapper { + width: 80%; + padding: 15px; + margin-bottom:10px; + margin-left: 20px; + background-color: #f6f6f6; + border: 1px solid #dddddd; + -moz-box-shadow: 3px 3px 4px #959494; + -webkit-box-shadow: 3px 3px 4px #959494; + box-shadow: 3px 3px 4px #959494; + clear: both; +} + +.profile-match-end { + clear: both; +} + +.profile-match-photo { + float: left; + margin-right: 10px; + margin-bottom: 5px; +} + +/* ========== */ +/* = Photos = */ +/* ========== */ + +#side-bar-photos-albums h3:before { + content: url("photography.png"); + padding-right: 10px; + vertical-align: middle; +} + +#side-bar-photos-albums li { + font-size: 14px; + font-variant: none; + text-align: left; + padding-left: 20px; + margin-bottom: 5px; +} + +#photo-top-links { + width: 130px; + margin-bottom:20px; + margin-top: 20px; + background-color: #a2a2a2; + color: #eeeeec; + padding: 5px 10px 5px 10px; + margin-right: 5px; + font-style: bold; + -webkit-border-radius: 5px 5px 5px 5px; + -moz-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +#photo-top-links a { + color: #efefef; +} + +#photo-top-links:hover { + background-color: #b20202; +} + +#photo-top-links:active { + background-color: #b20202; +} + +.photo-album-image-wrapper { + float: left; + margin: 0px 10px 10px 0px; + padding-bottom: 30px; + position:relative; +} + +.photo-top-image-wrapper { + float: left; + width: 180px; + height: 180px; + margin: 0px 10px 10px 0px; + padding-bottom: 30px; + position:relative; +} + +#photo-album-wrapper-inner { + position: relative; + float: left; + width: 180px; + height: 180px; + overflow: hidden; +} + +#photo-photo { max-width: 85%; height: auto; } +#photo-photo img { max-width: 100% } + +.photo-top-image-wrapper a:hover, +#photo-photo a:hover, +.photo-album-image-wrapper a:hover { + border-bottom: 0px; +} + +.photo-top-photo {} +.photo-album-photo {} + +.photo-top-album-name { + position: absolute; + bottom: 0px; + padding: 0px 5px; + font-weight: bold; + font-stretch:semi-expanded; + font-variant:small-caps; +} + +.photo-top-album-name a{ + text-align: center; + color: #6e6e6e; +} +.caption { + position: absolute; + bottom: 0px; + margin: 0px 5px; + text-align: center; + color: #6e6e6e; + font-size: 0.9em; + font-variant: small-caps; +} + +#photo-photo{ + position: relative; + float:left; +} + +#photo-caption { + margin-top: 10px; + color: #6E6E6E; + font-variant:small-caps; + font-size: 1.1em; +} + +#photo-photo-end { clear: both; } +#photo-prev-link, +#photo-next-link{ + position: absolute; + width:10%; + height: 100%; + background-color: rgba(255,255,255,0.2); + opacity: 0; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + background-position: center center; + background-repeat: no-repeat; +} + +#photo-prev-link { left:0px; top:0px; background-image: url('prev.png'); } +#photo-next-link { right:0px; top:0px; background-image: url('next.png');} +#photo-prev-link a, +#photo-next-link a{ + display: block; width: 100%; height: 100%; + overflow: hidden; + text-indent: -900000px; +} + +#photo-prev-link:hover, +#photo-next-link:hover { + opacity: 1; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +#photo-next-link .icon, +#photo-prev-link .icon { display: none } + +#photos-upload-spacer, +#photos-upload-new-wrapper, +#photos-upload-exist-wrapper { margin-bottom: 1em; } +#photos-upload-existing-album-text, +#photos-upload-newalbum-div { + background-color: #fff; + color: #909090; + font-size: 1.2em; + padding: 3px 0px; + padding-left: 0px; + width: 300px; +} + +#photos-upload-album-select, +#photos-upload-newalbum { width: 400px; } + +#photos-upload-perms-menu { + width: 180px; + padding: 7px; +} + +#photos-upload-perms-menu .icon { + display: none; +} + +select, input { + border: 2px solid #b0b0b0; + padding: 2px; + -webkit-border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; +} + +select[size], select[multiple], select[size][multiple] { + -webkit-appearance: listbox; +} + +select { + -webkit-appearance: menulist; + box-sizing: border-box; + -webkit-box-align: center; + cursor: default; +} + +keygen, select { + -webkit-border-radius: ; +} + +input, textarea, keygen { + font-size: 0.9em; + letter-spacing: normal; + word-spacing: normal; + line-height: 1.2em; + text-transform: none; + text-indent: 0px; + text-shadow: none; + display: inline-block; + text-align: -webkit-auto; +} + +.qq-upload-button { + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; +} + +#album-edit-link { + width: 70px; + margin-bottom:20px; + margin-top: 20px; + background-color: #a2a2a2; + color: #eeeeec; + padding: 5px 10px 5px 10px; + margin-right: 5px; + font-style: bold; + -webkit-border-radius: 5px 5px 5px 5px; + -moz-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} + +#album-edit-link a { + color: #efefef; +} + +#album-edit-link:hover { + background-color: #b20202; +} + +#photo-edit-link-wrap { + margin-bottom: 10px; +} + +#photo_edit_form { + width: 500px; + margin-top:20px; + text-align: left; +} + +input#photo_edit_form { + display: block; + width: 100%; +} + +#photo-edit-perms-menu { + float: left; + display: inline; + margin-top: 10px; + margin-right: 10px; + padding: 4px; + width: 100px; +} + +#photo-edit-perms-menu .icon { + display: none; +} + +#photo-edit-delete-button { + float: left; + display: inline; + margin-left: 190px; +} + +#photo-album-edit-wrapper { + margin-bottom: 10px; +} + +/* ============ */ +/* = Messages = */ +/* ============ */ + +#prvmail-wrapper, .mail-conv-detail, .mail-list-detail { + position: relative; + width: 500px; + padding: 50px; + margin: 20px auto; + background-color: #fff; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); +} + +#prvmail-wrapper:before, #prvmail-wrapper:after, .mail-conv-detail:before, .mail-conv-detail:after, .mail-list-detail:before, .mail-list-detail:after { + position: absolute; + width: 40%; + height: 10px; + content: ' '; + left: 12px; + bottom: 12px; + background: transparent; + -webkit-transform: skew(-5deg) rotate(-5deg); + -moz-transform: skew(-5deg) rotate(-5deg); + -ms-transform: skew(-5deg) rotate(-5deg); + -o-transform: skew(-5deg) rotate(-5deg); + transform: skew(-5deg) rotate(-5deg); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + z-index: -1; +} + +#prvmail-wrapper:after, .mail-conv-detail:after, .mail-list-detail:after { + left: auto; + right: 12px; + -webkit-transform: skew(5deg) rotate(5deg); + -moz-transform: skew(5deg) rotate(5deg); + -ms-transform: skew(5deg) rotate(5deg); + -o-transform: skew(5deg) rotate(5deg); + transform: skew(5deg) rotate(5deg); +} + +.prvmail-text { + width: 100%; +} + +#prvmail-form input + +#prvmail-subject { width: 490px;; padding-left: 10px; font-size: 1.1em; font-style: bold;} +#prvmail-subject .input{ + border: none !important ; +} + +#prvmail-subject-label { + font-variant:small-caps; +} + +#prvmail-to { + padding-left: 10px; +} +#prvmail-to-label { + font-variant:small-caps; +} + +#prvmail-message-label { + font-variant:small-caps; + font-size: 1em; +} + +#prvmail-submit-wrapper { margin-top: 10px; } +#prvmail-submit { + float: right; + margin-top: 0px; + margin-right: 0px; +} + +#prvmail-upload { +margin-left: 0px; +} + +#prvmail-submit-wrapper > div { + margin-right: 5px; + float: left; +} + +.mail-list-outside-wrapper { + margin-top: 20px; +} + +.mail-list-sender { + float: left; + padding: 5px; + background-color: #efefef; + border: 2px dotted #eeeeee; + -moz-box-shadow: 3px 3px 4px #959494; + -webkit-box-shadow: 3px 3px 4px #959494; + box-shadow: 3px 3px 4px #959494; +} + +.mail-list-detail { + margin-left: 100px; + width: 300px; + min-height: 70px; + padding: 20px; + padding-top:10px; + border: 1px solid #dddddd; + } + +.mail-list-sender-name { + font-size: 1.1em; + display: inline; + font-variant:small-caps; +} + +.mail-list-date { + float: right; + clear: block; + display: inline; + font-size: 0.9em; + padding-left: 10px; + font-stretch:ultra-condensed; + font-variant:small-caps; +} + +.mail-list-subject { + clear: block; + font-size: 1.2em; + padding-top: 20px; + padding-right: 50px; +} + +.mail-list-subject a { + color: #626262; +} + +.mail-list-delete-wrapper { float: right;} +.mail-list-outside-wrapper-end { + clear: both; +} + +.mail-conv-outside-wrapper { + margin-bottom: 10px; +} + +.mail-conv-sender {float: left; margin: 0px 5px 5px 0px; } +.mail-conv-sender-photo { + width: 64px; + height: 64px; +} + +.mail-conv-sender-name { float: left; font-variant:small-caps; font-style: bold; } +.mail-conv-date { float: right; font-variant:small-caps; } +.mail-conv-subject { clear: right; font-weight: bold; font-size: 1.2em } +.mail-conv-body { + clear: both; +} + +.mail-conv-detail { + width: 500px; + padding: 30px; + padding-bottom: 10px; + margin-left: 20px; + margin-bottom: 0px; + vertical-align: middle; + margin: auto; + border: 1px solid #dddddd; +} +.mail-conv-break { display: none; border: none;} +.mail-conv-delete-wrapper { padding-top: 10px; width: 510px; text-align: right; } + +#prvmail-subject { + font-weight: bold; + border: 1px solid #dddddd; +} + +/* ============ */ +/* = Contacts = */ +/* ============ */ + +#contacts-main { + margin-bottom: 10px; +} + +.view-contact-wrapper, +.contact-entry-wrapper { + float: left; + margin-right: 30px; + margin-bottom: 20px; + width: 88px; + height: 120px; + position: relative; +} + +.contact-entry-direction-wrapper {position: absolute; top: 20px;} +.contact-entry-edit-links { position: absolute; top: 60px; } +#contacts-show-hide-link { margin-bottom: 20px; margin-top: 10px; font-weight: bold;} + +.contact-entry-name { + width: 100px; + overflow: hidden; + font: #999; + font-size: 12px; + text-align:center; + font-variant:small-caps; + font-weight: bold; + margin-top:5px; +} + +.contact-entry-photo { + position: relative; +} + +.contact-entry-edit-links .icon { + border: 1px solid #babdb6; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background-color: #ffffff; +} + +#contact-edit-banner-name { font-size: 1.5em; margin-left: 30px; font-variant: small-caps; } +#contact-edit-photo-wrapper {position: relative; float: left; padding: 20px;} +#contact-edit-direction-icon { position: absolute; top: 60px; left:0px;} +#contact-edit-nav-wrapper { margin-left: 210px; } +#contact-edit-links { float: left; margin-top: 23px; } +#contact-edit-nav-wrapper .icon { + border: 1px solid #babdb6; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +#contact-edit-nettype { + font-size: 1em; + font-variant: small-caps; + margin-left: 30px; + margin-bottom: 0px; + padding-bottom: 0px; +} + +#contact-edit-poll-wrapper { margin-left: 50px; width: 300px;} +#contact-edit-last-update-text { margin-bottom: 15px; padding-top: 20px; padding-left: 10px; font-size: 0.9em; max-width: 300px; } +#contact-edit-last-updated { font-weight: bold; } +#contact-edit-poll-text { display: inline; font-size: 0.9em; padding-left: 10px; } +#contact-edit-end { clear: both; margin-bottom: 65px;} + +#contact-edit-update-now { + width: 80px; + padding: 5px 10px 5px 10px; + margin-left: 125px; + margin-top: 10px; + font-style: bold; +} + +#contact-edit-update-now:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +#contact-edit-update-now:active { + background-color: #b20202; + position:relative; + top:1px; +} + +#contact-edit-update-now a { + color: #efefef; +} + + +#contact-edit-profile-select-text > p { + font-size: 1em; +} + +.contact-photo-menu-button { + position: absolute; + background-image: url("photo-menu.jpg"); + background-position: top left; + background-repeat: no-repeat; + margin: 0px; padding: 0px; + width: 16px; + height: 16px; + top: 64px; left:0px; + overflow: hidden; + text-indent: 40px; + display: none; +} + +.contact-photo-menu { + width: auto; + border: 1px solid #ddd; + background: #f1f1f1; + position: absolute; + left: 0px; top: 90px; + display: none; + z-index: 10000; + -moz-box-shadow: 3px 3px 5px #888; + -webkit-box-shadow: 3px 3px 5px #888; + box-shadow: 3px 3px 5px #888; +} + +.contact-photo-menu ul { margin:0px; padding: 0px; list-style: none } +.contact-photo-menu li a { display: block; padding: 3px; color: #626262; font-size: 1em; } +.contact-photo-menu li a:hover { + color: #FFFFFF; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; + text-decoration: none; +} + +.view-contact-name { + font-variant: small-caps; +} + +#div.side-link { + background-color: #efefef; + padding: 10px; + margin-top:20px; +} + +#follow-sidebar { + margin-bottom: 20px; +} + +#follow-sidebar h3:before { + content: url("user.png"); + padding-right: 10px; + vertical-align: middle; +} + +#follow-sidebar input[type="text"] { + margin-left: 10px; + margin-bottom: 10px; +} + +#side-follow-submit { + width: 70px; +} + +#side-match-link { + width: 180px; + padding: 10px; + margin: auto; + margin-bottom: 20px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + padding: 5px 10px 5px 10px; + color: #efefef; + font-size: 1.2em; + text-align: center; +} + +#side-match-link:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +#side-match-link:active { + background-color: #b20202; + position:relative; + top:1px; +} + +#side-match-link a { + color: #efefef; +} + +#side-invite-link { + width: 180px; + padding: 10px; + margin: auto; + margin-bottom: 20px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + padding: 5px 10px 5px 10px; + color: #efefef; + font-size: 1.2em; + text-align: center; +} + +#side-invite-link:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +#side-invite-link:active { + background-color: #b20202; + position:relative; + top:1px; +} + +#side-invite-link a { + color: #efefef; +} + +#invite-message, #invite-recipients, #invite-recipient-text { + padding: 10px; +} + +#side-follow-wrapper { + font-size: 1em; + font-weight: bold; + font-stretch:semi-expanded; + background-color: #f3f3f3; + border: 1px solid #cdcdcd; + padding: 10px; + margin-top: 20px; + -webkit-border-radius: 5px 5px 5px 5px; + -moz-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} + +#side-follow-wrapper label{ + font-size: 1.1em; + font-variant: normal; +} + +#contact-view-recent { + float: left; + width: 150px; + padding: 5px; + margin-bottom: 20px; +} + +#contact-suggest { + float: left; + margin-left: 10px; + width: 120px; + padding: 10px; + margin-bottom: 20px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + padding: 5px 10px 5px 10px; + color: #efefef; + font-size: 1.2em; + text-align: center; +} + +#contact-suggest:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +#contact-suggest:active { + background-color: #b20202; + position:relative; + top:1px; +} + +#contact-suggest a { + color: #efefef; +} + +#contact-edit-info-wrapper { + clear: both; +} + +/* ===================================== */ +/* = Register, Settings, Profile Forms = */ +/* ===================================== */ + +#id_openid_url, +.openid { + background: url(login-bg.gif) no-repeat; + background-position: 0 50%; + padding-left: 18px; + width: 385px; +} + +#profile-tabs-wrapper { + padding-top: 10px; +} + +#profile-tab-status-link { + border: 0px; + padding: 5px 10px 5px 10px; + font-style: bold; +} + +#uexport-link a { + color: #efefef; +} + +#profile-tab-profile-link { + border: 0px; + padding: 5px 10px 5px 10px; +} + +#uexport-link { + width: 140px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #7c7d7b), color-stop(1, #555753) ); + background:-moz-linear-gradient( center top, #7c7d7b 5%, #555753 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7c7d7b', endColorstr='#555753'); + background-color:#7c7d7b; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + padding: 5px 10px 5px 10px; + margin-bottom: 10px; +} + +#uexport-link:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #555753), color-stop(1, #7c7d7b) ); + background:-moz-linear-gradient( center top, #555753 5%, #7c7d7b 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555753', endColorstr='#7c7d7b'); + background-color:#555753; +} + +#uexport-link:active { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; + position:relative; + top:1px; +} + +#settings-default-perms { + width: 160px; + text-align: center; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #7c7d7b), color-stop(1, #555753) ); + background:-moz-linear-gradient( center top, #7c7d7b 5%, #555753 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7c7d7b', endColorstr='#555753'); + background-color:#7c7d7b; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + padding: 5px 10px 5px 10px; + margin-bottom: 10px; +} + +#settings-default-perms .fakelink { + color: #efefef; +} + +#settings-default-perms:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #555753), color-stop(1, #7c7d7b) ); + background:-moz-linear-gradient( center top, #555753 5%, #7c7d7b 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555753', endColorstr='#7c7d7b'); + background-color:#555753; +} + +#settings-default-perms:active { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; + position:relative; + top:1px; +} + +#settings-nickname-desc { + width: 80%; + background-color: #efefef; + margin-bottom: 10px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + padding: 5px; +} + +#register-form div, +#profile-edit-form div { + clear: both; +} + +#register-form label, +#profile-edit-form label { + width: 300px; float: left; +} + +#register-form span, +#profile-edit-form span { + color: #555753; + display:block; + margin-bottom: 20px; +} + +.settings-submit-wrapper, +.profile-edit-submit-wrapper { margin: 30px 0px;} +.profile-listing { float: left; clear: both; margin: 20px 20px 0px 0px} + +#profile-edit-links ul { margin: 20px 0px; padding: 0px; list-style: none; } + + +#register-sitename { display: inline; font-weight: bold;} + +/* ===================== */ +/* = Contacts Selector = */ +/* ===================== */ + +#group-edit-wrapper { + margin-bottom: 10px; +} + +#group-edit-name-wrapper { + margin-bottom: 0px; + display: inline; +} +#group-edit-submit-wrapper { + margin-bottom: 10px; + margin-right: 400px; + float: right; + display: inline; +} + +.group-delete-wrapper { + width: 90px; + display: inline; + padding: 5px; + margin-bottom: 10px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px;*/ +} + +.group-delete-wrapper:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +.group-delete-wrapper:active { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +.group-delete-wrapper a { + color: #efefef; + font-size: 0.9em; +} + +#group-edit-desc { margin: 10px 0xp; } +#group-new-text {font-size: 1.1em;} +#group-members, +#prof-members { + width: 83%; + height: 200px; + overflow: auto; + border: none; + background-color: #f0edf0; + color: #555753; + border: 1px solid #ccc; + margin-bottom: 10px; + padding: 10px; +} + +#group-all-contacts, +#prof-all-contacts { + width: 83%; + height: 200px; + overflow: auto; + border: 1px solid #ccc; + background-color: #f0edf0; + padding: 10px; +} + +#group-members h3, +#group-all-contacts h3, +#prof-members h3, +#prof-all-contacts h3{ + color: #555753; + margin: 0px; + padding: 5px; +} + +#group-separator, +#prof-separator { display: none;} + +/* ========== */ +/* = Events = */ +/* ========== */ + +.clear { clear: both; } +.eventcal { + float: left; + font-size: 20px; + padding: 20px; +} + +.vevent { + position: relative; + width: 400px; + padding: 20px; + padding-top: 10px; + margin: 0 0px; + background-color: #fff; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); +} + +.vevent:before, .vevent:after { + position: absolute; + width: 40%; + height: 10px; + content: ' '; + left: 12px; + bottom: 12px; + background: transparent; + -webkit-transform: skew(-5deg) rotate(-5deg); + -moz-transform: skew(-5deg) rotate(-5deg); + -ms-transform: skew(-5deg) rotate(-5deg); + -o-transform: skew(-5deg) rotate(-5deg); + transform: skew(-5deg) rotate(-5deg); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + z-index: -1; +} + +.vevent:after { + left: auto; + right: 12px; + -webkit-transform: skew(5deg) rotate(5deg); + -moz-transform: skew(5deg) rotate(5deg); + -ms-transform: skew(5deg) rotate(5deg); + -o-transform: skew(5deg) rotate(5deg); + transform: skew(5deg) rotate(5deg); +} + +.vevent .event-description { + margin-left: 10px; + margin-right: 10px; + text-align:center; + font-size: 1.2em; + font-weight:bolder; +} + + .vevent .event-location{ + margin-left: 10px; + margin-right: 10px; + font-size: 1em; + font-style: oblique; + text-align: center; + +} + +.vevent .event-start, .vevent .event-end { + margin-left: 20px; + margin-right: 20px; + margin-bottom: 2px; + margin-top: 2px; + font-size: 0.9em; + font-variant: small-caps; + text-align: left; +} + +#new-event-link{ + width: 130px; + padding: 7px; + margin-bottom: 10px; + margin-left: 170px; ; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + color: #efefef; +} + +#new-event-link:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +#new-event-link:active { + background-color: #b20202; + position:relative; + top:1px; +} + +#new-event-link a { + color: #efefef; + text-align: center; +} + +.edit-event-link, .plink-event-link { + float: left; + margin-top: 4px; + margin-right: 4px; + margin-bottom: 15px; +} + +.event-description:before { + content: url('calendar.png'); + margin-right: 15px; + vertical-align: middle; +} + +.event-start, .event-end { + margin-left: 10px; + width: 330px; +} + +.event-start .dtstart, .event-end .dtend { + float: right; +} + +.event-list-date { + color: #626262; + margin-bottom: 10px; + font-variant:small-caps; + font-stretch:condensed; +} + +.prevcal, .nextcal { + float: left; + margin-left: 32px; + margin-right: 32px; + margin-top: 64px; +} + +.event-calendar-end { + clear: both; +} + +.calendar { + width: 300px; + font-family: Helvetica, Arial, sans-serif; + background-color: #f1f1f1; + border: 1px solid #dedede; + margin-bottom: 10px; + -moz-box-shadow: 5px 5px 8px #959494; + -webkit-box-shadow: 5px 5px 8px #959494; + box-shadow: 5px 5px 8px #959494; +} + +.calendar caption{ + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) ); + background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202'); + background-color: #b20202; + padding: 10px 0px 10px 0px; + width: 300px; + color: #ffffff; + font-weight: bold; + text-align:center; + font-variant:small-caps; + -moz-box-shadow: 5px 2px 8px #959494; + -webkit-box-shadow: 5px 2px 8px #959494; + box-shadow: 5px 2px 8px #959494; +} + +tr { + border: 1px solid #eeeeee; +} + +.calendar td { + font-size: 14px; + text-align: center; + padding: 3px 0px; +} + +.calendar td > a { + background-color: #cdcdcd; + padding: 2px; + color: #000; +} + +.calendar th { + font-size: 16px; +} + +.today { + font-weight: bold; + text-align: center; + background-color: #b20202; + color: #fff; +} + +#event-start-text, +#event-finish-text { + margin-top: 10px; + margin-bottom: 5px; +} + +#event-nofinish-checkbox, +#event-nofinish-text, +#event-adjust-checkbox, +#event-adjust-text, +#event-share-checkbox { + float: left; +} + +#event-datetime-break { + margin-bottom: 10px; +} + +#event-nofinish-break, +#event-adjust-break, +#event-share-break { + clear: both; +} + +#event-desc-text, +#event-location-text { + margin-top: 10px; + margin-bottom: 5px; +} + +#event-submit { + margin-top: 10px; +} + +/* ============= */ +/* = Directory = */ +/* ============= */ + +.directory-item { + float: left; + margin: 50px 50px 0px 0px; +} + +.directory-details { + font-size: 0.9em; + font-variant: small-caps; + width: 160px; +} + +.directory-name { + font-size: 1em; + font-variant: small-caps; + width: 150px; +} + +/* ========= */ +/* = Admin = */ +/* ========= */ + +#adminpage { + width: 80%; +} + +#pending-update { + float:right; + color: #ffffff; + font-weight: bold; + background-color: #FF0000; + padding: 0em 0.3em; +} + +.admin.linklist { + border: 0px; padding: 0px; +} + +.admin.link { + list-style-position: inside; + font-size: 1em; + padding: 5px; + width: 100px; + margin: 5px; +} + +#adminpage dl { + clear: left; + margin-bottom: 2px; + padding-bottom: 2px; + border-bottom: 1px solid black; +} + +#adminpage dt { + width: 200px; + float: left; + font-weight: bold; +} + +#adminpage dd { + margin-left: 200px; +} +#adminpage h3 { + border-bottom: 1px solid #898989; + margin-bottom: 5px; + margin-top: 10px; +} + +#adminpage .submit { + clear:left; +} + +#adminpage #pluginslist { + margin: 0px; padding: 0px; +} + +#adminpage .plugin { + list-style: none; + display: block; + border: 1px solid #888888; + padding: 1em; + margin-bottom: 5px; + clear: left; +} + +#adminpage .toggleplugin { + float:left; + margin-right: 1em; +} + +#adminpage table {width:100%; border-bottom: 1p solid #000000; margin: 5px 0px;} +#adminpage table th { text-align: left;} +#adminpage td .icon { float: left;} +#adminpage table#users img { width: 16px; height: 16px; } +#adminpage table tr:hover { background-color: #eeeeee; } +#adminpage .selectall { text-align: right; } + +/* =============== */ +/* = Form Fields = */ +/* =============== */ + +.field { + margin-bottom: 5px; + padding-bottom: 10px; + overflow: auto; + width: 90%; +} + +.field label { + float: left; + width: 200px; +} + +.field input, +.field textarea { + width: 400px; +} +.field textarea { height: 100px; } +.field_help { + display: block; + margin-left: 100px; + color: #666666; +} + +.field .onoff { + float: left; + width: 80px; +} +.field .onoff a { + display: block; + border:1px solid #c1c1c1; + background-image:url("../../../images/onoff.jpg"); + background-repeat: no-repeat; + padding: 4px 2px 2px 2px; + height: 16px; + text-decoration: none; +} +.field .onoff .off { + border-color:#c1c1c1; + padding-left: 40px; + background-position: left center; + background-color: #cccccc; + color: #666666; + text-align: right; +} + +.field .onoff .on { + border-color:#c1c1c1; + padding-right: 40px; + background-position: right center; + background-color: #b20202; + color: #FFFFFF; + text-align: left; +} + +.hidden { display: none!important; } + +.field.radio .field_help { margin-left: 0px; } + +/* ========= */ +/* = Icons = */ +/* ========= */ + +.icon { + display: block; width: 20px; height: 20px; + background-image: url('icons.png'); +} +.starred { + background-image: url("star.png"); + repeat: no-repeat; +} +.unstarred { + background-image: url("premium.png"); + repeat: no-repeat; +} + + +.border { + border: 1px solid #c1c1c1; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.article { background-position: -50px 0px;} +.audio { background-position: -70px 0px;} +.block { background-position: -90px 0px;} +.drop { background-position: -110px 0px;} +.drophide { background-position: -130px 0px;} +.edit { background-position: -150px 0px;} +.camera { background-position: -170px 0px;} +.dislike { background-position: -190px 0px;} +.like { background-position: -210px 0px;} +.link { background-position: -230px 0px;} + +.globe { background-position: -50px -20px;} +.noglobe { background-position: -70px -20px;} +.no { background-position: -90px -20px;} +.pause { background-position: -110px -20px;} +.play { background-position: -130px -20px;} +.pencil { background-position: -150px -20px;} +.small-pencil { background-position: -170px -20px;} +.recycle { background-position: -190px -20px;} +.remote-link { background-position: -210px -20px;} +.share { background-position: -230px -20px;} + +.tools { background-position: -50px -40px;} +.lock { background-position: -70px -40px;} + +.unlock { + background-position: -90px -40px; + background-image: none; + width: 70px; + height: 20px; +} + +.sharePerms { + background-image: url(icons.png); + width: 20px; + height: 20px; + margin: 2px 0px 2px 3px; + display: block; +} + +.video { background-position: -110px -40px;} +.youtube { background-position: -130px -40px;} + +.attach { background-position: -190px -40px;} +.language { background-position: -210px -40px;} + + +.on { background-position: -50px -60px;} +.off { background-position: -70px -60px;} +.prev { background-position: -90px -60px;} +.next { background-position: -110px -60px;} + +.icon.dim { opacity: 0.3;filter:alpha(opacity=30); } + +.attachtype { + display: block; width: 20px; height: 23px; + background-image: url('../../../images/content-types.png'); +} + +.type-video { background-position: 0px 0px; } +.type-image { background-position: -20px 0px; } +.type-audio { background-position: -40px 0px; } +.type-text { background-position: -60px 0px; } +.type-unkn { background-position: -80px 0px; } + +/* ========== */ +/* = Footer = */ +/* ========== */ + +.cc-license { margin-top: 100px; font-size: 0.7em; } +footer { display: block; margin: 50px 20%; clear: both; } + +#profile-jot-text { + height: 20px; + color:#cccccc; + border: 1px solid #cccccc; +} + +/* ======= */ +/* = ACL = */ +/* ======= */ + +#photo-edit-perms-select, +#photos-upload-permissions-wrapper, +#profile-jot-acl-wrapper{ + display:block!important; +} + +#acl-wrapper { + width: 690px; + float:left; +} +#acl-search { + float:right; + background: #ffffff url("../../../images/search_18.png") no-repeat right center; + padding-right:20px; +} +#acl-showall { + float: left; + display: block; + font-size: 1em; + font-style: bold; + text-align: center; + padding: 3px; + margin-bottom: 5px; + background-color: #cccccc; + background-position: 7px 7px; + background-repeat: no-repeat; + padding: 5px; + -webkit-border-radius: 5px ; + -moz-border-radius: 5px; + border-radius: 5px; + color: #999999; +} +#acl-showall.selected { + color: #fff; + background-color: #b20202; +} + +#acl-list { + height: 210px; + border: 1px solid #cccccc; + background-color: #efefef; + clear: both; + margin-top: 30px; + overflow: auto; +} + +#acl-list-content { + margin-left: 20px; +} + +.acl-list-item { + display: block; + width: 150px; + height: 40px; + border: 1px solid #cccccc; + background-color: #fff; + margin: 5px; + float: left; + -moz-box-shadow: 2px 2px 3px #c1c1c1; + -webkit-box-shadow: 2px 2px 3px #c1c1c1; + box-shadow: 2px 2px 3px #c1c1c1; +} +.acl-list-item img{ + width:30px; + height: 30px; + float: left; + margin: 5px; +} + +.acl-list-item p { + color: #999; + height: 12px; + font-size: 0.7em; + margin: 0px; + padding: 2px 0px 1px; + overflow: hidden; +} + +.acl-list-item a { + font-size: 10px; + display: block; + float: left; + color: #efefef; + background-color: #898989; + background-position: 3px 3px; + background-repeat: no-repeat; + margin-right: 5px; + -webkit-border-radius: 2px ; + -moz-border-radius: 2px; + border-radius: 2px; + padding: 3px; +} + +#acl-wrapper a:hover { + text-decoration: none; + background-color:#b20202; +} + +.acl-button-show.selected { + color: #efefef; + background-color: #b20202; +} + +.acl-button-hide.selected { + color: #efefef; + background-color: #a2a2a2; +} + +.acl-list-item.groupshow { border-color: #b20202; } +.acl-list-item.grouphide { border-color: #a2a2a2; } + +/* ========================= */ +/* = Global Directory Link = */ +/* ========================= */ + +#global-directory-link { + width: 130px; + padding: 7px; + margin-bottom: 10px; + margin-left: 0px; + -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; + box-shadow:inset 0px 1px 0px 0px #cfcfcf; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); + background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); + background-color:#bdbdbd; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + color: #efefef; + text-align: center; +} + +#global-directory-link:hover { + color: #efefef; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; +} + +#global-directory-link:active { + background-color: #b20202; + position:relative; + top:1px; +} + +#global-directory-link a { + color: #efefef; +} + +#global-directory-link { + -webkit-padding-start: 0px; +} + +a.active { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); + background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); + background-color:#b20202; + color:#efefef; + padding: 5px 10px 5px 10px; + margin-right: 5px; +} \ No newline at end of file diff --git a/view/theme/testbubble/user.png b/view/theme/testbubble/user.png new file mode 100644 index 0000000000..df899e7e08 Binary files /dev/null and b/view/theme/testbubble/user.png differ diff --git a/view/theme/testbubble/wall_item.tpl b/view/theme/testbubble/wall_item.tpl new file mode 100644 index 0000000000..6efd331c9e --- /dev/null +++ b/view/theme/testbubble/wall_item.tpl @@ -0,0 +1,75 @@ + +
    +
    +
    +
    + + $name + + menu +
    +
      + $item_photo_menu +
    +
    +
    +
    +
    {{ if $location }}$location {{ endif }}
    +
    +
    + {{ if $lock }}
    $lock
    + {{ else }}
    {{ endif }} +
    +
    +
    $title
    +
    +
    $body
    +
    + +
    + {{ if $vote }} + + {{ endif }} + {{ if $plink }} + + {{ endif }} + {{ if $edpost }} + + {{ endif }} + + {{ if $star }} + + {{ endif }} + +
    + {{ if $drop.dropping }}{{ endif }} +
    + {{ if $drop.dropping }}{{ endif }} +
    + + +
    + +
    + $name +
    $ago
    + +
    +
    +
    + +
    $dislike
    +
    + $comment +
    +
    + +
    + diff --git a/view/theme/testbubble/wallwall_item.tpl b/view/theme/testbubble/wallwall_item.tpl new file mode 100644 index 0000000000..7cefc85ad7 --- /dev/null +++ b/view/theme/testbubble/wallwall_item.tpl @@ -0,0 +1,74 @@ +
    +
    +
    +
    + + $owner_name +
    +
    $wall
    +
    + + $name + menu +
    +
      + $item_photo_menu +
    +
    + +
    +
    +
    {{ if $location }}$location {{ endif }}
    +
    +
    + {{ if $lock }}
    $lock
    + {{ else }}
    {{ endif }} +
    +
    + {{ if $vote }} + + {{ endif }} + {{ if $plink }} + + {{ endif }} + {{ if $edpost }} + + {{ endif }} + + {{ if $star }} + + {{ endif }} + +
    + {{ if $drop.dropping }}{{ endif }} +
    + {{ if $drop.dropping }}{{ endif }} +
    +
    +
    +
    $title
    +
    +
    $body
    +
    +
    + $name +
    $ago
    +
    +
    +
    + +
    $dislike
    +
    + $comment +
    +
    + +
    + diff --git a/view/theme/three-d/theme.php b/view/theme/three-d/theme.php new file mode 100644 index 0000000000..47b43cf131 --- /dev/null +++ b/view/theme/three-d/theme.php @@ -0,0 +1,4 @@ +theme_info = array( + 'extends' => 'loozah', +); diff --git a/view/viewcontact_template.tpl b/view/viewcontact_template.tpl index 3436a5c453..83693bfb1f 100644 --- a/view/viewcontact_template.tpl +++ b/view/viewcontact_template.tpl @@ -1,7 +1,7 @@
    -
    +
    $name
    diff --git a/view/wall_fake_drop.tpl b/view/wall_fake_drop.tpl deleted file mode 100644 index db34441d55..0000000000 --- a/view/wall_fake_drop.tpl +++ /dev/null @@ -1,2 +0,0 @@ -
     
    -
    diff --git a/view/wall_item.tpl b/view/wall_item.tpl index 1c5e82b17b..cec5e54048 100644 --- a/view/wall_item.tpl +++ b/view/wall_item.tpl @@ -1,50 +1,71 @@ -
    -
    -
    -
    - - $name - - menu -
    -
      - $item_photo_menu -
    -
    -
    -
    -
    - $lock -
    $location
    -
    -
    -
    - $name -
    $ago
    - -
    -
    -
    $title
    -
    -
    $body
    -
    -
    - $vote - $plink - $edpost - $star - $drop -
    -
    -
    - -
    $dislike
    -
    - $comment -
    - -
    +{{ if $indent }}{{ else }} +
    + $star.starred + {{ if $lock }}$lock{{ endif }} +
    +{{ endif }} +
    +
    +
    +
    + + $name + + menu + + +
    +
    $location
    +
    +
    + {{ if $title }}

    $title

    {{ endif }} + $body +
    +
    +
    + +
    +
    + $name $ago +
    + +
    + {{ if $star }} + $star.do + $star.undo + {{ endif }} + + {{ if $vote }} + $vote.like.1 + $vote.dislike.1 + {{ endif }} + + {{ if $vote.share }} + $vote.share.1 + {{ endif }} +
    + +
    + {{ if $drop.dropping }} + + $drop.delete + {{ endif }} + {{ if $edpost }} + + {{ endif }} +
    + +
    +
    +
    +
    + $comment +
    diff --git a/view/wall_item_drop.tpl b/view/wall_item_drop.tpl deleted file mode 100644 index 30fa6c3356..0000000000 --- a/view/wall_item_drop.tpl +++ /dev/null @@ -1,6 +0,0 @@ -
    - - -
    - -
    diff --git a/view/wallwall_item.tpl b/view/wallwall_item.tpl index fd686f0f4b..2429bc20f7 100644 --- a/view/wallwall_item.tpl +++ b/view/wallwall_item.tpl @@ -1,55 +1,78 @@ -
    -
    -
    -
    - - $owner_name -
    -
    $wall
    -
    - - $name - menu -
    -
      - $item_photo_menu -
    -
    - -
    -
    -
    - $lock -
    $location
    -
    -
    -
    - $name $to $owner_name $vwall
    -
    $ago
    -
    -
    -
    $title
    -
    -
    $body
    -
    -
    - $vote - $plink - $edpost - $star - $drop -
    -
    -
    - -
    $dislike
    -
    -
    - $comment -
    - -
    +{{ if $indent }}{{ else }} +
    + $star.starred + {{ if $lock }}$lock{{ endif }} +
    +{{ endif }} +
    +
    +
    +
    + + $owner_name + +
    +
    + + $name + + menu + + +
    +
    $location
    +
    +
    + {{ if $title }}

    $title

    {{ endif }} + $body +
    +
    +
    + +
    +
    + $name $ago +
    $to $owner_name $vwall + +
    + +
    + {{ if $star }} + $star.do + $star.undo + {{ endif }} + + {{ if $vote }} + $vote.like.1 + $vote.dislike.1 + {{ endif }} + + {{ if $vote.share }} + $vote.share.1 + {{ endif }} +
    + +
    + {{ if $drop.dropping }} + + $drop.delete + {{ endif }} + {{ if $edpost }} + + {{ endif }} +
    + +
    +
    +
    +
    + $comment +
    diff --git a/view/xrd_host.tpl b/view/xrd_host.tpl index f1d9707d57..dbb20256f9 100644 --- a/view/xrd_host.tpl +++ b/view/xrd_host.tpl @@ -2,11 +2,28 @@ - $zroot + $zhost + href="$domain/oexchange/xrd" /> + + + + + + + + $bigkey + + diff --git a/view/xrd_person.tpl b/view/xrd_person.tpl index fd11ad600d..2b5af3d0d2 100644 --- a/view/xrd_person.tpl +++ b/view/xrd_person.tpl @@ -5,6 +5,17 @@ $accturi $profile_url + + + + + + + $bigkey + diff --git a/zot.txt b/zot.txt new file mode 100644 index 0000000000..b160788e7a --- /dev/null +++ b/zot.txt @@ -0,0 +1,364 @@ +This is the Zot! social communications protocol. + +Specification revision: 1 +2 October 2011 + +Mike Macgirvin +This specification is public domain. + +Zot is a framework for secure delivery of messages on the web based on +webfinger and encapsulating salmon. + +First read the salmon and salmon magic envelope specifications. Zot also +makes use of webfinger and ActivityStreams and several concepts from RFC822 +(email). Zot encompasses the zot delivery framework and the zid remote +access protocol. + +The current specification revision (1) is frozen until a reference +implementation is available. After that, any protocol changes will require a +change to the revision number. + +**************** +* Zot delivery * +**************** + +Format of a zot wrapper. This completely encapsulates a salmon magic envelope +and provides privacy protection, while defining a delivery envelope - a +concept familiar to email systems. All addresses in zot are webfinger +resolvable addresses containing zot endpoints and salmon public keys (zot +is a superset of salmon). + + + + + ((key)) + ((iv)) + ((env_key)) + ((env_iv)) + ((envelope)) + ((sender signature)) + AES-256-CBC + ((salmon)) + + + +zot:key +******* + +A suitable randomly generated encyption key of length 32 octets for encrypting +the salmon packet. This is then encrypted with the sender's private key and +base64url encoded. + +zot:iv +****** + +A suitable randomly generated initialisation vector of length 16 octets for +encrypting the salmon packet. This is then encrypted with the sender's private +key and base64url encoded. + +zot:env_key +*********** + +A suitable randomly generated encyption key of length 32 octets for encrypting +the envelope. This is then encrypted with the recipient's public key and +base64url encoded. For bulk deliveries, it is encrypted with the site bulk +delivery public key. + + +zot:env_iv +********** + +A suitable randomly generated initialisation vector of length 16 octets for +encrypting the envelope. This is then encrypted with the recipient's public +key and base64url encoded. For bulk deliveries, it is encrypted with the site +bulk delivery public key. + + +zot:env +******* + +This consists of RFC822-style header fields representing the sender and +recipient(s). Line lengths have no defined limit and RFC822 continuation +lines are not supported. If an inbound server is not able to process an +envelope or post due to size constraints, it SHOULD return a +"413 Entity too large" HTTP response. + +Example: + +Z-From: zot:bob@example.com +Z-Sender: zot:bob@example.com +Z-To: zot:alice@example.com + +Both "Z-From:" and "Z-Sender:" MUST be provided, and represent a single +webfinger address of the author and sender respectively. The webfinger +address for the From address MUST contain a discoverable salmon public key +which is needed to verify the enclosed salmon data. Sender is used to indicate +the webfinger identity responsible for transmitting this message. From +indicates the message author. + +In web-based social systems, a reply to a message SHOULD be conveyed to all of +the original message participants. Only the author of the original message +may know all the recipients (such as those contained in Bcc: elements). The +author of a message always provides 'From'. They MUST duplicate this +information as 'Sender' when posting a followup message. + +A reply to a given message MUST be sent to the From address of the original +post, and MAY be sent to any additional addresses in the recipient list. The +original post author MUST send the reply to all known recipients of the +original message, with their webfinger identity as Sender, and the +comment/reply author as From. + +Receiving agents SHOULD validate the From identity as the signer of the salmon +magic envelope, and MAY reject it. They SHOULD also verify the Sender signature +of the zot packet if it is different than the salmon signature. They MAY +reject the message if the Sender is not allowed in their "friend list", or if +they do not have a suitable relationship with the Sender, or if either +signature fails to validate. Rejected messages for one of these reasons SHOULD +be indicated with a "400 Bad Request" HTTP response. + + +Z-To: * + +indicates a public message with no specifically enumerated recipients. + +The fields Z-To: and/or Z-Bcc: MAY be present. At least one recipient field +MUST be present. + +Z-To: zot:bob@example.com, zot:alice@example.com, mailto:dave@example.com +Z-Bcc: zot:https://example.com/profile/richard + +are valid entries. Adresses are comma separated and individual entries MUST NOT +contain commas. There MAY be any number of ASCII space characters between +entries for legibility. Header lines are terminated with a linefeed character +(ASCII 0x0A). + +This specification provides the following foreign protocol address prefixes +for use in Z-To: or Z-Bcc: elements: + +zot: - normal zot delivery using webfinger or LRDD resolvable address +ostatus: - normal OStatus delivery using webfinger or LRDD resovable address +diaspora: - Diaspora network delivery using webfinger address +facebook: - Facebook profile page URL +twitter: - Twitter personal page URL without AJAX '#!' fragment +mailto: - email RFC822/ESMTP address + +Examples: + +twitter:http://twitter.com/bjensen +facebook:http://facebook.com/profile.php?id=000000001 + +Foreign protocol addresses which have not been defined in this specification +or future revisions of this specification and which are unknown to the +recipient delivery process MAY be ignored. + +In cases where an address may contain either a webfinger or LRDD address, the +webfinger address SHOULD be used preferentially. + + +Z-Bcc: +****** + +The Z-Bcc element may contain one or more addresses which are hidden from end +user presentation. A zot receiving system MUST NOT store or allow for +the display of the Bcc information. Implementations which require extreme +privacy SHOULD send individual posts to each of the Bcc: recipients containing +only a single address. They MAY send all Bcc: posts using bulk delivery, +however this may have privacy implications as there is no guarantee a +receiving system will not log, store, or otherwise reveal the contents of the +Bcc recipient list. + +Z-To: addresses MAY be shown to an end user. + + +Envelope encryption +******************* + + +The entire envelope is encrypted using alg with env_key and env_iv and +base64url encoded for transmission. + +The zot envelope MAY include remote addresses. A zot inbound delivery agent +MUST parse the envelope and determine whether a delivery address to the +current endpoint is valid. This may be the result of: + + 1. An address contains the public message wildcard '*' + + 2. The current endpoint is a personal endpoint and one of the recipients +listed in the Z-To: or Z-Bcc: addresses matches the webfinger address of +the "owner" of the endpoint. + + 3. The current endpoint is a bulk delivery endpoint. The bulk delivery +endpoint is defined elsewhere in this document. The bulk delivery agent +will deliver to all local addresses found in the address lists. + +zot:sig +******* + +The Sender of the message signs the underlying salmon data in the manner +prescribed by salmon. If the Sender and From address are identical, the +signature will be identical to the signature of the underlying salmon packet. +If they are different, this signature is verified with the Sender's public +key to verify the Sender. + +zot:alg +******* + +Currently the only valid choice for alg is "AES-256-CBC". + + +zot:data +******** + +The data field is a salmon magic envelope. This is encrypted with alg using +key and iv. The result is then base64url encoded for transmission. + +For the first release of this specification, the data format of the enclosed +salmon SHOULD be 'application/atom+xml' representing an Atom formatted +ActivityStream. Future revisions MAY allow other alternate data formats. +All acceptable formats MUST be listed in an XRD property (described elsewhere +in this document). + + +Delivery +******** + +The zot message is then POSTed to the zot endpoint URL as +application/text+xml and can be decoded/decrypted by the recipient using +their private key. + +The normal salmon endpoint for a service MAY be used as an alternate +delivery method for non-encrypted (e.g. public) messages. + +Discover of the zot endpoint is based on webfinger XRD: + + + + +Bulk Delivery +************* + +A site MAY provide a bulk delivery endpoint, which MAY be used to avoid +multiple encryptions of the same data for a single destination. +This is discoverable by providing a zot endpoint with a corresponding +salmon public key in the site's .well-known/host-meta file. +A delivery to this endpoint will deliver to all local recipients provided +within the zot envelope. + + +Extensibility +************* + +This specification is subject to change. The current version which is in +effect at a given site may be noted by XRD properties. The following +properties MUST be present in the XRD providing the relevant endpoint: + + + + + +Version is specified in this document and indicates the current revision. +Implementations MAY provide compatibility to multiple incompatible versions +by using this version indication. The "accept" indicates a range of document +content types which may be enclosed in the underlying salmon magic envelope. +We anticipate this specification will in the future allow for a close variant +of "message/rfc822" and which may include MIME. This may also be used to +embed alternate message formats and protocols such as +"application/x-diaspora+xml". If a delivery agent is unable to provide any +acceptable data format to the remote system, the delivery to that system MUST +be terminated/cancelled. + +Foreign Messages +**************** + +Messages MAY be imported from other networks and systems which have no +knowledge of salmon signatures. The salmon signature in this case MUST be the +exact string 'NOTSIGNED' to indicate that the author (From address) cannot be +validated using salmon verification. This message MUST be relayed by a Sender +who can provide a valid salmon signature of the message via zot:sig. Delivery +systems MAY reject foreign messages. + + + + + +******************************* +* Zid (Zot-ID) authentication * +******************************* + +This section of the document is considered separate from the delivery +specification precding it and represents a different protocol, which is +currently incomplete. This will be split off into another document in the +future, but is presented here as a synergistic component of the Zot network +model. + + +URLs may be present within a zot message which refer to private and/or +protected resources. Zid uses OpenID to gain access to these protected +resources. These could be private photos or profile information - or *any* +web accessible resource. Using zid, these can have access controls which +extends to any resolvable webfinger address. + +Zid authentication relies on the presence of an OpenID provider element in +webfinger, and a URL template which is applied to protected resources within +a zot message. + +The template is designated with the characters "{zid=}" within a URL of a zot +message. When the page is rendered for viewing to an observer, this template +is replaced with the webfinger address of the viewer (if known), or an empty +string if the webfinger address of the viewer cannot be determined. + +For example in a message body: + +http://example.com/photos/bob/picture.jpg?{zid=} + +refers to a private photo which is only visible to alice@example.com. + +If Alice is viewing the page, the link is rendered with + +http://example.com/photos/bob/picture.jpg?zid=alice@example.com + +If the page viewer is unknown, it is rendered as + +http://example.com/photos/bob/picture.jpg?zid= + + +When the link is visited, the web server at example.com notes the presence of +the zid parameter and uses information from webfinger to locate the OpenID +provider for the zid webfinger address. It then redirects to the OpenID +server and requests authentication of the given person. If this is successful, +access to the protected resource is granted. + +A browser cookie may be provided to avoid future authentication redirects +and allow authenticated browsing to other resources on the website. + +Only authentication via OpenID is defined in this version of the specification. + +This can be used to provide access control of any web resource to any +webfinger identity on the internet. + + +********* +* Links * +********* + +Salmon Protocol + http://www.salmon-protocol.org/salmon-protocol-summary + +Salmon Magic Envelope + http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-magicsig-01.html + +Atom Activity Stream Draft + http://activitystrea.ms/specs/atom/1.0/ + +Activty Stream Base Schema + http://activitystrea.ms/head/activity-schema.html + +WebFinger Protocol + http://code.google.com/p/webfinger/wiki/WebFingerProtocol + +