diff --git a/boot.php b/boot.php
index 858eb19a8..5fac9df5a 100644
--- a/boot.php
+++ b/boot.php
@@ -2,9 +2,9 @@
set_time_limit(0);
-define ( 'FRIENDIKA_VERSION', '2.1.941' );
-define ( 'DFRN_PROTOCOL_VERSION', '2.2' );
-define ( 'DB_UPDATE_VERSION', 1047 );
+define ( 'FRIENDIKA_VERSION', '2.1.946' );
+define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
+define ( 'DB_UPDATE_VERSION', 1050 );
define ( 'EOL', "
\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@@ -73,6 +73,18 @@ define ( 'PAGE_SOAPBOX', 1 );
define ( 'PAGE_COMMUNITY', 2 );
define ( 'PAGE_FREELOVE', 3 );
+/**
+ * Network and protocol family types
+ */
+
+define ( 'NETWORK_DFRN', 'dfrn'); // Friendika, Mistpark, other DFRN implementations
+define ( 'NETWORK_OSTATUS', 'stat'); // status.net, identi.ca, GNU-social, other OStatus implementations
+define ( 'NETWORK_FEED', 'feed'); // RSS/Atom feeds with no known "post/notify" protocol
+define ( 'NETWORK_DIASPORA', 'dspr'); // Diaspora
+define ( 'NETWORK_MAIL', 'mail'); // IMAP/POP
+define ( 'NETWORK_FACEBOOK', 'face'); // Facebook API
+
+
/**
* Maximum number of "people who like (or don't like) this" that we will list by name
*/
@@ -189,6 +201,7 @@ class App {
public $user;
public $cid;
public $contact;
+ public $page_contact;
public $content;
public $data;
public $error = false;
@@ -2032,18 +2045,7 @@ function contact_block() {
if(count($r)) {
$o .= '
'.$text.'
'; + $text = preg_replace('{\n{2,}}', "\n\n", $text); + } + return $text; + } + + function mdwp_strip_p($t) { return preg_replace('{?p>}i', '', $t); } + + function mdwp_hide_tags($text) { + global $mdwp_hidden_tags, $mdwp_placeholders; + return str_replace($mdwp_hidden_tags, $mdwp_placeholders, $text); + } + function mdwp_show_tags($text) { + global $mdwp_hidden_tags, $mdwp_placeholders; + return str_replace($mdwp_placeholders, $mdwp_hidden_tags, $text); + } +} + + +### bBlog Plugin Info ### + +function identify_modifier_markdown() { + return array( + 'name' => 'markdown', + 'type' => 'modifier', + 'nicename' => 'PHP Markdown Extra', + 'description' => 'A text-to-HTML conversion tool for web writers', + 'authors' => 'Michel Fortin and John Gruber', + 'licence' => 'GPL', + 'version' => MARKDOWNEXTRA_VERSION, + 'help' => 'Markdown syntax allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by John Gruber. More...', + ); +} + + +### Smarty Modifier Interface ### + +function smarty_modifier_markdown($text) { + return Markdown($text); +} + + +### Textile Compatibility Mode ### + +# Rename this file to "classTextile.php" and it can replace Textile everywhere. + +if (strcasecmp(substr(__FILE__, -16), "classTextile.php") == 0) { + # Try to include PHP SmartyPants. Should be in the same directory. + @include_once 'smartypants.php'; + # Fake Textile class. It calls Markdown instead. + class Textile { + function TextileThis($text, $lite='', $encode='') { + if ($lite == '' && $encode == '') $text = Markdown($text); + if (function_exists('SmartyPants')) $text = SmartyPants($text); + return $text; + } + # Fake restricted version: restrictions are not supported for now. + function TextileRestricted($text, $lite='', $noimage='') { + return $this->TextileThis($text, $lite); + } + # Workaround to ensure compatibility with TextPattern 4.0.3. + function blockLite($text) { return $text; } + } +} + + + +# +# Markdown Parser Class +# + +class Markdown_Parser { + + # Regex to match balanced [brackets]. + # Needed to insert a maximum bracked depth while converting to PHP. + var $nested_brackets_depth = 6; + var $nested_brackets_re; + + var $nested_url_parenthesis_depth = 4; + var $nested_url_parenthesis_re; + + # Table of hash values for escaped characters: + var $escape_chars = '\`*_{}[]()>#+-.!'; + var $escape_chars_re; + + # Change to ">" for HTML output. + var $empty_element_suffix = MARKDOWN_EMPTY_ELEMENT_SUFFIX; + var $tab_width = MARKDOWN_TAB_WIDTH; + + # Change to `true` to disallow markup or entities. + var $no_markup = false; + var $no_entities = false; + + # Predefined urls and titles for reference links and images. + var $predef_urls = array(); + var $predef_titles = array(); + + + function Markdown_Parser() { + # + # Constructor function. Initialize appropriate member variables. + # + $this->_initDetab(); + $this->prepareItalicsAndBold(); + + $this->nested_brackets_re = + str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth). + str_repeat('\])*', $this->nested_brackets_depth); + + $this->nested_url_parenthesis_re = + str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth). + str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth); + + $this->escape_chars_re = '['.preg_quote($this->escape_chars).']'; + + # Sort document, block, and span gamut in ascendent priority order. + asort($this->document_gamut); + asort($this->block_gamut); + asort($this->span_gamut); + } + + + # Internal hashes used during transformation. + var $urls = array(); + var $titles = array(); + var $html_hashes = array(); + + # Status flag to avoid invalid nesting. + var $in_anchor = false; + + + function setup() { + # + # Called before the transformation process starts to setup parser + # states. + # + # Clear global hashes. + $this->urls = $this->predef_urls; + $this->titles = $this->predef_titles; + $this->html_hashes = array(); + + $in_anchor = false; + } + + function teardown() { + # + # Called after the transformation process to clear any variable + # which may be taking up memory unnecessarly. + # + $this->urls = array(); + $this->titles = array(); + $this->html_hashes = array(); + } + + + function transform($text) { + # + # Main function. Performs some preprocessing on the input text + # and pass it through the document gamut. + # + $this->setup(); + + # Remove UTF-8 BOM and marker character in input, if present. + $text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text); + + # Standardize line endings: + # DOS to Unix and Mac to Unix + $text = preg_replace('{\r\n?}', "\n", $text); + + # Make sure $text ends with a couple of newlines: + $text .= "\n\n"; + + # Convert all tabs to spaces. + $text = $this->detab($text); + + # Turn block-level HTML blocks into hash entries + $text = $this->hashHTMLBlocks($text); + + # Strip any lines consisting only of spaces and tabs. + # This makes subsequent regexen easier to write, because we can + # match consecutive blank lines with /\n+/ instead of something + # contorted like /[ ]*\n+/ . + $text = preg_replace('/^[ ]+$/m', '', $text); + + # Run document gamut methods. + foreach ($this->document_gamut as $method => $priority) { + $text = $this->$method($text); + } + + $this->teardown(); + + return $text . "\n"; + } + + var $document_gamut = array( + # Strip link definitions, store in hashes. + "stripLinkDefinitions" => 20, + + "runBasicBlockGamut" => 30, + ); + + + function stripLinkDefinitions($text) { + # + # Strips link definitions from text, stores the URLs and titles in + # hash references. + # + $less_than_tab = $this->tab_width - 1; + + # Link defs are in the form: ^[id]: url "optional title" + $text = preg_replace_callback('{ + ^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?: # id = $1 + [ ]* + \n? # maybe *one* newline + [ ]* + (\S+?)>? # url = $2 + [ ]* + \n? # maybe one newline + [ ]* + (?: + (?<=\s) # lookbehind for whitespace + ["(] + (.*?) # title = $3 + [")] + [ ]* + )? # title is optional + (?:\n+|\Z) + }xm', + array(&$this, '_stripLinkDefinitions_callback'), + $text); + return $text; + } + function _stripLinkDefinitions_callback($matches) { + $link_id = strtolower($matches[1]); + $this->urls[$link_id] = $matches[2]; + $this->titles[$link_id] =& $matches[3]; + return ''; # String that will replace the block + } + + + function hashHTMLBlocks($text) { + if ($this->no_markup) return $text; + + $less_than_tab = $this->tab_width - 1; + + # Hashify HTML blocks: + # We only want to do this for block-level HTML tags, such as headers, + # lists, and tables. That's because we still want to wrap
s around + # "paragraphs" that are wrapped in non-block-level tags, such as anchors, + # phrase emphasis, and spans. The list of tags we're looking for is + # hard-coded: + # + # * List "a" is made of tags which can be both inline or block-level. + # These will be treated block-level when the start tag is alone on + # its line, otherwise they're not matched here and will be taken as + # inline later. + # * List "b" is made of tags which are always block-level; + # + $block_tags_a_re = 'ins|del'; + $block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'. + 'script|noscript|form|fieldset|iframe|math|textarea'; + + # Regular expression for the content of a block tag. + $nested_tags_level = 4; + $attr = ' + (?> # optional tag attributes + \s # starts with whitespace + (?> + [^>"/]+ # text outside quotes + | + /+(?!>) # slash not followed by ">" + | + "[^"]*" # text inside double quotes (tolerate ">") + | + \'[^\']*\' # text inside single quotes (tolerate ">") + )* + )? + '; + $content = + str_repeat(' + (?> + [^<]+ # content without tag + | + <\2 # nested opening tag + '.$attr.' # attributes + (?> + /> + | + >', $nested_tags_level). # end of opening tag + '.*?'. # last level nested tag content + str_repeat(' + \2\s*> # closing nested tag + ) + | + <(?!/\2\s*> # other tags with a different name + ) + )*', + $nested_tags_level); + $content2 = str_replace('\2', '\3', $content); + + # First, look for nested blocks, e.g.: + #
` blocks.
+ #
+ $text = preg_replace_callback('{
+ (?:\n\n|\A\n?)
+ ( # $1 = the code block -- one or more lines, starting with a space/tab
+ (?>
+ [ ]{'.$this->tab_width.'} # Lines must start with a tab or a tab-width of spaces
+ .*\n+
+ )+
+ )
+ ((?=^[ ]{0,'.$this->tab_width.'}\S)|\Z) # Lookahead for non-space at line-start, or end of doc
+ }xm',
+ array(&$this, '_doCodeBlocks_callback'), $text);
+
+ return $text;
+ }
+ function _doCodeBlocks_callback($matches) {
+ $codeblock = $matches[1];
+
+ $codeblock = $this->outdent($codeblock);
+ $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
+
+ # trim leading newlines and trailing newlines
+ $codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
+
+ $codeblock = "$codeblock\n
";
+ return "\n\n".$this->hashBlock($codeblock)."\n\n";
+ }
+
+
+ function makeCodeSpan($code) {
+ #
+ # Create a code span markup for $code. Called from handleSpanToken.
+ #
+ $code = htmlspecialchars(trim($code), ENT_NOQUOTES);
+ return $this->hashPart("$code
");
+ }
+
+
+ var $em_relist = array(
+ '' => '(?:(? '(?<=\S)(? '(?<=\S)(? '(?:(? '(?<=\S)(? '(?<=\S)(? '(?:(? '(?<=\S)(? '(?<=\S)(?em_relist as $em => $em_re) {
+ foreach ($this->strong_relist as $strong => $strong_re) {
+ # Construct list of allowed token expressions.
+ $token_relist = array();
+ if (isset($this->em_strong_relist["$em$strong"])) {
+ $token_relist[] = $this->em_strong_relist["$em$strong"];
+ }
+ $token_relist[] = $em_re;
+ $token_relist[] = $strong_re;
+
+ # Construct master expression from list.
+ $token_re = '{('. implode('|', $token_relist) .')}';
+ $this->em_strong_prepared_relist["$em$strong"] = $token_re;
+ }
+ }
+ }
+
+ function doItalicsAndBold($text) {
+ $token_stack = array('');
+ $text_stack = array('');
+ $em = '';
+ $strong = '';
+ $tree_char_em = false;
+
+ while (1) {
+ #
+ # Get prepared regular expression for seraching emphasis tokens
+ # in current context.
+ #
+ $token_re = $this->em_strong_prepared_relist["$em$strong"];
+
+ #
+ # Each loop iteration seach for the next emphasis token.
+ # Each token is then passed to handleSpanToken.
+ #
+ $parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
+ $text_stack[0] .= $parts[0];
+ $token =& $parts[1];
+ $text =& $parts[2];
+
+ if (empty($token)) {
+ # Reached end of text span: empty stack without emitting.
+ # any more emphasis.
+ while ($token_stack[0]) {
+ $text_stack[1] .= array_shift($token_stack);
+ $text_stack[0] .= array_shift($text_stack);
+ }
+ break;
+ }
+
+ $token_len = strlen($token);
+ if ($tree_char_em) {
+ # Reached closing marker while inside a three-char emphasis.
+ if ($token_len == 3) {
+ # Three-char closing marker, close em and strong.
+ array_shift($token_stack);
+ $span = array_shift($text_stack);
+ $span = $this->runSpanGamut($span);
+ $span = "$span";
+ $text_stack[0] .= $this->hashPart($span);
+ $em = '';
+ $strong = '';
+ } else {
+ # Other closing marker: close one em or strong and
+ # change current token state to match the other
+ $token_stack[0] = str_repeat($token{0}, 3-$token_len);
+ $tag = $token_len == 2 ? "strong" : "em";
+ $span = $text_stack[0];
+ $span = $this->runSpanGamut($span);
+ $span = "<$tag>$span$tag>";
+ $text_stack[0] = $this->hashPart($span);
+ $$tag = ''; # $$tag stands for $em or $strong
+ }
+ $tree_char_em = false;
+ } else if ($token_len == 3) {
+ if ($em) {
+ # Reached closing marker for both em and strong.
+ # Closing strong marker:
+ for ($i = 0; $i < 2; ++$i) {
+ $shifted_token = array_shift($token_stack);
+ $tag = strlen($shifted_token) == 2 ? "strong" : "em";
+ $span = array_shift($text_stack);
+ $span = $this->runSpanGamut($span);
+ $span = "<$tag>$span$tag>";
+ $text_stack[0] .= $this->hashPart($span);
+ $$tag = ''; # $$tag stands for $em or $strong
+ }
+ } else {
+ # Reached opening three-char emphasis marker. Push on token
+ # stack; will be handled by the special condition above.
+ $em = $token{0};
+ $strong = "$em$em";
+ array_unshift($token_stack, $token);
+ array_unshift($text_stack, '');
+ $tree_char_em = true;
+ }
+ } else if ($token_len == 2) {
+ if ($strong) {
+ # Unwind any dangling emphasis marker:
+ if (strlen($token_stack[0]) == 1) {
+ $text_stack[1] .= array_shift($token_stack);
+ $text_stack[0] .= array_shift($text_stack);
+ }
+ # Closing strong marker:
+ array_shift($token_stack);
+ $span = array_shift($text_stack);
+ $span = $this->runSpanGamut($span);
+ $span = "$span";
+ $text_stack[0] .= $this->hashPart($span);
+ $strong = '';
+ } else {
+ array_unshift($token_stack, $token);
+ array_unshift($text_stack, '');
+ $strong = $token;
+ }
+ } else {
+ # Here $token_len == 1
+ if ($em) {
+ if (strlen($token_stack[0]) == 1) {
+ # Closing emphasis marker:
+ array_shift($token_stack);
+ $span = array_shift($text_stack);
+ $span = $this->runSpanGamut($span);
+ $span = "$span";
+ $text_stack[0] .= $this->hashPart($span);
+ $em = '';
+ } else {
+ $text_stack[0] .= $token;
+ }
+ } else {
+ array_unshift($token_stack, $token);
+ array_unshift($text_stack, '');
+ $em = $token;
+ }
+ }
+ }
+ return $text_stack[0];
+ }
+
+
+ function doBlockQuotes($text) {
+ $text = preg_replace_callback('/
+ ( # Wrap whole match in $1
+ (?>
+ ^[ ]*>[ ]? # ">" at the start of a line
+ .+\n # rest of the first line
+ (.+\n)* # subsequent consecutive lines
+ \n* # blanks
+ )+
+ )
+ /xm',
+ array(&$this, '_doBlockQuotes_callback'), $text);
+
+ return $text;
+ }
+ function _doBlockQuotes_callback($matches) {
+ $bq = $matches[1];
+ # trim one level of quoting - trim whitespace-only lines
+ $bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
+ $bq = $this->runBlockGamut($bq); # recurse
+
+ $bq = preg_replace('/^/m', " ", $bq);
+ # These leading spaces cause problem with content,
+ # so we need to fix that:
+ $bq = preg_replace_callback('{(\s*.+?
)}sx',
+ array(&$this, '_DoBlockQuotes_callback2'), $bq);
+
+ return "\n". $this->hashBlock("\n$bq\n
")."\n\n";
+ }
+ function _doBlockQuotes_callback2($matches) {
+ $pre = $matches[1];
+ $pre = preg_replace('/^ /m', '', $pre);
+ return $pre;
+ }
+
+
+ function formParagraphs($text) {
+ #
+ # Params:
+ # $text - string to process with html tags
+ #
+ # Strip leading and trailing lines:
+ $text = preg_replace('/\A\n+|\n+\z/', '', $text);
+
+ $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
+
+ #
+ # Wrap
tags and unhashify HTML blocks
+ #
+ foreach ($grafs as $key => $value) {
+ if (!preg_match('/^B\x1A[0-9]+B$/', $value)) {
+ # Is a paragraph.
+ $value = $this->runSpanGamut($value);
+ $value = preg_replace('/^([ ]*)/', "
", $value);
+ $value .= "
";
+ $grafs[$key] = $this->unhash($value);
+ }
+ else {
+ # Is a block.
+ # Modify elements of @grafs in-place...
+ $graf = $value;
+ $block = $this->html_hashes[$graf];
+ $graf = $block;
+// if (preg_match('{
+// \A
+// ( # $1 = tag
+// ]*
+// \b
+// markdown\s*=\s* ([\'"]) # $2 = attr quote char
+// 1
+// \2
+// [^>]*
+// >
+// )
+// ( # $3 = contents
+// .*
+// )
+// () # $4 = closing tag
+// \z
+// }xs', $block, $matches))
+// {
+// list(, $div_open, , $div_content, $div_close) = $matches;
+//
+// # We can't call Markdown(), because that resets the hash;
+// # that initialization code should be pulled into its own sub, though.
+// $div_content = $this->hashHTMLBlocks($div_content);
+//
+// # Run document gamut methods on the content.
+// foreach ($this->document_gamut as $method => $priority) {
+// $div_content = $this->$method($div_content);
+// }
+//
+// $div_open = preg_replace(
+// '{\smarkdown\s*=\s*([\'"]).+?\1}', '', $div_open);
+//
+// $graf = $div_open . "\n" . $div_content . "\n" . $div_close;
+// }
+ $grafs[$key] = $graf;
+ }
+ }
+
+ return implode("\n\n", $grafs);
+ }
+
+
+ function encodeAttribute($text) {
+ #
+ # Encode text for a double-quoted HTML attribute. This function
+ # is *not* suitable for attributes enclosed in single quotes.
+ #
+ $text = $this->encodeAmpsAndAngles($text);
+ $text = str_replace('"', '"', $text);
+ return $text;
+ }
+
+
+ function encodeAmpsAndAngles($text) {
+ #
+ # Smart processing for ampersands and angle brackets that need to
+ # be encoded. Valid character entities are left alone unless the
+ # no-entities mode is set.
+ #
+ if ($this->no_entities) {
+ $text = str_replace('&', '&', $text);
+ } else {
+ # Ampersand-encoding based entirely on Nat Irons's Amputator
+ # MT plugin:
+ $text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/',
+ '&', $text);;
+ }
+ # Encode remaining <'s
+ $text = str_replace('<', '<', $text);
+
+ return $text;
+ }
+
+
+ function doAutoLinks($text) {
+ $text = preg_replace_callback('{<((https?|ftp|dict):[^\'">\s]+)>}i',
+ array(&$this, '_doAutoLinks_url_callback'), $text);
+
+ # Email addresses:
+ $text = preg_replace_callback('{
+ <
+ (?:mailto:)?
+ (
+ [-.\w\x80-\xFF]+
+ \@
+ [-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+
+ )
+ >
+ }xi',
+ array(&$this, '_doAutoLinks_email_callback'), $text);
+
+ return $text;
+ }
+ function _doAutoLinks_url_callback($matches) {
+ $url = $this->encodeAttribute($matches[1]);
+ $link = "$url";
+ return $this->hashPart($link);
+ }
+ function _doAutoLinks_email_callback($matches) {
+ $address = $matches[1];
+ $link = $this->encodeEmailAddress($address);
+ return $this->hashPart($link);
+ }
+
+
+ function encodeEmailAddress($addr) {
+ #
+ # Input: an email address, e.g. "foo@example.com"
+ #
+ # Output: the email address as a mailto link, with each character
+ # of the address encoded as either a decimal or hex entity, in
+ # the hopes of foiling most address harvesting spam bots. E.g.:
+ #
+ #
+ #
+ # Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
+ # With some optimizations by Milian Wolff.
+ #
+ $addr = "mailto:" . $addr;
+ $chars = preg_split('/(? $char) {
+ $ord = ord($char);
+ # Ignore non-ascii chars.
+ if ($ord < 128) {
+ $r = ($seed * (1 + $key)) % 100; # Pseudo-random function.
+ # roughly 10% raw, 45% hex, 45% dec
+ # '@' *must* be encoded. I insist.
+ if ($r > 90 && $char != '@') /* do nothing */;
+ else if ($r < 45) $chars[$key] = ''.dechex($ord).';';
+ else $chars[$key] = ''.$ord.';';
+ }
+ }
+
+ $addr = implode('', $chars);
+ $text = implode('', array_slice($chars, 7)); # text without `mailto:`
+ $addr = "$text";
+
+ return $addr;
+ }
+
+
+ function parseSpan($str) {
+ #
+ # Take the string $str and parse it into tokens, hashing embeded HTML,
+ # escaped characters and handling code spans.
+ #
+ $output = '';
+
+ $span_re = '{
+ (
+ \\\\'.$this->escape_chars_re.'
+ |
+ (?no_markup ? '' : '
+ |
+ # comment
+ |
+ <\?.*?\?> | <%.*?%> # processing instruction
+ |
+ <[/!$]?[-a-zA-Z0-9:]+ # regular tags
+ (?>
+ \s
+ (?>[^"\'>]+|"[^"]*"|\'[^\']*\')*
+ )?
+ >
+ ').'
+ )
+ }xs';
+
+ while (1) {
+ #
+ # Each loop iteration seach for either the next tag, the next
+ # openning code span marker, or the next escaped character.
+ # Each token is then passed to handleSpanToken.
+ #
+ $parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE);
+
+ # Create token from text preceding tag.
+ if ($parts[0] != "") {
+ $output .= $parts[0];
+ }
+
+ # Check if we reach the end.
+ if (isset($parts[1])) {
+ $output .= $this->handleSpanToken($parts[1], $parts[2]);
+ $str = $parts[2];
+ }
+ else {
+ break;
+ }
+ }
+
+ return $output;
+ }
+
+
+ function handleSpanToken($token, &$str) {
+ #
+ # Handle $token provided by parseSpan by determining its nature and
+ # returning the corresponding value that should replace it.
+ #
+ switch ($token{0}) {
+ case "\\":
+ return $this->hashPart("". ord($token{1}). ";");
+ case "`":
+ # Search for end marker in remaining text.
+ if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm',
+ $str, $matches))
+ {
+ $str = $matches[2];
+ $codespan = $this->makeCodeSpan($matches[1]);
+ return $this->hashPart($codespan);
+ }
+ return $token; // return as text since no ending marker found.
+ default:
+ return $this->hashPart($token);
+ }
+ }
+
+
+ function outdent($text) {
+ #
+ # Remove one level of line-leading tabs or spaces
+ #
+ return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text);
+ }
+
+
+ # String length function for detab. `_initDetab` will create a function to
+ # hanlde UTF-8 if the default function does not exist.
+ var $utf8_strlen = 'mb_strlen';
+
+ function detab($text) {
+ #
+ # Replace tabs with the appropriate amount of space.
+ #
+ # For each line we separate the line in blocks delemited by
+ # tab characters. Then we reconstruct every line by adding the
+ # appropriate number of space between each blocks.
+
+ $text = preg_replace_callback('/^.*\t.*$/m',
+ array(&$this, '_detab_callback'), $text);
+
+ return $text;
+ }
+ function _detab_callback($matches) {
+ $line = $matches[0];
+ $strlen = $this->utf8_strlen; # strlen function for UTF-8.
+
+ # Split in blocks.
+ $blocks = explode("\t", $line);
+ # Add each blocks to the line.
+ $line = $blocks[0];
+ unset($blocks[0]); # Do not add first block twice.
+ foreach ($blocks as $block) {
+ # Calculate amount of space, insert spaces, insert block.
+ $amount = $this->tab_width -
+ $strlen($line, 'UTF-8') % $this->tab_width;
+ $line .= str_repeat(" ", $amount) . $block;
+ }
+ return $line;
+ }
+ function _initDetab() {
+ #
+ # Check for the availability of the function in the `utf8_strlen` property
+ # (initially `mb_strlen`). If the function is not available, create a
+ # function that will loosely count the number of UTF-8 characters with a
+ # regular expression.
+ #
+ if (function_exists($this->utf8_strlen)) return;
+ $this->utf8_strlen = create_function('$text', 'return preg_match_all(
+ "/[\\\\x00-\\\\xBF]|[\\\\xC0-\\\\xFF][\\\\x80-\\\\xBF]*/",
+ $text, $m);');
+ }
+
+
+ function unhash($text) {
+ #
+ # Swap back in all the tags hashed by _HashHTMLBlocks.
+ #
+ return preg_replace_callback('/(.)\x1A[0-9]+\1/',
+ array(&$this, '_unhash_callback'), $text);
+ }
+ function _unhash_callback($matches) {
+ return $this->html_hashes[$matches[0]];
+ }
+
+}
+
+
+#
+# Markdown Extra Parser Class
+#
+
+class MarkdownExtra_Parser extends Markdown_Parser {
+
+ # Prefix for footnote ids.
+ var $fn_id_prefix = "";
+
+ # Optional title attribute for footnote links and backlinks.
+ var $fn_link_title = MARKDOWN_FN_LINK_TITLE;
+ var $fn_backlink_title = MARKDOWN_FN_BACKLINK_TITLE;
+
+ # Optional class attribute for footnote links and backlinks.
+ var $fn_link_class = MARKDOWN_FN_LINK_CLASS;
+ var $fn_backlink_class = MARKDOWN_FN_BACKLINK_CLASS;
+
+ var $el_enable = MARKDOWN_EL_ENABLE;
+ var $el_local_domain = MARKDOWN_EL_LOCAL_DOMAIN;
+ var $el_new_window = MARKDOWN_EL_NEW_WINDOW;
+ var $el_css_class = MARKDOWN_EL_CSS_CLASS;
+
+ var $ha_enable = MARKDOWN_HA_ENABLE;
+ var $ha_class = MARKDOWN_HA_CLASS;
+ var $ha_text = MARKDOWN_HA_TEXT;
+
+ # Predefined abbreviations.
+ var $predef_abbr = array();
+
+
+ function MarkdownExtra_Parser() {
+ #
+ # Constructor function. Initialize the parser object.
+ #
+ # Add extra escapable characters before parent constructor
+ # initialize the table.
+ $this->escape_chars .= ':|';
+
+ if ($this->el_local_domain === null) {
+ $this->el_local_domain = $_SERVER['SERVER_NAME'];
+ }
+
+ # Insert extra document, block, and span transformations.
+ # Parent constructor will do the sorting.
+ $this->document_gamut += array(
+ "doFencedCodeBlocks" => 5,
+ "stripFootnotes" => 15,
+ "stripAbbreviations" => 25,
+ "appendFootnotes" => 50,
+ );
+ $this->block_gamut += array(
+ "doFencedCodeBlocks" => 5,
+ "doTables" => 15,
+ "doDefLists" => 45,
+ );
+ $this->span_gamut += array(
+ "doFootnotes" => 5,
+ "doAbbreviations" => 70,
+ );
+
+ parent::Markdown_Parser();
+ }
+
+
+ # Extra variables used during extra transformations.
+ var $footnotes = array();
+ var $footnotes_ordered = array();
+ var $abbr_desciptions = array();
+ var $abbr_word_re = '';
+
+ # Give the current footnote number.
+ var $footnote_counter = 1;
+
+
+ function setup() {
+ #
+ # Setting up Extra-specific variables.
+ #
+ parent::setup();
+
+ $this->footnotes = array();
+ $this->footnotes_ordered = array();
+ $this->abbr_desciptions = array();
+ $this->abbr_word_re = '';
+ $this->footnote_counter = 1;
+
+ foreach ($this->predef_abbr as $abbr_word => $abbr_desc) {
+ if ($this->abbr_word_re)
+ $this->abbr_word_re .= '|';
+ $this->abbr_word_re .= preg_quote($abbr_word);
+ $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
+ }
+ }
+
+ function teardown() {
+ #
+ # Clearing Extra-specific variables.
+ #
+ $this->footnotes = array();
+ $this->footnotes_ordered = array();
+ $this->abbr_desciptions = array();
+ $this->abbr_word_re = '';
+
+ parent::teardown();
+ }
+
+
+ ### HTML Block Parser ###
+
+ # Tags that are always treated as block tags:
+ var $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend';
+
+ # Tags treated as block tags only if the opening tag is alone on it's line:
+ var $context_block_tags_re = 'script|noscript|math|ins|del';
+
+ # Tags where markdown="1" default to span mode:
+ var $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
+
+ # Tags which must not have their contents modified, no matter where
+ # they appear:
+ var $clean_tags_re = 'script|math';
+
+ # Tags that do not need to be closed.
+ var $auto_close_tags_re = 'hr|img';
+
+
+ function hashHTMLBlocks($text) {
+ #
+ # Hashify HTML Blocks and "clean tags".
+ #
+ # We only want to do this for block-level HTML tags, such as headers,
+ # lists, and tables. That's because we still want to wrap s around
+ # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
+ # phrase emphasis, and spans. The list of tags we're looking for is
+ # hard-coded.
+ #
+ # This works by calling _HashHTMLBlocks_InMarkdown, which then calls
+ # _HashHTMLBlocks_InHTML when it encounter block tags. When the markdown="1"
+ # attribute is found whitin a tag, _HashHTMLBlocks_InHTML calls back
+ # _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag.
+ # These two functions are calling each other. It's recursive!
+ #
+ #
+ # Call the HTML-in-Markdown hasher.
+ #
+ list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text);
+
+ return $text;
+ }
+ function _hashHTMLBlocks_inMarkdown($text, $indent = 0,
+ $enclosing_tag_re = '', $span = false)
+ {
+ #
+ # Parse markdown text, calling _HashHTMLBlocks_InHTML for block tags.
+ #
+ # * $indent is the number of space to be ignored when checking for code
+ # blocks. This is important because if we don't take the indent into
+ # account, something like this (which looks right) won't work as expected:
+ #
+ #
+ #
+ # Hello World. <-- Is this a Markdown code block or text?
+ # <-- Is this a Markdown code block or a real tag?
+ #
+ #
+ # If you don't like this, just don't indent the tag on which
+ # you apply the markdown="1" attribute.
+ #
+ # * If $enclosing_tag_re is not empty, stops at the first unmatched closing
+ # tag with that name. Nested tags supported.
+ #
+ # * If $span is true, text inside must treated as span. So any double
+ # newline will be replaced by a single newline so that it does not create
+ # paragraphs.
+ #
+ # Returns an array of that form: ( processed text , remaining text )
+ #
+ if ($text === '') return array('', '');
+
+ # Regex to check for the presense of newlines around a block tag.
+ $newline_before_re = '/(?:^\n?|\n\n)*$/';
+ $newline_after_re =
+ '{
+ ^ # Start of text following the tag.
+ (?>[ ]*)? # Optional comment.
+ [ ]*\n # Must be followed by newline.
+ }xs';
+
+ # Regex to match any tag.
+ $block_tag_re =
+ '{
+ ( # $2: Capture hole tag.
+ ? # Any opening or closing tag.
+ (?> # Tag name.
+ '.$this->block_tags_re.' |
+ '.$this->context_block_tags_re.' |
+ '.$this->clean_tags_re.' |
+ (?!\s)'.$enclosing_tag_re.'
+ )
+ (?:
+ (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name.
+ (?>
+ ".*?" | # Double quotes (can contain `>`)
+ \'.*?\' | # Single quotes (can contain `>`)
+ .+? # Anything but quotes and `>`.
+ )*?
+ )?
+ > # End of tag.
+ |
+ # HTML Comment
+ |
+ <\?.*?\?> | <%.*?%> # Processing instruction
+ |
+ # CData Block
+ |
+ # Code span marker
+ `+
+ '. ( !$span ? ' # If not in span.
+ |
+ # Indented code block
+ (?> ^[ ]*\n? | \n[ ]*\n )
+ [ ]{'.($indent+4).'}[^\n]* \n
+ (?>
+ (?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n
+ )*
+ |
+ # Fenced code block marker
+ (?> ^ | \n )
+ [ ]{'.($indent).'}~~~+[ ]*\n
+ ' : '' ). ' # End (if not is span).
+ )
+ }xs';
+
+
+ $depth = 0; # Current depth inside the tag tree.
+ $parsed = ""; # Parsed text that will be returned.
+
+ #
+ # Loop through every tag until we find the closing tag of the parent
+ # or loop until reaching the end of text if no parent tag specified.
+ #
+ do {
+ #
+ # Split the text using the first $tag_match pattern found.
+ # Text before pattern will be first in the array, text after
+ # pattern will be at the end, and between will be any catches made
+ # by the pattern.
+ #
+ $parts = preg_split($block_tag_re, $text, 2,
+ PREG_SPLIT_DELIM_CAPTURE);
+
+ # If in Markdown span mode, add a empty-string span-level hash
+ # after each newline to prevent triggering any block element.
+ if ($span) {
+ $void = $this->hashPart("", ':');
+ $newline = "$void\n";
+ $parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void;
+ }
+
+ $parsed .= $parts[0]; # Text before current tag.
+
+ # If end of $text has been reached. Stop loop.
+ if (count($parts) < 3) {
+ $text = "";
+ break;
+ }
+
+ $tag = $parts[1]; # Tag to handle.
+ $text = $parts[2]; # Remaining text after current tag.
+ $tag_re = preg_quote($tag); # For use in a regular expression.
+
+ #
+ # Check for: Code span marker
+ #
+ if ($tag{0} == "`") {
+ # Find corresponding end marker.
+ $tag_re = preg_quote($tag);
+ if (preg_match('{^(?>.+?|\n(?!\n))*?(?.*\n)+?'.$tag_re.' *\n}', $text,
+ $matches))
+ {
+ # End marker found: pass text unchanged until marker.
+ $parsed .= $tag . $matches[0];
+ $text = substr($text, strlen($matches[0]));
+ }
+ else {
+ # No end marker: just skip it.
+ $parsed .= $tag;
+ }
+ }
+ }
+ #
+ # Check for: Opening Block level tag or
+ # Opening Context Block tag (like ins and del)
+ # used as a block tag (tag is alone on it's line).
+ #
+ else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) ||
+ ( preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
+ preg_match($newline_before_re, $parsed) &&
+ preg_match($newline_after_re, $text) )
+ )
+ {
+ # Need to parse tag and following text using the HTML parser.
+ list($block_text, $text) =
+ $this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true);
+
+ # Make sure it stays outside of any paragraph by adding newlines.
+ $parsed .= "\n\n$block_text\n\n";
+ }
+ #
+ # Check for: Clean tag (like script, math)
+ # HTML Comments, processing instructions.
+ #
+ else if (preg_match('{^<(?:'.$this->clean_tags_re.')\b}', $tag) ||
+ $tag{1} == '!' || $tag{1} == '?')
+ {
+ # Need to parse tag and following text using the HTML parser.
+ # (don't check for markdown attribute)
+ list($block_text, $text) =
+ $this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false);
+
+ $parsed .= $block_text;
+ }
+ #
+ # Check for: Tag with same name as enclosing tag.
+ #
+ else if ($enclosing_tag_re !== '' &&
+ # Same name as enclosing tag.
+ preg_match('{^?(?:'.$enclosing_tag_re.')\b}', $tag))
+ {
+ #
+ # Increase/decrease nested tag count.
+ #
+ if ($tag{1} == '/') $depth--;
+ else if ($tag{strlen($tag)-2} != '/') $depth++;
+
+ if ($depth < 0) {
+ #
+ # Going out of parent element. Clean up and break so we
+ # return to the calling function.
+ #
+ $text = $tag . $text;
+ break;
+ }
+
+ $parsed .= $tag;
+ }
+ else {
+ $parsed .= $tag;
+ }
+ } while ($depth >= 0);
+
+ return array($parsed, $text);
+ }
+ function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) {
+ #
+ # Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags.
+ #
+ # * Calls $hash_method to convert any blocks.
+ # * Stops when the first opening tag closes.
+ # * $md_attr indicate if the use of the `markdown="1"` attribute is allowed.
+ # (it is not inside clean tags)
+ #
+ # Returns an array of that form: ( processed text , remaining text )
+ #
+ if ($text === '') return array('', '');
+
+ # Regex to match `markdown` attribute inside of a tag.
+ $markdown_attr_re = '
+ {
+ \s* # Eat whitespace before the `markdown` attribute
+ markdown
+ \s*=\s*
+ (?>
+ (["\']) # $1: quote delimiter
+ (.*?) # $2: attribute value
+ \1 # matching delimiter
+ |
+ ([^\s>]*) # $3: unquoted attribute value
+ )
+ () # $4: make $3 always defined (avoid warnings)
+ }xs';
+
+ # Regex to match any tag.
+ $tag_re = '{
+ ( # $2: Capture hole tag.
+ ? # Any opening or closing tag.
+ [\w:$]+ # Tag name.
+ (?:
+ (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name.
+ (?>
+ ".*?" | # Double quotes (can contain `>`)
+ \'.*?\' | # Single quotes (can contain `>`)
+ .+? # Anything but quotes and `>`.
+ )*?
+ )?
+ > # End of tag.
+ |
+ # HTML Comment
+ |
+ <\?.*?\?> | <%.*?%> # Processing instruction
+ |
+ # CData Block
+ )
+ }xs';
+
+ $original_text = $text; # Save original text in case of faliure.
+
+ $depth = 0; # Current depth inside the tag tree.
+ $block_text = ""; # Temporary text holder for current text.
+ $parsed = ""; # Parsed text that will be returned.
+
+ #
+ # Get the name of the starting tag.
+ # (This pattern makes $base_tag_name_re safe without quoting.)
+ #
+ if (preg_match('/^<([\w:$]*)\b/', $text, $matches))
+ $base_tag_name_re = $matches[1];
+
+ #
+ # Loop through every tag until we find the corresponding closing tag.
+ #
+ do {
+ #
+ # Split the text using the first $tag_match pattern found.
+ # Text before pattern will be first in the array, text after
+ # pattern will be at the end, and between will be any catches made
+ # by the pattern.
+ #
+ $parts = preg_split($tag_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
+
+ if (count($parts) < 3) {
+ #
+ # End of $text reached with unbalenced tag(s).
+ # In that case, we return original text unchanged and pass the
+ # first character as filtered to prevent an infinite loop in the
+ # parent function.
+ #
+ return array($original_text{0}, substr($original_text, 1));
+ }
+
+ $block_text .= $parts[0]; # Text before current tag.
+ $tag = $parts[1]; # Tag to handle.
+ $text = $parts[2]; # Remaining text after current tag.
+
+ #
+ # Check for: Auto-close tag (like
)
+ # Comments and Processing Instructions.
+ #
+ if (preg_match('{^?(?:'.$this->auto_close_tags_re.')\b}', $tag) ||
+ $tag{1} == '!' || $tag{1} == '?')
+ {
+ # Just add the tag to the block as if it was text.
+ $block_text .= $tag;
+ }
+ else {
+ #
+ # Increase/decrease nested tag count. Only do so if
+ # the tag's name match base tag's.
+ #
+ if (preg_match('{^?'.$base_tag_name_re.'\b}', $tag)) {
+ if ($tag{1} == '/') $depth--;
+ else if ($tag{strlen($tag)-2} != '/') $depth++;
+ }
+
+ #
+ # Check for `markdown="1"` attribute and handle it.
+ #
+ if ($md_attr &&
+ preg_match($markdown_attr_re, $tag, $attr_m) &&
+ preg_match('/^1|block|span$/', $attr_m[2] . $attr_m[3]))
+ {
+ # Remove `markdown` attribute from opening tag.
+ $tag = preg_replace($markdown_attr_re, '', $tag);
+
+ # Check if text inside this tag must be parsed in span mode.
+ $this->mode = $attr_m[2] . $attr_m[3];
+ $span_mode = $this->mode == 'span' || $this->mode != 'block' &&
+ preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag);
+
+ # Calculate indent before tag.
+ if (preg_match('/(?:^|\n)( *?)(?! ).*?$/', $block_text, $matches)) {
+ $strlen = $this->utf8_strlen;
+ $indent = $strlen($matches[1], 'UTF-8');
+ } else {
+ $indent = 0;
+ }
+
+ # End preceding block with this tag.
+ $block_text .= $tag;
+ $parsed .= $this->$hash_method($block_text);
+
+ # Get enclosing tag name for the ParseMarkdown function.
+ # (This pattern makes $tag_name_re safe without quoting.)
+ preg_match('/^<([\w:$]*)\b/', $tag, $matches);
+ $tag_name_re = $matches[1];
+
+ # Parse the content using the HTML-in-Markdown parser.
+ list ($block_text, $text)
+ = $this->_hashHTMLBlocks_inMarkdown($text, $indent,
+ $tag_name_re, $span_mode);
+
+ # Outdent markdown text.
+ if ($indent > 0) {
+ $block_text = preg_replace("/^[ ]{1,$indent}/m", "",
+ $block_text);
+ }
+
+ # Append tag content to parsed text.
+ if (!$span_mode) $parsed .= "\n\n$block_text\n\n";
+ else $parsed .= "$block_text";
+
+ # Start over a new block.
+ $block_text = "";
+ }
+ else $block_text .= $tag;
+ }
+
+ } while ($depth > 0);
+
+ #
+ # Hash last block text that wasn't processed inside the loop.
+ #
+ $parsed .= $this->$hash_method($block_text);
+
+ return array($parsed, $text);
+ }
+
+
+ function hashClean($text) {
+ #
+ # Called whenever a tag must be hashed when a function insert a "clean" tag
+ # in $text, it pass through this function and is automaticaly escaped,
+ # blocking invalid nested overlap.
+ #
+ return $this->hashPart($text, 'C');
+ }
+
+ function _doAnchors_inline_callback($matches) {
+ // $whole_match = $matches[1];
+ $link_text = $this->runSpanGamut($matches[2]);
+ $url = $matches[3] == '' ? $matches[4] : $matches[3];
+ $title =& $matches[7];
+
+ $url = $this->encodeAttribute($url);
+
+ $result = "encodeAttribute($title);
+ $result .= " title=\"$title\"";
+ }
+
+ if ($this->el_enable && preg_match('/^https?\:\/\//', $url) && !preg_match('/^https?\:\/\/'.$this->el_local_domain.'/', $url)) {
+ if ($this->el_new_window) {
+ $result .= ' target="_blank"';
+ }
+
+ if ($this->el_css_class) {
+ $result .= ' class="'.$this->el_css_class.'"';
+ }
+ }
+
+ $link_text = $this->runSpanGamut($link_text);
+ $result .= ">$link_text";
+
+ return $this->hashPart($result);
+ }
+
+ function _doAnchors_reference_callback($matches) {
+ $whole_match = $matches[1];
+ $link_text = $matches[2];
+ $link_id =& $matches[3];
+ $result = '';
+
+ if ($link_id == "") {
+ # for shortcut links like [this][] or [this].
+ $link_id = $link_text;
+ }
+
+ # lower-case and turn embedded newlines into spaces
+ $link_id = strtolower($link_id);
+ $link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
+
+ if (isset($this->urls[$link_id])) {
+ $url = $this->urls[$link_id];
+ $url = $this->encodeAttribute($url);
+
+ $result = "titles[$link_id] ) ) {
+ $title = $this->titles[$link_id];
+ $title = $this->encodeAttribute($title);
+ $result .= " title=\"$title\"";
+ }
+
+ if ($this->el_enable && preg_match('/^https?\:\/\//', $url) && !preg_match('/^https?\:\/\/'.$this->el_local_domain.'/', $url)) {
+ if ($this->el_new_window) {
+ $result .= ' target="_blank"';
+ }
+
+ if ($this->el_css_class) {
+ $result .= ' class="'.$this->el_css_class.'"';
+ }
+ }
+
+ $link_text = $this->runSpanGamut($link_text);
+ $result .= ">$link_text";
+ $result = $this->hashPart($result);
+ }
+ else {
+ $result = $whole_match;
+ }
+ return $result;
+ }
+
+ function doHeaders($text) {
+ #
+ # Redefined to add id attribute support.
+ #
+ # Setext-style headers:
+ # Header 1 {#header1}
+ # ========
+ #
+ # Header 2 {#header2}
+ # --------
+ #
+ $text = preg_replace_callback(
+ '{
+ (^.+?) # $1: Header text
+ (?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})? # $2: Id attribute
+ [ ]*\n(=+|-+)[ ]*\n+ # $3: Header footer
+ }mx',
+ array(&$this, '_doHeaders_callback_setext'), $text);
+
+ # atx-style headers:
+ # # Header 1 {#header1}
+ # ## Header 2 {#header2}
+ # ## Header 2 with closing hashes ## {#header3}
+ # ...
+ # ###### Header 6 {#header2}
+ #
+ $text = preg_replace_callback('{
+ ^(\#{1,6}) # $1 = string of #\'s
+ [ ]*
+ (.+?) # $2 = Header text
+ [ ]*
+ \#* # optional closing #\'s (not counted)
+ (?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})? # id attribute
+ [ ]*
+ \n+
+ }xm',
+ array(&$this, '_doHeaders_callback_atx'), $text);
+
+ return $text;
+ }
+ function _doHeaders_attr($attr) {
+ if (empty($attr)) return "";
+ return " id=\"$attr\"";
+ }
+ function _doHeaders_callback_setext($matches) {
+ if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
+ return $matches[0];
+ $level = $matches[3]{0} == '=' ? 1 : 2;
+ $attr = $this->_doHeaders_attr($id =& $matches[2]);
+ $body = $this->runSpanGamut($matches[1]);
+ $body = $this->_doHeaders_selflink($id, $body);
+
+ $block = "$body ";
+ return "\n" . $this->hashBlock($block) . "\n\n";
+ }
+ function _doHeaders_callback_atx($matches) {
+ $level = strlen($matches[1]);
+ $attr = $this->_doHeaders_attr($id =& $matches[3]);
+ $body = $this->runSpanGamut($matches[2]);
+ $body = $this->_doHeaders_selflink($id, $body);
+
+ $block = "$body ";
+ return "\n" . $this->hashBlock($block) . "\n\n";
+ }
+ function _doHeaders_selflink($id, $body) {
+ if (!empty($id)) {
+ $link = 'ha_class) {
+ $link .= ' class="'.$this->ha_class.'"';
+ }
+
+ $link .= '>'.$this->ha_text.'';
+
+ $body .= $link;
+ }
+
+ return $body;
+ }
+
+
+ function doTables($text) {
+ #
+ # Form HTML tables.
+ #
+ $less_than_tab = $this->tab_width - 1;
+ #
+ # Find tables with leading pipe.
+ #
+ # | Header 1 | Header 2
+ # | -------- | --------
+ # | Cell 1 | Cell 2
+ # | Cell 3 | Cell 4
+ #
+ $text = preg_replace_callback('
+ {
+ ^ # Start of a line
+ [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
+ [|] # Optional leading pipe (present)
+ (.+) \n # $1: Header row (at least one pipe)
+
+ [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
+ [|] ([ ]*[-:]+[-| :]*) \n # $2: Header underline
+
+ ( # $3: Cells
+ (?>
+ [ ]* # Allowed whitespace.
+ [|] .* \n # Row content.
+ )*
+ )
+ (?=\n|\Z) # Stop at final double newline.
+ }xm',
+ array(&$this, '_doTable_leadingPipe_callback'), $text);
+
+ #
+ # Find tables without leading pipe.
+ #
+ # Header 1 | Header 2
+ # -------- | --------
+ # Cell 1 | Cell 2
+ # Cell 3 | Cell 4
+ #
+ $text = preg_replace_callback('
+ {
+ ^ # Start of a line
+ [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
+ (\S.*[|].*) \n # $1: Header row (at least one pipe)
+
+ [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
+ ([-:]+[ ]*[|][-| :]*) \n # $2: Header underline
+
+ ( # $3: Cells
+ (?>
+ .* [|] .* \n # Row content
+ )*
+ )
+ (?=\n|\Z) # Stop at final double newline.
+ }xm',
+ array(&$this, '_DoTable_callback'), $text);
+
+ return $text;
+ }
+ function _doTable_leadingPipe_callback($matches) {
+ $head = $matches[1];
+ $underline = $matches[2];
+ $content = $matches[3];
+
+ # Remove leading pipe for each row.
+ $content = preg_replace('/^ *[|]/m', '', $content);
+
+ return $this->_doTable_callback(array($matches[0], $head, $underline, $content));
+ }
+ function _doTable_callback($matches) {
+ $head = $matches[1];
+ $underline = $matches[2];
+ $content = $matches[3];
+
+ # Remove any tailing pipes for each line.
+ $head = preg_replace('/[|] *$/m', '', $head);
+ $underline = preg_replace('/[|] *$/m', '', $underline);
+ $content = preg_replace('/[|] *$/m', '', $content);
+
+ # Reading alignement from header underline.
+ $separators = preg_split('/ *[|] */', $underline);
+ foreach ($separators as $n => $s) {
+ if (preg_match('/^ *-+: *$/', $s)) $attr[$n] = ' align="right"';
+ else if (preg_match('/^ *:-+: *$/', $s))$attr[$n] = ' align="center"';
+ else if (preg_match('/^ *:-+ *$/', $s)) $attr[$n] = ' align="left"';
+ else $attr[$n] = '';
+ }
+
+ # Parsing span elements, including code spans, character escapes,
+ # and inline HTML tags, so that pipes inside those gets ignored.
+ $head = $this->parseSpan($head);
+ $headers = preg_split('/ *[|] */', $head);
+ $col_count = count($headers);
+
+ # Write column headers.
+ $text = "\n";
+ $text .= "\n";
+ $text .= "\n";
+ foreach ($headers as $n => $header)
+ $text .= " ".$this->runSpanGamut(trim($header))." \n";
+ $text .= " \n";
+ $text .= "\n";
+
+ # Split content by row.
+ $rows = explode("\n", trim($content, "\n"));
+
+ $text .= "\n";
+ foreach ($rows as $row) {
+ # Parsing span elements, including code spans, character escapes,
+ # and inline HTML tags, so that pipes inside those gets ignored.
+ $row = $this->parseSpan($row);
+
+ # Split row by cell.
+ $row_cells = preg_split('/ *[|] */', $row, $col_count);
+ $row_cells = array_pad($row_cells, $col_count, '');
+
+ $text .= "\n";
+ foreach ($row_cells as $n => $cell)
+ $text .= " ".$this->runSpanGamut(trim($cell))." \n";
+ $text .= " \n";
+ }
+ $text .= "\n";
+ $text .= "
";
+
+ return $this->hashBlock($text) . "\n";
+ }
+
+
+ function doDefLists($text) {
+ #
+ # Form HTML definition lists.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # Re-usable pattern to match any entire dl list:
+ $whole_list_re = '(?>
+ ( # $1 = whole list
+ ( # $2
+ [ ]{0,'.$less_than_tab.'}
+ ((?>.*\S.*\n)+) # $3 = defined term
+ \n?
+ [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+ )
+ (?s:.+?)
+ ( # $4
+ \z
+ |
+ \n{2,}
+ (?=\S)
+ (?! # Negative lookahead for another term
+ [ ]{0,'.$less_than_tab.'}
+ (?: \S.*\n )+? # defined term
+ \n?
+ [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+ )
+ (?! # Negative lookahead for another definition
+ [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+ )
+ )
+ )
+ )'; // mx
+
+ $text = preg_replace_callback('{
+ (?>\A\n?|(?<=\n\n))
+ '.$whole_list_re.'
+ }mx',
+ array(&$this, '_doDefLists_callback'), $text);
+
+ return $text;
+ }
+ function _doDefLists_callback($matches) {
+ # Re-usable patterns to match list item bullets and number markers:
+ $list = $matches[1];
+
+ # Turn double returns into triple returns, so that we can make a
+ # paragraph for the last item in a list, if necessary:
+ $result = trim($this->processDefListItems($list));
+ $result = "\n" . $result . "\n
";
+ return $this->hashBlock($result) . "\n\n";
+ }
+
+
+ function processDefListItems($list_str) {
+ #
+ # Process the contents of a single definition list, splitting it
+ # into individual term and definition list items.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # trim trailing blank lines:
+ $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
+
+ # Process definition terms.
+ $list_str = preg_replace_callback('{
+ (?>\A\n?|\n\n+) # leading line
+ ( # definition terms = $1
+ [ ]{0,'.$less_than_tab.'} # leading whitespace
+ (?![:][ ]|[ ]) # negative lookahead for a definition
+ # mark (colon) or more whitespace.
+ (?> \S.* \n)+? # actual term (not whitespace).
+ )
+ (?=\n?[ ]{0,3}:[ ]) # lookahead for following line feed
+ # with a definition mark.
+ }xm',
+ array(&$this, '_processDefListItems_callback_dt'), $list_str);
+
+ # Process actual definitions.
+ $list_str = preg_replace_callback('{
+ \n(\n+)? # leading line = $1
+ ( # marker space = $2
+ [ ]{0,'.$less_than_tab.'} # whitespace before colon
+ [:][ ]+ # definition mark (colon)
+ )
+ ((?s:.+?)) # definition text = $3
+ (?= \n+ # stop at next definition mark,
+ (?: # next term or end of text
+ [ ]{0,'.$less_than_tab.'} [:][ ] |
+ 0) {
+ $term = preg_replace($anchor_regexp, '', $term);
+ $id = ' id="'.trim($id[1]).'"';
+ }
+
+ if (count($id) === 0) {
+ $id = '';
+ }
+
+ $term = $this->runSpanGamut(trim($term));
+ $text .= "\n" . $term . " ";
+ }
+ return $text . "\n";
+ }
+ function _processDefListItems_callback_dd($matches) {
+ $leading_line = $matches[1];
+ $marker_space = $matches[2];
+ $def = $matches[3];
+
+ if ($leading_line || preg_match('/\n{2,}/', $def)) {
+ # Replace marker with the appropriate whitespace indentation
+ $def = str_repeat(' ', strlen($marker_space)) . $def;
+ $def = $this->runBlockGamut($this->outdent($def . "\n\n"));
+ $def = "\n". $def ."\n";
+ }
+ else {
+ $def = rtrim($def);
+ $def = $this->runSpanGamut($this->outdent($def));
+ }
+
+ return "\n " . $def . " \n";
+ }
+
+
+ function doFencedCodeBlocks($text) {
+ #
+ # Adding the fenced code block syntax to regular Markdown:
+ #
+ # ~~~
+ # Code block
+ # ~~~
+ #
+ $less_than_tab = $this->tab_width;
+
+ $text = preg_replace_callback('{
+ (?:\n|\A)
+ # 1: Opening marker
+ (
+ ~{3,} # Marker: three tilde or more.
+ )
+ [ ]* \n # Whitespace and newline following marker.
+
+ # 2: Content
+ (
+ (?>
+ (?!\1 [ ]* \n) # Not a closing marker.
+ .*\n+
+ )+
+ )
+
+ # Closing marker.
+ \1 [ ]* \n
+ }xm',
+ array(&$this, '_doFencedCodeBlocks_callback'), $text);
+
+ return $text;
+ }
+ function _doFencedCodeBlocks_callback($matches) {
+ $codeblock = $matches[2];
+ $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
+ $codeblock = preg_replace_callback('/^\n+/',
+ array(&$this, '_doFencedCodeBlocks_newlines'), $codeblock);
+ $codeblock = "$codeblock
";
+ return "\n\n".$this->hashBlock($codeblock)."\n\n";
+ }
+ function _doFencedCodeBlocks_newlines($matches) {
+ return str_repeat("
empty_element_suffix",
+ strlen($matches[0]));
+ }
+
+
+ #
+ # Redefining emphasis markers so that emphasis by underscore does not
+ # work in the middle of a word.
+ #
+ var $em_relist = array(
+ '' => '(?:(? '(?<=\S)(? '(?<=\S)(? '(?:(? '(?<=\S)(? '(?<=\S)(? '(?:(? '(?<=\S)(? '(?<=\S)(? tags
+ #
+ # Strip leading and trailing lines:
+ $text = preg_replace('/\A\n+|\n+\z/', '', $text);
+
+ $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
+
+ #
+ # Wrap tags and unhashify HTML blocks
+ #
+ foreach ($grafs as $key => $value) {
+ $value = trim($this->runSpanGamut($value));
+
+ # Check if this should be enclosed in a paragraph.
+ # Clean tag hashes & block tag hashes are left alone.
+ $is_p = !preg_match('/^B\x1A[0-9]+B|^C\x1A[0-9]+C$/', $value);
+
+ if ($is_p) {
+ $value = "
$value
";
+ }
+ $grafs[$key] = $value;
+ }
+
+ # Join grafs in one text, then unhash HTML tags.
+ $text = implode("\n\n", $grafs);
+
+ # Finish by removing any tag hashes still present in $text.
+ $text = $this->unhash($text);
+
+ return $text;
+ }
+
+
+ ### Footnotes
+
+ function stripFootnotes($text) {
+ #
+ # Strips link definitions from text, stores the URLs and titles in
+ # hash references.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # Link defs are in the form: [^id]: url "optional title"
+ $text = preg_replace_callback('{
+ ^[ ]{0,'.$less_than_tab.'}\[\^(.+?)\][ ]?: # note_id = $1
+ [ ]*
+ \n? # maybe *one* newline
+ ( # text = $2 (no blank lines allowed)
+ (?:
+ .+ # actual text
+ |
+ \n # newlines but
+ (?!\[\^.+?\]:\s)# negative lookahead for footnote marker.
+ (?!\n+[ ]{0,3}\S)# ensure line is not blank and followed
+ # by non-indented content
+ )*
+ )
+ }xm',
+ array(&$this, '_stripFootnotes_callback'),
+ $text);
+ return $text;
+ }
+ function _stripFootnotes_callback($matches) {
+ $note_id = $this->fn_id_prefix . $matches[1];
+ $this->footnotes[$note_id] = $this->outdent($matches[2]);
+ return ''; # String that will replace the block
+ }
+
+
+ function doFootnotes($text) {
+ #
+ # Replace footnote references in $text [^id] with a special text-token
+ # which will be replaced by the actual footnote marker in appendFootnotes.
+ #
+ if (!$this->in_anchor) {
+ $text = preg_replace('{\[\^(.+?)\]}', "F\x1Afn:\\1\x1A:", $text);
+ }
+ return $text;
+ }
+
+
+ function appendFootnotes($text) {
+ #
+ # Append footnote list to text.
+ #
+ $text = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}',
+ array(&$this, '_appendFootnotes_callback'), $text);
+
+ if (!empty($this->footnotes_ordered)) {
+ $text .= "\n\n";
+ $text .= "\n";
+ $text .= "
fn_backlink_class != "") {
+ $class = $this->fn_backlink_class;
+ $class = $this->encodeAttribute($class);
+ $attr .= " class=\"$class\"";
+ }
+ if ($this->fn_backlink_title != "") {
+ $title = $this->fn_backlink_title;
+ $title = $this->encodeAttribute($title);
+ $attr .= " title=\"$title\"";
+ }
+ $num = 0;
+
+ while (!empty($this->footnotes_ordered)) {
+ $footnote = reset($this->footnotes_ordered);
+ $note_id = key($this->footnotes_ordered);
+ unset($this->footnotes_ordered[$note_id]);
+
+ $footnote .= "\n"; # Need to append newline before parsing.
+ $footnote = $this->runBlockGamut("$footnote\n");
+ $footnote = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}',
+ array(&$this, '_appendFootnotes_callback'), $footnote);
+
+ $attr = str_replace("%%", ++$num, $attr);
+ $note_id = $this->encodeAttribute($note_id);
+
+ # Add backlink to last paragraph; create new paragraph if needed.
+ $backlink = "↩";
+ if (preg_match('{$}', $footnote)) {
+ $footnote = substr($footnote, 0, -4) . " $backlink";
+ } else {
+ $footnote .= "\n\n$backlink
";
+ }
+
+ $text .= "\n";
+ $text .= $footnote . "\n";
+ $text .= " \n\n";
+ }
+
+ $text .= "\n";
+ $text .= "";
+ }
+ return $text;
+ }
+ function _appendFootnotes_callback($matches) {
+ $node_id = $this->fn_id_prefix . $matches[1];
+
+ # Create footnote marker only if it has a corresponding footnote *and*
+ # the footnote hasn't been used by another marker.
+ if (isset($this->footnotes[$node_id])) {
+ # Transfert footnote content to the ordered list.
+ $this->footnotes_ordered[$node_id] = $this->footnotes[$node_id];
+ unset($this->footnotes[$node_id]);
+
+ $num = $this->footnote_counter++;
+ $attr = " rel=\"footnote\"";
+ if ($this->fn_link_class != "") {
+ $class = $this->fn_link_class;
+ $class = $this->encodeAttribute($class);
+ $attr .= " class=\"$class\"";
+ }
+ if ($this->fn_link_title != "") {
+ $title = $this->fn_link_title;
+ $title = $this->encodeAttribute($title);
+ $attr .= " title=\"$title\"";
+ }
+
+ $attr = str_replace("%%", $num, $attr);
+ $node_id = $this->encodeAttribute($node_id);
+
+ return
+ "".
+ "$num".
+ "";
+ }
+
+ return "[^".$matches[1]."]";
+ }
+
+
+ ### Abbreviations ###
+
+ function stripAbbreviations($text) {
+ #
+ # Strips abbreviations from text, stores titles in hash references.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # Link defs are in the form: [id]*: url "optional title"
+ $text = preg_replace_callback('{
+ ^[ ]{0,'.$less_than_tab.'}\*\[(.+?)\][ ]?: # abbr_id = $1
+ (.*) # text = $2 (no blank lines allowed)
+ }xm',
+ array(&$this, '_stripAbbreviations_callback'),
+ $text);
+ return $text;
+ }
+ function _stripAbbreviations_callback($matches) {
+ $abbr_word = $matches[1];
+ $abbr_desc = $matches[2];
+ if ($this->abbr_word_re)
+ $this->abbr_word_re .= '|';
+ $this->abbr_word_re .= preg_quote($abbr_word);
+ $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
+ return ''; # String that will replace the block
+ }
+
+
+ function doAbbreviations($text) {
+ #
+ # Find defined abbreviations in text and wrap them in elements.
+ #
+ if ($this->abbr_word_re) {
+ // cannot use the /x modifier because abbr_word_re may
+ // contain significant spaces:
+ $text = preg_replace_callback('{'.
+ '(?abbr_word_re.')'.
+ '(?![\w\x1A])'.
+ '}',
+ array(&$this, '_doAbbreviations_callback'), $text);
+ }
+ return $text;
+ }
+ function _doAbbreviations_callback($matches) {
+ $abbr = $matches[0];
+ if (isset($this->abbr_desciptions[$abbr])) {
+ $desc = $this->abbr_desciptions[$abbr];
+ if (empty($desc)) {
+ return $this->hashPart("$abbr");
+ } else {
+ $desc = $this->encodeAttribute($desc);
+ return $this->hashPart("$abbr");
+ }
+ } else {
+ return $matches[0];
+ }
+ }
+
+}
+
+
+/*
+
+PHP Markdown Extra
+==================
+
+Description
+-----------
+
+This is a PHP port of the original Markdown formatter written in Perl
+by John Gruber. This special "Extra" version of PHP Markdown features
+further enhancements to the syntax for making additional constructs
+such as tables and definition list.
+
+Markdown is a text-to-HTML filter; it translates an easy-to-read /
+easy-to-write structured text format into HTML. Markdown's text format
+is most similar to that of plain text email, and supports features such
+as headers, *emphasis*, code blocks, blockquotes, and links.
+
+Markdown's syntax is designed not as a generic markup language, but
+specifically to serve as a front-end to (X)HTML. You can use span-level
+HTML tags anywhere in a Markdown document, and you can use block level
+HTML tags (like and as well).
+
+For more information about Markdown's syntax, see:
+
+
+
+
+Bugs
+----
+
+To file bug reports please send email to:
+
+
+
+Please include with your report: (1) the example input; (2) the output you
+expected; (3) the output Markdown actually produced.
+
+
+Version History
+---------------
+
+See the readme file for detailed release notes for this version.
+
+
+Copyright and License
+---------------------
+
+PHP Markdown & Extra
+Copyright (c) 2004-2008 Michel Fortin
+
+All rights reserved.
+
+Based on Markdown
+Copyright (c) 2003-2006 John Gruber
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* Neither the name "Markdown" nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+This software is provided by the copyright holders and contributors "as
+is" and any express or implied warranties, including, but not limited
+to, the implied warranties of merchantability and fitness for a
+particular purpose are disclaimed. In no event shall the copyright owner
+or contributors be liable for any direct, indirect, incidental, special,
+exemplary, or consequential damages (including, but not limited to,
+procurement of substitute goods or services; loss of use, data, or
+profits; or business interruption) however caused and on any theory of
+liability, whether in contract, strict liability, or tort (including
+negligence or otherwise) arising in any way out of the use of this
+software, even if advised of the possibility of such damage.
+
+*/
+?>
diff --git a/mod/contacts.php b/mod/contacts.php
index 4d5311b69..834b1c63d 100644
--- a/mod/contacts.php
+++ b/mod/contacts.php
@@ -261,6 +261,14 @@ function contacts_content(&$a) {
$o .= replace_macros($tpl,array(
'$header' => t('Contact Editor'),
+ '$submit' => t('Submit'),
+ '$lbl_vis1' => t('Profile Visibility'),
+ '$lbl_vis2' => sprintf( t('Please choose the profile you would like to display to %s when viewing your profile securely.'), $r[0]['name']),
+ '$lbl_info1' => t('Contact Information / Notes'),
+ '$lbl_rep1' => t('Online Reputation'),
+ '$lbl_rep2' => t('Occasionally your friends may wish to inquire about this person\'s online legitimacy.'),
+ '$lbl_rep3' => t('You may help them choose whether or not to interact with this person by providing a reputation to guide them.'),
+ '$lbl_rep4' => t('Please take a moment to elaborate on this selection if you feel it could be helpful to others.'),
'$visit' => t('Visit $name\'s profile'),
'$blockunblock' => t('Block/Unblock contact'),
'$ignorecont' => t('Ignore contact'),
diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php
index 2db745d25..02437ec36 100644
--- a/mod/dfrn_confirm.php
+++ b/mod/dfrn_confirm.php
@@ -434,6 +434,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$arr['object'] .= '' . "\n";
$arr['last-child'] = 1;
+ $arr['allow_cid'] = $user[0]['allow_cid'];
+ $arr['allow_gid'] = $user[0]['allow_gid'];
+ $arr['deny_cid'] = $user[0]['deny_cid'];
+ $arr['deny_gid'] = $user[0]['deny_gid'];
+
$i = item_store($arr);
if($i)
proc_run('php',"include/notifier.php","activity","$i");
diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php
index cd67df1d7..f6f68d348 100644
--- a/mod/dfrn_notify.php
+++ b/mod/dfrn_notify.php
@@ -10,6 +10,12 @@ function dfrn_notify_post(&$a) {
$data = ((x($_POST,'data')) ? $_POST['data'] : '');
$key = ((x($_POST,'key')) ? $_POST['key'] : '');
$dissolve = ((x($_POST,'dissolve')) ? intval($_POST['dissolve']) : 0);
+ $perm = ((x($_POST,'perm')) ? notags(trim($_POST['perm'])) : 'r');
+
+ $writable = (-1);
+ if($dfrn_version >= 2.21) {
+ $writable = (($perm === 'rw') ? 1 : 0);
+ }
$direction = (-1);
if(strpos($dfrn_id,':') == 1) {
@@ -74,6 +80,14 @@ function dfrn_notify_post(&$a) {
$importer = $r[0];
+ if(($writable != (-1)) && ($writable != $importer['writable'])) {
+ q("UPDATE `contact` SET `writable` = %d WHERE `id` = %d LIMIT 1",
+ intval($writable),
+ intval($importer['id'])
+ );
+ $importer['writable'] = $writable;
+ }
+
logger('dfrn_notify: received notify from ' . $importer['name'] . ' for ' . $importer['username']);
logger('dfrn_notify: data: ' . $data, LOGGER_DATA);
@@ -118,8 +132,6 @@ function dfrn_notify_post(&$a) {
}
-
-
if($importer['readonly']) {
// We aren't receiving stuff from this person. But we will quietly ignore them
// rather than a blatant "go away" message.
diff --git a/mod/dfrn_poll.php b/mod/dfrn_poll.php
index 2ccfadd03..2da1a30fa 100644
--- a/mod/dfrn_poll.php
+++ b/mod/dfrn_poll.php
@@ -16,6 +16,7 @@ function dfrn_poll_init(&$a) {
$challenge = ((x($_GET,'challenge')) ? $_GET['challenge'] : '');
$sec = ((x($_GET,'sec')) ? $_GET['sec'] : '');
$dfrn_version = ((x($_GET,'dfrn_version')) ? (float) $_GET['dfrn_version'] : 2.0);
+ $perm = ((x($_GET,'perm')) ? $_GET['perm'] : 'r');
$direction = (-1);
@@ -183,8 +184,9 @@ function dfrn_poll_post(&$a) {
$challenge = ((x($_POST,'challenge')) ? $_POST['challenge'] : '');
$url = ((x($_POST,'url')) ? $_POST['url'] : '');
$sec = ((x($_POST,'sec')) ? $_POST['sec'] : '');
- $ptype = ((x($_POST,'type')) ? $_POST['type'] : '');
+ $ptype = ((x($_POST,'type')) ? $_POST['type'] : '');
$dfrn_version = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0);
+ $perm = ((x($_POST,'perm')) ? $_POST['perm'] : 'r');
if($ptype === 'profile-check') {
@@ -295,6 +297,7 @@ function dfrn_poll_post(&$a) {
if(! count($r))
killme();
+ $contact = $r[0];
$owner_uid = $r[0]['uid'];
$contact_id = $r[0]['id'];
@@ -328,6 +331,23 @@ function dfrn_poll_post(&$a) {
// NOTREACHED
}
else {
+
+ // Update the writable flag if it changed
+ logger('dfrn_poll: post request feed: ' . print_r($_POST,true),LOGGER_DATA);
+ if($dfrn_version >= 2.21) {
+ if($perm === 'rw')
+ $writable = 1;
+ else
+ $writable = 0;
+
+ if($writable != $contact['writable']) {
+ q("UPDATE `contact` SET `writable` = %d WHERE `id` = %d LIMIT 1",
+ intval($writable),
+ intval($contact_id)
+ );
+ }
+ }
+
header("Content-type: application/atom+xml");
$o = get_feed_for($a,$dfrn_id, $a->argv[1], $last_update, $direction);
echo $o;
@@ -344,6 +364,7 @@ function dfrn_poll_content(&$a) {
$destination_url = ((x($_GET,'destination_url')) ? $_GET['destination_url'] : '');
$sec = ((x($_GET,'sec')) ? $_GET['sec'] : '');
$dfrn_version = ((x($_GET,'dfrn_version')) ? (float) $_GET['dfrn_version'] : 2.0);
+ $perm = ((x($_GET,'perm')) ? $_GET['perm'] : 'r');
$direction = (-1);
if(strpos($dfrn_id,':') == 1) {
diff --git a/mod/display.php b/mod/display.php
index f74137e0e..da4566dc4 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -22,9 +22,6 @@ function display_content(&$a) {
$groups = array();
- $tab = 'posts';
-
-
$contact = null;
$remote_contact = false;
@@ -48,6 +45,11 @@ function display_content(&$a) {
}
}
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
+ intval($a->profile['uid'])
+ );
+ if(count($r))
+ $a->page_contact = $r[0];
$sql_extra = "
AND `allow_cid` = ''
@@ -88,7 +90,7 @@ function display_content(&$a) {
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
- `contact`.`network`, `contact`.`thumb`, `contact`.`self`,
+ `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
@@ -102,17 +104,6 @@ function display_content(&$a) {
);
-
- $cmnt_tpl = load_view_file('view/comment_item.tpl');
- $like_tpl = load_view_file('view/like_noshare.tpl');
- $tpl = load_view_file('view/wall_item.tpl');
- $wallwall = load_view_file('view/wallwall_item.tpl');
-
- $return_url = $_SESSION['return_url'] = $a->cmd;
-
- $alike = array();
- $dlike = array();
-
if(count($r)) {
if((local_user()) && (local_user() == $a->profile['uid'])) {
@@ -122,179 +113,10 @@ function display_content(&$a) {
);
}
- foreach($r as $item) {
- like_puller($a,$item,$alike,'like');
- like_puller($a,$item,$dlike,'dislike');
- }
+ require_once('include/conversation.php');
- $author_contacts = extract_item_authors($r,$a->profile['uid']);
+ $o .= conversation($a,$r,'display', false);
- foreach($r as $item) {
-
- $template = $tpl;
-
- $comment = '';
- $owner_url = '';
- $owner_photo = '';
- $owner_name = '';
-
- $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
-
- if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE)))
- && ($item['id'] != $item['parent']))
- continue;
-
- $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
- || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
- ? ''
- : '');
-
- if(can_write_wall($a,$a->profile['uid'])) {
- if($item['id'] == $item['parent']) {
- $likebuttons = replace_macros($like_tpl,array(
- '$id' => $item['id'],
- '$likethis' => t("I like this \x28toggle\x29"),
- '$nolike' => t("I don't like this \x28toggle\x29"),
- '$share' => t('Share'),
- '$wait' => t('Please wait')
- ));
- }
- if($item['last-child']) {
- $comment = replace_macros($cmnt_tpl,array(
- '$return_path' => '',
- '$jsreload' => $_SESSION['return_url'],
- '$type' => 'wall-comment',
- '$id' => $item['item_id'],
- '$parent' => $item['parent'],
- '$profile_uid' => $a->profile['uid'],
- '$mylink' => $contact['url'],
- '$mytitle' => t('This is you'),
- '$myphoto' => $contact['thumb'],
- '$ww' => ''
- ));
- }
- }
-
-
- $profile_url = $item['url'];
- $sparkle = '';
-
-
- // Top-level wall post not written by the wall owner (wall-to-wall)
- // First figure out who owns it.
-
- $osparkle = '';
-
- if(($item['parent'] == $item['item_id']) && (! $item['self'])) {
-
- if($item['type'] === 'wall') {
- // I do. Put me on the left of the wall-to-wall notice.
- $owner_url = $a->contact['url'];
- $owner_photo = $a->contact['thumb'];
- $owner_name = $a->contact['name'];
- $template = $wallwall;
- $commentww = 'ww';
- }
- if($item['type'] === 'remote' && ($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';
- }
-
-
- }
- }
-
- $diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true);
-
- $profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
- $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $item['thumb']);
-
- $edpost = '';
- if((local_user()) && ($item['uid'] == local_user()) && ($item['id'] == $item['parent']) && (intval($item['wall']) == 1))
- $edpost = '';
- // Can we use our special contact URL for this author?
-
- if(strlen($item['author-link'])) {
- $profile_link = $item['author-link'];
- if(link_compare($item['author-link'],$item['url']) && ($item['network'] === 'dfrn') && (! $item['self'])) {
- $profile_link = $redirect_url;
- $sparkle = ' sparkle';
- }
- elseif(isset($author_contacts[$item['author-link']])) {
- $profile_link = $a->get_baseurl() . '/redir/' . $author_contacts[$item['author-link']];
- $sparkle = ' sparkle';
- }
- }
-
- if(($item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
- $drop = replace_macros(load_view_file('view/wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
- else
- $drop = replace_macros(load_view_file('view/wall_fake_drop.tpl'), array('$id' => $item['id']));
-
- $like = ((isset($alike[$item['id']])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
- $dislike = ((isset($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 = (($item['parent'] != $item['item_id']) ? ' comment' : '');
-
- if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
- $indent .= ' shiny';
-
-
- $tmp_item = replace_macros($template,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$olinktitle' => t('View $owner_name\'s profile'),
- '$to' => t('to'),
- '$wall' => t('Wall-to-Wall'),
- '$vwall' => t('via Wall-To-Wall:'),
- '$item_photo_menu' => item_photo_menu($item),
- '$profile_url' => $profile_link,
- '$name' => $profile_name,
- '$sparkle' => $sparkle,
- '$osparkle' => $osparkle,
- '$thumb' => $profile_avatar,
- '$title' => $item['title'],
- '$body' => smilies(bbcode($item['body'])),
- '$ago' => 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,
- '$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'];
-
-
- }
}
else {
$r = q("SELECT `id` FROM `item` WHERE `id` = '%s' OR `uri` = '%s' LIMIT 1",
diff --git a/mod/follow.php b/mod/follow.php
index f30ecdc92..04858ce52 100644
--- a/mod/follow.php
+++ b/mod/follow.php
@@ -195,6 +195,9 @@ function follow_post(&$a) {
if(! x($vcard,'photo'))
$vcard['photo'] = $a->get_baseurl() . '/images/default-profile.jpg' ;
+
+ $writeable = ((($network === 'stat') && ($notify)) ? 1 : 0);
+
// check if we already have a contact
// the poll url is more reliable than the profile url, as we may have
// indirect links or webfinger links
@@ -217,8 +220,8 @@ function follow_post(&$a) {
else {
// create contact record
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
- `blocked`, `readonly`, `pending` )
- VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, 0, 0, 0 ) ",
+ `writable`, `blocked`, `readonly`, `pending` )
+ VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
intval(local_user()),
dbesc(datetime_convert()),
dbesc($profile),
@@ -230,7 +233,8 @@ function follow_post(&$a) {
dbesc($vcard['photo']),
dbesc($network),
intval(REL_FAN),
- intval($priority)
+ intval($priority),
+ intval($writable)
);
}
diff --git a/mod/group.php b/mod/group.php
index 3ee14dd85..591c93627 100644
--- a/mod/group.php
+++ b/mod/group.php
@@ -128,11 +128,11 @@ function group_content(&$a) {
goaway($a->get_baseurl() . '/contacts');
}
$group = $r[0];
- $ret = group_get_members($group['id']);
+ $members = group_get_members($group['id']);
$preselected = array();
- if(count($ret)) {
- foreach($ret as $p)
- $preselected[] = $p['id'];
+ if(count($members)) {
+ foreach($members as $member)
+ $preselected[] = $member['id'];
}
$drop_tpl = load_view_file('view/group_drop.tpl');
@@ -156,6 +156,13 @@ function group_content(&$a) {
));
}
+
+ $o .= '';
+ foreach($members as $member) {
+ $o .= micropro($member,true,'mpgroup');
+ }
+ $o .= '';
+
return $o;
}
\ No newline at end of file
diff --git a/mod/install.php b/mod/install.php
index 5c508e4f2..740df6ca9 100644
--- a/mod/install.php
+++ b/mod/install.php
@@ -118,6 +118,16 @@ function install_content(&$a) {
$tpl = load_view_file('view/install_db.tpl');
$o .= replace_macros($tpl, array(
+ '$lbl_01' => t('Friendika Social Network'),
+ '$lbl_02' => t('Installation'),
+ '$lbl_03' => t('In order to install Friendika we need to know how to contact your database.'),
+ '$lbl_04' => t('Please contact your hosting provider or site administrator if you have questions about these settings.'),
+ '$lbl_05' => t('The database you specify below must already exist. If it does not, please create it before continuing.'),
+ '$lbl_06' => t('Database Server Name'),
+ '$lbl_07' => t('Database Login Name'),
+ '$lbl_08' => t('Database Login Password'),
+ '$lbl_09' => t('Database Name'),
+ '$lbl_10' => t('Please select a default timezone for your website'),
'$baseurl' => $a->get_baseurl(),
'$tzselect' => ((x($_POST,'timezone')) ? select_timezone($_POST['timezone']) : select_timezone()),
'$submit' => t('Submit'),
diff --git a/mod/lostpass.php b/mod/lostpass.php
index 335a1f512..c46a57e6a 100644
--- a/mod/lostpass.php
+++ b/mod/lostpass.php
@@ -71,8 +71,15 @@ function lostpass_content(&$a) {
if($r) {
$tpl = load_view_file('view/pwdreset.tpl');
$o .= replace_macros($tpl,array(
+ '$lbl1' => t('Password Reset'),
+ '$lbl2' => t('Your password has been reset as requested.'),
+ '$lbl3' => t('Your new password is'),
+ '$lbl4' => t('Save or copy your new password - and then'),
+ '$lbl5' => '' . t('click here to login') . '.',
+ '$lbl6' => t('Your password may be changed from the Settings page after successful login.'),
'$newpass' => $new_password,
'$baseurl' => $a->get_baseurl()
+
));
notice("Your password has been reset." . EOL);
diff --git a/mod/network.php b/mod/network.php
index 42c6c0c29..1b5ea5d65 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -32,8 +32,6 @@ function network_content(&$a, $update = 0) {
$o = '';
- require_once("include/bbcode.php");
-
$contact_id = $a->cid;
$group = 0;
@@ -204,7 +202,7 @@ function network_content(&$a, $update = 0) {
// "New Item View" - show all items unthreaded in reverse created date order
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item`, `contact`
@@ -248,7 +246,7 @@ function network_content(&$a, $update = 0) {
$parents_str = implode(', ', $parents_arr);
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+ `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`
@@ -264,345 +262,17 @@ function network_content(&$a, $update = 0) {
}
}
- // find all the authors involved in remote conversations
- // We will use a local profile photo if they are one of our contacts
- // otherwise we have to get the photo from the item owner's site
+ // Set this so that the conversation function can find out contact info for our wall-wall items
+ $a->page_contact = $a->contact;
- $author_contacts = extract_item_authors($r,local_user());
+ $mode = (($nouveau) ? 'network-new' : 'network');
- $cmnt_tpl = load_view_file('view/comment_item.tpl');
- $like_tpl = load_view_file('view/like.tpl');
- $noshare_tpl = load_view_file('view/like_noshare.tpl');
- $tpl = load_view_file('view/wall_item.tpl');
- $wallwall = load_view_file('view/wallwall_item.tpl');
+ require_once('include/conversation.php');
- $alike = array();
- $dlike = array();
-
- if(count($r)) {
-
- if($nouveau) {
-
- // "New Item View" - just loop through the items and format them minimally for display
-
- $tpl = load_view_file('view/search_item.tpl');
- $droptpl = load_view_file('view/wall_fake_drop.tpl');
-
- foreach($r as $item) {
-
- $comment = '';
- $owner_url = '';
- $owner_photo = '';
- $owner_name = '';
- $sparkle = '';
-
- $profile_name = ((strlen($item['author-name'])) ? $item['author-name'] : $item['name']);
- $profile_avatar = ((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']);
- $profile_link = ((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
-
- $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
-
- if(strlen($item['author-link'])) {
- if(link_compare($item['author-link'],$item['url']) && ($item['network'] === 'dfrn') && (! $item['self'])) {
- $profile_link = $redirect_url;
- $sparkle = ' sparkle';
- }
- elseif(isset($author_contacts[$item['author-link']])) {
- $profile_link = $a->get_baseurl() . '/redir/' . $author_contacts[$item['author-link']];
- $sparkle = ' sparkle';
- }
- }
-
- $location = (($item['location']) ? '' . $item['location'] . '' : '');
- $coord = (($item['coord']) ? '' . $item['coord'] . '' : '');
- if($coord) {
- if($location)
- $location .= '
(' . $coord . ')';
- else
- $location = '' . $coord . '';
- }
-
- $drop = replace_macros($droptpl,array('$id' => $item['id']));
- $lock = '';
-
- $o .= replace_macros($tpl,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$profile_url' => $profile_link,
- '$item_photo_menu' => item_photo_menu($item),
- '$name' => $profile_name,
- '$sparkle' => $sparkle,
- '$lock' => $lock,
- '$thumb' => $profile_avatar,
- '$title' => $item['title'],
- '$body' => smilies(bbcode($item['body'])),
- '$ago' => relative_date($item['created']),
- '$location' => $location,
- '$indent' => '',
- '$owner_url' => $owner_url,
- '$owner_photo' => $owner_photo,
- '$owner_name' => $owner_name,
- '$drop' => $drop,
- '$conv' => '' . t('View in context') . ''
- ));
-
- }
- $o .= paginate($a);
-
- return $o;
-
- }
-
- // 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($r as $rr) {
- if(intval($rr['gravity']) == 6) {
- if(! x($comments,$rr['parent']))
- $comments[$rr['parent']] = 1;
- else
- $comments[$rr['parent']] += 1;
- }
- }
-
- // map all the like/dislike activities for each parent item
- // Store these in the $alike and $dlike arrays
-
- foreach($r as $item) {
- like_puller($a,$item,$alike,'like');
- like_puller($a,$item,$dlike,'dislike');
- }
-
- $comments_collapsed = false;
- $blowhard = 0;
- $blowhard_count = 0;
-
- foreach($r as $item) {
-
- $comment = '';
- $template = $tpl;
- $commentww = '';
- $sparkle = '';
- $owner_url = $owner_photo = $owner_name = '';
-
-
- // We've already parsed out like/dislike for special treatment. We can ignore them now
-
- 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($item['id'] == $item['parent']) {
- if($blowhard == $item['cid'] && (! $item['self'])) {
- $blowhard_count ++;
- if($blowhard_count == 3) {
- $o .= '' . t('See more posts like this') . '' . ' ';
- $blowhard_count = 0;
- }
-
- $comments_seen = 0;
- $comments_collapsed = false;
- }
- else
- $comments_seen ++;
-
-
- if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) {
- if(! $comments_collapsed) {
- $o .= '' . sprintf( t('See all %d comments'), $comments[$item['parent']]) . '';
- $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']))))
- ? ''
- : '');
-
-
- // Top-level wall post not written by the wall owner (wall-to-wall)
- // First figure out who owns it.
-
- $osparkle = '';
-
- if(($item['parent'] == $item['item_id']) && (! $item['self'])) {
-
- if($item['type'] === 'wall') {
- // I do. Put me on the left of the wall-to-wall notice.
- $owner_url = $a->contact['url'];
- $owner_photo = $a->contact['thumb'];
- $owner_name = $a->contact['name'];
- $template = $wallwall;
- $commentww = 'ww';
- }
- if(($item['type'] === 'remote') && (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($update)
- $return_url = $_SESSION['return_url'];
- else
- $return_url = $_SESSION['return_url'] = $a->cmd;
-
- $likebuttons = '';
- if($item['id'] == $item['parent']) {
- $likebuttons = replace_macros((($item['private']) ? $noshare_tpl : $like_tpl),array(
- '$id' => $item['id'],
- '$likethis' => t("I like this \x28toggle\x29"),
- '$nolike' => t("I don't like this \x28toggle\x29"),
- '$share' => t('Share'),
- '$wait' => t('Please wait')
- ));
- }
-
- if($item['last-child']) {
- $comment = replace_macros($cmnt_tpl,array(
- '$return_path' => '',
- '$jsreload' => '', // $_SESSION['return_url'],
- '$type' => 'net-comment',
- '$id' => $item['item_id'],
- '$parent' => $item['parent'],
- '$profile_uid' => $_SESSION['uid'],
- '$mylink' => $a->contact['url'],
- '$mytitle' => t('This is you'),
- '$myphoto' => $a->contact['thumb'],
- '$ww' => $commentww
- ));
- }
-
- $edpost = '';
- if(($item['id'] == $item['parent']) && (intval($item['wall']) == 1))
- $edpost = '';
- $drop = replace_macros(load_view_file('view/wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
-
- $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']);
- $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb);
-
- if(strlen($item['author-link'])) {
- $profile_link = $item['author-link'];
- if(link_compare($item['author-link'],$item['url']) && ($item['network'] === 'dfrn') && (! $item['self'])) {
- $profile_link = $redirect_url;
- $sparkle = ' sparkle';
- }
- elseif(isset($author_contacts[$item['author-link']])) {
- $profile_link = $a->get_baseurl() . '/redir/' . $author_contacts[$item['author-link']];
- $sparkle = ' sparkle';
- }
- }
- else
- $profile_link = $item['url'];
-
- $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 = (($item['parent'] != $item['item_id']) ? ' comment' : '');
-
- if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
- $indent .= ' shiny';
-
-
-
- // Build the HTML
-
- $tmp_item = replace_macros($template,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$olinktitle' => t('View $owner_name\'s profile'),
- '$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' => smilies(bbcode($item['body'])),
- '$ago' => 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,
- '$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'];
-
- }
- }
+ $o .= conversation($a,$r,$mode,$update);
if(! $update) {
- // if author collapsing is in force but didn't get closed, close it off now.
-
- if($blowhard_count >= 3)
- $o .= '';
-
-
$o .= paginate($a);
$o .= '' . t('Shared content is covered by the Creative Commons Attribution 3.0 license.') . '';
}
diff --git a/mod/notifications.php b/mod/notifications.php
index ed0831aab..c3f8449ed 100644
--- a/mod/notifications.php
+++ b/mod/notifications.php
@@ -147,17 +147,13 @@ function notifications_content(&$a) {
LEFT JOIN `contact` ON `register`.`uid` = `contact`.`uid`
LEFT JOIN `user` ON `register`.`uid` = `user`.`uid`;");
if(($r !== false) && (count($r))) {
- $tpl = load_view_file("view/registrations.tpl");
+ $o .= '';
foreach($r as $rr) {
- $o .= "";
- $o .= replace_macros($tpl, array(
- '$fullname' => $rr['name'],
- '$email' => $rr['email'],
- '$approvelink' => "regmod/allow/".$rr['hash'],
- '$denylink' => "regmod/deny/".$rr['hash'],
- ));
- $o .= "
";
+ $o .= '- ' . sprintf('%s (%s) : ', $rr['name'],$rr['email'])
+ . '' . t('Approve')
+ . ' -
' . t('Deny') . ' ' . "\r\n";
}
+ $o .= "
";
}
else
notice( t('No registrations.') . EOL);
diff --git a/mod/opensearch.php b/mod/opensearch.php
new file mode 100644
index 000000000..69afba75c
--- /dev/null
+++ b/mod/opensearch.php
@@ -0,0 +1,18 @@
+ $a->get_baseurl(),
+ '$nodename' => $a->get_hostname(),
+ ));
+
+ echo $o;
+
+ killme();
+
+ }
+?>
\ No newline at end of file
diff --git a/mod/parse_url.php b/mod/parse_url.php
index b3b42b6cb..a65215ca1 100644
--- a/mod/parse_url.php
+++ b/mod/parse_url.php
@@ -5,7 +5,11 @@ require_once('library/HTML5/Parser.php');
function parse_url_content(&$a) {
- $url = trim($_GET['url']);
+ logger('parse_url: ' . $_GET['url']);
+
+ $url = trim(hex2bin($_GET['url']));
+
+ logger('parse_url: ' . $url);
$text = null;
diff --git a/mod/photos.php b/mod/photos.php
index 061542c75..757b4685d 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -1105,6 +1105,8 @@ function photos_content(&$a) {
'$mylink' => $contact['url'],
'$mytitle' => t('This is you'),
'$myphoto' => $contact['thumb'],
+ '$comment' => t('Comment'),
+ '$submit' => t('Submit'),
'$ww' => ''
));
}
@@ -1257,17 +1259,14 @@ function photos_content(&$a) {
if(count($r)) {
foreach($r as $rr) {
$o .= replace_macros($tpl,array(
- '$id' => $rr['id'],
- '$photolink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname']
- . '/image/' . $rr['resource-id'],
+ '$id' => $rr['id'],
+ '$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']) == 6) ? 4 : $rr['scale']) . '.jpg',
- '$albumlink' => $a->get_baseurl() . '/photos/'
- . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']),
- '$albumname' => $rr['album'],
- '$albumalt' => t('View Album'),
- '$imgalt' => $rr['filename']
+ '$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'],
+ '$albumalt' => t('View Album'),
+ '$imgalt' => $rr['filename']
));
}
diff --git a/mod/profile.php b/mod/profile.php
index b421591f6..0a044069a 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -106,16 +106,9 @@ function profile_content(&$a, $update = 0) {
if($tab === 'profile') {
- $profile_lang = get_config('system','language');
- if(! $profile_lang)
- $profile_lang = 'en';
- if(file_exists("view/$profile_lang/profile_advanced.php"))
- require_once("view/$profile_lang/profile_advanced.php");
- else
- require_once('view/profile_advanced.php');
-
+ require_once('include/profile_advanced.php');
+ $o .= advanced_profile($a);
call_hooks('profile_advanced',$o);
-
return $o;
}
@@ -279,7 +272,7 @@ function profile_content(&$a, $update = 0) {
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
- `contact`.`thumb`, `contact`.`self`,
+ `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
@@ -295,203 +288,17 @@ function profile_content(&$a, $update = 0) {
if($is_owner && ! $update)
$o .= get_birthdays();
- $cmnt_tpl = load_view_file('view/comment_item.tpl');
- $like_tpl = load_view_file('view/like.tpl');
- $noshare_tpl = load_view_file('view/like_noshare.tpl');
+ require_once('include/conversation.php');
- $tpl = load_view_file('view/wall_item.tpl');
-
- $droptpl = load_view_file('view/wall_item_drop.tpl');
- $fakedrop = load_view_file('view/wall_fake_drop.tpl');
-
- if($update)
- $return_url = $_SESSION['return_url'];
- else
- $return_url = $_SESSION['return_url'] = $a->cmd;
-
- $alike = array();
- $dlike = array();
-
- if($r !== false && count($r)) {
-
- $comments = array();
- foreach($r as $rr) {
- if(intval($rr['gravity']) == 6) {
- if(! x($comments,$rr['parent']))
- $comments[$rr['parent']] = 1;
- else
- $comments[$rr['parent']] += 1;
- }
- }
-
- foreach($r as $item) {
- like_puller($a,$item,$alike,'like');
- like_puller($a,$item,$dlike,'dislike');
- }
-
- $comments_collapsed = false;
-
- foreach($r as $item) {
-
- $sparkle = '';
- $comment = '';
- $likebuttons = '';
-
- $template = $tpl;
-
- $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
-
- if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE)))
- && ($item['id'] != $item['parent']))
- continue;
-
- if($item['id'] == $item['parent']) {
- $comments_seen = 0;
- $comments_collapsed = false;
- }
- else
- $comments_seen ++;
+ $o .= conversation($a,$r,'profile',$update);
- if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) {
- if(! $comments_collapsed) {
- $o .= '' . sprintf( t('See all %d comments'), $comments[$item['parent']]) . '';
- $o .= ' ';
- }
-
- $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
- || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
- ? ''
- : '');
-
- if(can_write_wall($a,$a->profile['profile_uid'])) {
- if($item['id'] == $item['parent']) {
- $likebuttons = replace_macros((($item['private']) ? $noshare_tpl : $like_tpl),array(
- '$id' => $item['id'],
- '$likethis' => t("I like this \x28toggle\x29"),
- '$nolike' => t("I don't like this \x28toggle\x29"),
- '$share' => t('Share'),
- '$wait' => t('Please wait')
- ));
- }
- if($item['last-child']) {
- $comment = replace_macros($cmnt_tpl,array(
- '$return_path' => '',
- '$jsreload' => '', // $_SESSION['return_url'],
- '$type' => 'wall-comment',
- '$id' => $item['item_id'],
- '$parent' => $item['parent'],
- '$profile_uid' => $a->profile['profile_uid'],
- '$mylink' => $contact['url'],
- '$mytitle' => t('This is you'),
- '$myphoto' => $contact['thumb'],
- '$ww' => ''
- ));
- }
- }
-
-
- $profile_url = $item['url'];
-
- // This is my profile page but I'm not the author of this post/comment. If it's somebody that's a fan or mutual friend,
- // I can go directly to their profile as an authenticated guest.
-
- if(local_user() && ($item['contact-uid'] == local_user())
- && ($item['network'] === 'dfrn') && (! $item['self'] )) {
- $profile_url = $redirect_url;
- $sparkle = ' sparkle';
- }
- else
- $sparkle = '';
-
-
- $edpost = '';
- if((local_user()) && ($a->profile['profile_uid'] == local_user()) && ($item['id'] == $item['parent']) && (intval($item['wall']) == 1))
- $edpost = '';
-
-
- // We would prefer to use our own avatar link for this item because the one in the author-avatar might reference a
- // remote site (which could be down). We will use author-avatar if we haven't got something stored locally.
- // We use this same logic block in mod/network.php to determine it this is a third party post and we don't have any
- // local contact info at all. In this module you should never encounter a third-party author, but we still will do
- // the right thing if you ever do.
-
- $diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true);
-
- $profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
- $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $item['thumb']);
-
- $profile_link = $profile_url;
-
- $drop = '';
- $dropping = false;
-
- if(($item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
- $dropping = true;
-
- $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$delete' => t('Delete')));
-
-
- $like = ((isset($alike[$item['id']])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
- $dislike = ((isset($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 = (($item['parent'] != $item['item_id']) ? ' comment' : '');
-
- if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
- $indent .= ' shiny';
-
-
- $tmp_item = replace_macros($template,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$profile_url' => $profile_link,
- '$item_photo_menu' => item_photo_menu($item),
- '$name' => $profile_name,
- '$thumb' => $profile_avatar,
- '$sparkle' => $sparkle,
- '$title' => $item['title'],
- '$body' => smilies(bbcode($item['body'])),
- '$ago' => relative_date($item['created']),
- '$lock' => $lock,
- '$location' => $location,
- '$indent' => $indent,
- '$plink' => get_plink($item),
- '$edpost' => $edpost,
- '$drop' => $drop,
- '$like' => $like,
- '$vote' => $likebuttons,
- '$dislike' => $dislike,
- '$comment' => $comment
- ));
-
- $arr = array('item' => $item, 'output' => $tmp_item);
- call_hooks('display_item', $arr);
-
- $o .= $arr['output'];
-
- }
- }
-
- if($update) {
- return $o;
- }
+ if(! $update) {
- $o .= paginate($a);
- $o .= '' . t('Shared content is covered by the Creative Commons Attribution 3.0 license.') . '';
+ $o .= paginate($a);
+ $o .= '' . t('Shared content is covered by the Creative Commons Attribution 3.0 license.') . '';
+ }
return $o;
}
diff --git a/mod/profile_photo.php b/mod/profile_photo.php
index 48805fbdd..fe4da3baf 100644
--- a/mod/profile_photo.php
+++ b/mod/profile_photo.php
@@ -184,7 +184,11 @@ function profile_photo_content(&$a) {
$tpl = load_view_file('view/profile_photo.tpl');
$o .= replace_macros($tpl,array(
- '$user' => $a->user['nickname']
+ '$user' => $a->user['nickname'],
+ '$lbl_upfile' => t('Upload File:'),
+ '$title' => t('Upload Profile Photo'),
+ '$submit' => t('Upload'),
+ '$select' => sprintf('%s %s', t('or'), '' . t('select a photo from your photo albums') . '')
));
return $o;
diff --git a/mod/profiles.php b/mod/profiles.php
index 434f58adf..4802f21aa 100644
--- a/mod/profiles.php
+++ b/mod/profiles.php
@@ -351,6 +351,9 @@ function profiles_content(&$a) {
$opt_tpl = load_view_file("view/profile-hide-friends.tpl");
$hide_friends = replace_macros($opt_tpl,array(
+ '$desc' => t('Hide my contact/friend list from viewers of this profile?'),
+ '$yes_str' => t('Yes'),
+ '$no_str' => t('No'),
'$yes_selected' => (($r[0]['hide-friends']) ? " checked=\"checked\" " : ""),
'$no_selected' => (($r[0]['hide-friends'] == 0) ? " checked=\"checked\" " : "")
));
@@ -363,6 +366,44 @@ function profiles_content(&$a) {
$is_default = (($r[0]['is-default']) ? 1 : 0);
$tpl = load_view_file("view/profile_edit.tpl");
$o .= replace_macros($tpl,array(
+ '$banner' => t('Edit Profile Details'),
+ '$submit' => t('Submit'),
+ '$viewprof' => t('View this profile'),
+ '$cr_prof' => t('Create a new profile using these settings'),
+ '$cl_prof' => t('Clone this profile'),
+ '$del_prof' => t('Delete this profile'),
+ '$lbl_profname' => t('Profile Name:'),
+ '$lbl_fullname' => t('Your Full Name:'),
+ '$lbl_title' => t('Title/Description:'),
+ '$lbl_gender' => t('Your Gender:'),
+ '$lbl_bd' => t("Birthday \x28y/m/d\x29:"),
+ '$lbl_address' => t('Street Address:'),
+ '$lbl_city' => t('Locality/City:'),
+ '$lbl_zip' => t('Postal/Zip Code:'),
+ '$lbl_country' => t('Country:'),
+ '$lbl_region' => t('Region/State:'),
+ '$lbl_marital' => t('♥ Marital Status:'),
+ '$lbl_with' => t("Who: \x28if applicable\x29"),
+ '$lbl_ex1' => t('Examples: cathy123, Cathy Williams, cathy@example.com'),
+ '$lbl_sexual' => t('Sexual Preference:'),
+ '$lbl_homepage' => t('Homepage URL:'),
+ '$lbl_politic' => t('Political Views:'),
+ '$lbl_religion' => t('Religious Views:'),
+ '$lbl_pubkey' => t('Public Keywords:'),
+ '$lbl_prvkey' => t('Private Keywords:'),
+ '$lbl_ex2' => t('Example: fishing photography software'),
+ '$lbl_pubdsc' => t("\x28Used for suggesting potential friends, can be seen by others\x29"),
+ '$lbl_prvdsc' => t("\x28Used for searching profiles, never shown to others\x29"),
+ '$lbl_about' => t('Tell us about yourself...'),
+ '$lbl_hobbies' => t('Hobbies/Interests'),
+ '$lbl_social' => t('Contact information and Social Networks'),
+ '$lbl_music' => t('Musical interests'),
+ '$lbl_book' => t('Books, literature'),
+ '$lbl_tv' => t('Television'),
+ '$lbl_film' => t('Film/dance/culture/entertainment'),
+ '$lbl_love' => t('Love/romance'),
+ '$lbl_work' => t('Work/employment'),
+ '$lbl_school' => t('School/education'),
'$disabled' => (($is_default) ? 'onclick="return false;" style="color: #BBBBFF;"' : ''),
'$baseurl' => $a->get_baseurl(),
'$profile_id' => $r[0]['id'],
@@ -410,7 +451,14 @@ function profiles_content(&$a) {
local_user());
if(count($r)) {
- $o .= load_view_file('view/profile_listing_header.tpl');
+ $tpl_header = load_view_file('view/profile_listing_header.tpl');
+ $o .= replace_macros($tpl_header,array(
+ '$header' => t('Profiles'),
+ '$chg_photo' => t('Change profile photo'),
+ '$cr_new' => t('Create New Profile')
+ ));
+
+
$tpl_default = load_view_file('view/profile_entry_default.tpl');
$tpl = load_view_file('view/profile_entry.tpl');
diff --git a/mod/search.php b/mod/search.php
index b53bd45c0..23b2ddb7e 100644
--- a/mod/search.php
+++ b/mod/search.php
@@ -65,7 +65,7 @@ function search_content(&$a) {
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
- `contact`.`network`, `contact`.`thumb`, `contact`.`self`,
+ `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,
`user`.`nickname`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
@@ -80,68 +80,10 @@ function search_content(&$a) {
dbesc($search)
);
- $tpl = load_view_file('view/search_item.tpl');
- $droptpl = load_view_file('view/wall_fake_drop.tpl');
- $return_url = $_SESSION['return_url'] = $a->cmd;
+ require_once('include/conversation.php');
- if(count($r)) {
-
- foreach($r as $item) {
-
- $total = 0;
- $comment = '';
- $owner_url = '';
- $owner_photo = '';
- $owner_name = '';
- $sparkle = '';
-
- if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE)))
- && ($item['id'] != $item['parent']))
- continue;
-
- $total ++;
-
- $profile_name = ((strlen($item['author-name'])) ? $item['author-name'] : $item['name']);
- $profile_avatar = ((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']);
- $profile_link = ((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
-
-
- $location = (($item['location']) ? '' . $item['location'] . '' : '');
- $coord = (($item['coord']) ? '' . $item['coord'] . '' : '');
- if($coord) {
- if($location)
- $location .= '
(' . $coord . ')';
- else
- $location = '' . $coord . '';
- }
-
- $drop = replace_macros($droptpl,array('$id' => $item['id']));
- $lock = '';
-
- $o .= replace_macros($tpl,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$profile_url' => $profile_link,
- '$item_photo_menu' => item_photo_menu($item),
- '$name' => $profile_name,
- '$sparkle' => $sparkle,
- '$lock' => $lock,
- '$thumb' => $profile_avatar,
- '$title' => $item['title'],
- '$body' => bbcode($item['body']),
- '$ago' => relative_date($item['created']),
- '$location' => $location,
- '$indent' => '',
- '$owner_url' => $owner_url,
- '$owner_photo' => $owner_photo,
- '$owner_name' => $owner_name,
- '$drop' => $drop,
- '$conv' => '' . t('View in context') . ''
- ));
-
- }
- }
+ $o .= conversation($a,$r,'search',false);
$o .= paginate($a);
diff --git a/mod/settings.php b/mod/settings.php
index 72b627d41..5f88d95fb 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -285,6 +285,9 @@ function settings_content(&$a) {
else {
$opt_tpl = load_view_file("view/profile-in-directory.tpl");
$profile_in_dir = replace_macros($opt_tpl,array(
+ '$desc' => t('Publish your default profile in site directory?'),
+ '$yes_str' => t('Yes'),
+ '$no_str' => t('No'),
'$yes_selected' => (($profile['publish']) ? " checked=\"checked\" " : ""),
'$no_selected' => (($profile['publish'] == 0) ? " checked=\"checked\" " : "")
));
@@ -294,6 +297,9 @@ function settings_content(&$a) {
$opt_tpl = load_view_file("view/profile-in-netdir.tpl");
$profile_in_net_dir = replace_macros($opt_tpl,array(
+ '$desc' => t('Publish your default profile in global social directory?'),
+ '$yes_str' => t('Yes'),
+ '$no_str' => t('No'),
'$yes_selected' => (($profile['net-publish']) ? " checked=\"checked\" " : ""),
'$no_selected' => (($profile['net-publish'] == 0) ? " checked=\"checked\" " : "")
));
@@ -309,18 +315,7 @@ function settings_content(&$a) {
if($invisible)
notice( t('Profile is not published.') . EOL );
- $nickname_block = load_view_file("view/settings_nick_set.tpl");
- $nickname_subdir = '';
- if(strlen($a->get_path())) {
- $subdir_tpl = load_view_file('view/settings_nick_subdir.tpl');
- $nickname_subdir = replace_macros($subdir_tpl, array(
- '$baseurl' => $a->get_baseurl(),
- '$nickname' => $nickname,
- '$hostname' => $a->get_hostname()
- ));
- }
-
$theme_selector = '';
+ $subdir = ((strlen($a->get_path())) ? '
' . t('or') . ' ' . $a->get_baseurl() . '/profile/' . $nickname : '');
- $nickname_block = replace_macros($nickname_block,array(
+ $tpl_addr = load_view_file("view/settings_nick_set.tpl");
+
+ $prof_addr = replace_macros($tpl_addr,array(
+ '$desc' => t('Your profile address is'),
'$nickname' => $nickname,
- '$uid' => local_user(),
- '$subdir' => $nickname_subdir,
- '$basepath' => $a->get_hostname(),
- '$baseurl' => $a->get_baseurl()));
+ '$subdir' => $subdir,
+ '$basepath' => $a->get_hostname()
+ ));
$stpl = load_view_file('view/settings.tpl');
@@ -354,6 +352,34 @@ function settings_content(&$a) {
$o .= replace_macros($stpl,array(
+ '$ptitle' => t('Account Settings'),
+ '$lbl_plug' => t('Plugin Settings'),
+ '$lbl_basic' => t('Basic Settings'),
+ '$lbl_fn' => t('Full Name:'),
+ '$lbl_email' => t('Email Address:'),
+ '$lbl_tz' => t('Your Timezone:'),
+ '$lbl_loc1' => t('Default Post Location:'),
+ '$lbl_loc2' => t('Use Browser Location:'),
+ '$lbl_theme' => t('Display Theme:'),
+ '$submit' => t('Submit'),
+ '$lbl_prv' => t('Security and Privacy Settings'),
+ '$lbl_maxreq' => t('Maximum Friend Requests/Day:'),
+ '$lbl_maxrdesc' => t("\x28to prevent spam abuse\x29"),
+ '$lbl_rempost' => t('Allow friends to post to your profile page:'),
+ '$lbl_exp1' => t("Automatically expire \x28delete\x29 posts older than"),
+ '$lbl_exp2' => t('days'),
+ '$lbl_not1' => t('Notification Settings'),
+ '$lbl_not2' => t('Send a notification email when:'),
+ '$lbl_not3' => t('You receive an introduction'),
+ '$lbl_not4' => t('Your introductions are confirmed'),
+ '$lbl_not5' => t('Someone writes on your profile wall'),
+ '$lbl_not6' => t('Someone writes a followup comment'),
+ '$lbl_not7' => t('You receive a private message'),
+ '$lbl_pass1' => t('Password Settings'),
+ '$lbl_pass2' => t('Leave password fields blank unless changing'),
+ '$lbl_pass3' => t('New Password:'),
+ '$lbl_pass4' => t('Confirm:'),
+ '$lbl_advn' => t('Advanced Page Settings'),
'$baseurl' => $a->get_baseurl(),
'$oidhtml' => $oidhtml,
'$uexport' => $uexport,
@@ -361,7 +387,7 @@ function settings_content(&$a) {
'$username' => $username,
'$openid' => $openid,
'$email' => $email,
- '$nickname_block' => $nickname_block,
+ '$nickname_block' => $prof_addr,
'$timezone' => $timezone,
'$zoneselect' => select_timezone($timezone),
'$defloc' => $defloc,
diff --git a/mod/share.php b/mod/share.php
index 8a8229e8a..f355a842a 100644
--- a/mod/share.php
+++ b/mod/share.php
@@ -17,7 +17,7 @@ function share_init(&$a) {
$o = '';
$o .= '♲ ' . $r[0]['author-name'] . '
';
- $o .= prepare_body($r[0]);
+ $o .= bbcode($r[0]['body'], true);
echo $o . '
';
killme();
-}
\ No newline at end of file
+}
diff --git a/update.php b/update.php
index 1c243e6ee..bb4536ae9 100644
--- a/update.php
+++ b/update.php
@@ -423,3 +423,24 @@ function update_1045() {
function update_1046() {
q("ALTER TABLE `item` ADD `attach` MEDIUMTEXT NOT NULL AFTER `tag` ");
}
+
+function update_1047() {
+ q("ALTER TABLE `contact` ADD `writable` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `readonly` ");
+}
+
+function update_1048() {
+ q("UPDATE `contact` SET `writable` = 1 WHERE `network` = 'stat' AND `notify` != '' ");
+}
+
+function update_1049() {
+ q("CREATE TABLE `mailacct` (
+ `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+ `uid` INT NOT NULL,
+ `server` CHAR( 255 ) NOT NULL ,
+ `user` CHAR( 255 ) NOT NULL ,
+ `pass` CHAR( 255 ) NOT NULL ,
+ `reply_to` CHAR( 255 ) NOT NULL ,
+ `last_check` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'
+ ) ENGINE = MYISAM ");
+}
+
diff --git a/util/messages.po b/util/messages.po
index 88e1fcd01..23f250da2 100644
--- a/util/messages.po
+++ b/util/messages.po
@@ -6,213 +6,1168 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 2.1.941\n"
+"Project-Id-Version: 2.1.942\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-06 23:01-0700\n"
+"POT-Creation-Date: 2011-04-08 12:29+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: ../../mod/oexchange.php:27
-msgid "Post successful."
+#: ../../index.php:208
+msgid "Not Found"
msgstr ""
-#: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94
-#: ../../mod/dfrn_request.php:630 ../../addon/js_upload/js_upload.php:41
-msgid "Cancel"
+#: ../../index.php:209
+msgid "Page not found."
msgstr ""
-#: ../../mod/tagrm.php:41
-msgid "Tag removed"
+#: ../../index.php:264 ../../mod/group.php:88
+msgid "Permission denied"
msgstr ""
-#: ../../mod/tagrm.php:79
-msgid "Remove Item Tag"
+#: ../../index.php:265 ../../mod/manage.php:75 ../../mod/wall_upload.php:42
+#: ../../mod/follow.php:8 ../../mod/profile_photo.php:19
+#: ../../mod/profile_photo.php:133 ../../mod/profile_photo.php:139
+#: ../../mod/profile_photo.php:150 ../../mod/regmod.php:16
+#: ../../mod/profiles.php:7 ../../mod/profiles.php:227
+#: ../../mod/settings.php:15 ../../mod/settings.php:20
+#: ../../mod/settings.php:211 ../../mod/photos.php:85 ../../mod/photos.php:773
+#: ../../mod/display.php:311 ../../mod/editpost.php:10 ../../mod/invite.php:13
+#: ../../mod/invite.php:50 ../../mod/contacts.php:106
+#: ../../mod/register.php:25 ../../mod/install.php:93 ../../mod/network.php:6
+#: ../../mod/notifications.php:56 ../../mod/item.php:57 ../../mod/item.php:668
+#: ../../mod/message.php:8 ../../mod/message.php:116
+#: ../../mod/dfrn_confirm.php:53 ../../mod/viewcontacts.php:13
+#: ../../mod/group.php:19 ../../addon/facebook/facebook.php:110
+msgid "Permission denied."
msgstr ""
-#: ../../mod/tagrm.php:81
-msgid "Select a tag to remove: "
+#: ../../boot.php:359
+msgid "Delete this item?"
msgstr ""
-#: ../../mod/tagrm.php:93
-msgid "Remove"
+#: ../../boot.php:360 ../../mod/profile.php:387 ../../mod/photos.php:1108
+#: ../../mod/display.php:173 ../../mod/network.php:505
+msgid "Comment"
msgstr ""
-#: ../../mod/dfrn_poll.php:78 ../../mod/dfrn_poll.php:483
+#: ../../boot.php:813
+msgid "Create a New Account"
+msgstr ""
+
+#: ../../boot.php:814 ../../mod/register.php:463 ../../include/nav.php:62
+msgid "Register"
+msgstr ""
+
+#: ../../boot.php:820
+msgid "Nickname or Email address: "
+msgstr ""
+
+#: ../../boot.php:821
+msgid "Password: "
+msgstr ""
+
+#: ../../boot.php:822 ../../boot.php:828 ../../include/nav.php:45
+msgid "Login"
+msgstr ""
+
+#: ../../boot.php:826
+msgid "Nickname/Email/OpenID: "
+msgstr ""
+
+#: ../../boot.php:827
+msgid "Password (if not OpenID): "
+msgstr ""
+
+#: ../../boot.php:830
+msgid "Forgot your password?"
+msgstr ""
+
+#: ../../boot.php:831 ../../mod/lostpass.php:74
+msgid "Password Reset"
+msgstr ""
+
+#: ../../boot.php:842 ../../include/nav.php:39
+msgid "Logout"
+msgstr ""
+
+#: ../../boot.php:1083
+msgid "prev"
+msgstr ""
+
+#: ../../boot.php:1085
+msgid "first"
+msgstr ""
+
+#: ../../boot.php:1114
+msgid "last"
+msgstr ""
+
+#: ../../boot.php:1117
+msgid "next"
+msgstr ""
+
+#: ../../boot.php:1848
#, php-format
-msgid "%s welcomes %s"
+msgid "%s likes this."
msgstr ""
-#: ../../mod/photos.php:30 ../../wip/photos.php:31
-#: ../../wip/photos-chris.php:41
+#: ../../boot.php:1848
+#, php-format
+msgid "%s doesn't like this."
+msgstr ""
+
+#: ../../boot.php:1852
+#, php-format
+msgid "%2$d people like this."
+msgstr ""
+
+#: ../../boot.php:1854
+#, php-format
+msgid "%2$d people don't like this."
+msgstr ""
+
+#: ../../boot.php:1860
+msgid "and"
+msgstr ""
+
+#: ../../boot.php:1863
+#, php-format
+msgid ", and %d other people"
+msgstr ""
+
+#: ../../boot.php:1864
+#, php-format
+msgid "%s like this."
+msgstr ""
+
+#: ../../boot.php:1864
+#, php-format
+msgid "%s don't like this."
+msgstr ""
+
+#: ../../boot.php:2025
+msgid "No contacts"
+msgstr ""
+
+#: ../../boot.php:2033
+#, php-format
+msgid "%d Contact"
+msgid_plural "%d Contacts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../boot.php:2049 ../../mod/viewcontacts.php:17
+msgid "View Contacts"
+msgstr ""
+
+#: ../../boot.php:2066 ../../mod/search.php:17 ../../include/nav.php:68
+msgid "Search"
+msgstr ""
+
+#: ../../boot.php:2221 ../../mod/profile.php:8
+msgid "No profile"
+msgstr ""
+
+#: ../../boot.php:2278
+msgid "Connect"
+msgstr ""
+
+#: ../../boot.php:2288
+msgid "Location:"
+msgstr ""
+
+#: ../../boot.php:2292
+msgid ", "
+msgstr ""
+
+#: ../../boot.php:2300 ../../include/profile_advanced.php:23
+msgid "Gender:"
+msgstr ""
+
+#: ../../boot.php:2304
+msgid "Status:"
+msgstr ""
+
+#: ../../boot.php:2306 ../../include/profile_advanced.php:103
+msgid "Homepage:"
+msgstr ""
+
+#: ../../boot.php:2397
+msgid "Monday"
+msgstr ""
+
+#: ../../boot.php:2397
+msgid "Tuesday"
+msgstr ""
+
+#: ../../boot.php:2397
+msgid "Wednesday"
+msgstr ""
+
+#: ../../boot.php:2397
+msgid "Thursday"
+msgstr ""
+
+#: ../../boot.php:2397
+msgid "Friday"
+msgstr ""
+
+#: ../../boot.php:2397
+msgid "Saturday"
+msgstr ""
+
+#: ../../boot.php:2397
+msgid "Sunday"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "January"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "February"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "March"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "April"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "May"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "June"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "July"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "August"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "September"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "October"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "November"
+msgstr ""
+
+#: ../../boot.php:2401
+msgid "December"
+msgstr ""
+
+#: ../../boot.php:2416
+msgid "g A l F d"
+msgstr ""
+
+#: ../../boot.php:2433
+msgid "Birthday Reminders"
+msgstr ""
+
+#: ../../boot.php:2434
+msgid "Birthdays this week:"
+msgstr ""
+
+#: ../../boot.php:2435
+msgid "(Adjusted for local time)"
+msgstr ""
+
+#: ../../boot.php:2446
+msgid "[today]"
+msgstr ""
+
+#: ../../boot.php:2643
+msgid "link to source"
+msgstr ""
+
+#: ../../boot.php:2729
+msgid "View status"
+msgstr ""
+
+#: ../../boot.php:2730
+msgid "View profile"
+msgstr ""
+
+#: ../../boot.php:2731
+msgid "View photos"
+msgstr ""
+
+#: ../../boot.php:2732 ../../mod/contacts.php:385
+msgid "Edit contact"
+msgstr ""
+
+#: ../../boot.php:2733
+msgid "Send PM"
+msgstr ""
+
+#: ../../mod/manage.php:37
+#, php-format
+msgid "Welcome back %s"
+msgstr ""
+
+#: ../../mod/manage.php:87
+msgid "Manage Identities and/or Pages"
+msgstr ""
+
+#: ../../mod/manage.php:90
+msgid ""
+"(Toggle between different identities or community/group pages which share "
+"your account details.)"
+msgstr ""
+
+#: ../../mod/manage.php:92
+msgid "Select an identity to manage: "
+msgstr ""
+
+#: ../../mod/manage.php:106 ../../mod/profile.php:388
+#: ../../mod/profiles.php:370 ../../mod/settings.php:364
+#: ../../mod/photos.php:801 ../../mod/photos.php:858 ../../mod/photos.php:1066
+#: ../../mod/photos.php:1109 ../../mod/display.php:174 ../../mod/invite.php:64
+#: ../../mod/contacts.php:264 ../../mod/install.php:133
+#: ../../mod/network.php:506 ../../mod/group.php:97 ../../mod/group.php:155
+#: ../../addon/twitter/twitter.php:156 ../../addon/twitter/twitter.php:175
+#: ../../addon/statusnet/statusnet.php:163
+#: ../../addon/statusnet/statusnet.php:189
+#: ../../addon/statusnet/statusnet.php:207
+#: ../../addon/facebook/facebook.php:151
+#: ../../addon/randplace/randplace.php:179
+msgid "Submit"
+msgstr ""
+
+#: ../../mod/wall_upload.php:56 ../../mod/profile_photo.php:109
+#, php-format
+msgid "Image exceeds size limit of %d"
+msgstr ""
+
+#: ../../mod/wall_upload.php:65 ../../mod/profile_photo.php:118
+#: ../../mod/photos.php:571
+msgid "Unable to process image."
+msgstr ""
+
+#: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88
+#: ../../mod/wall_upload.php:95 ../../mod/item.php:212
+#: ../../mod/message.php:93
+msgid "Wall Photos"
+msgstr ""
+
+#: ../../mod/wall_upload.php:82 ../../mod/profile_photo.php:236
+#: ../../mod/photos.php:589
+msgid "Image upload failed."
+msgstr ""
+
+#: ../../mod/dfrn_notify.php:177 ../../mod/dfrn_notify.php:392
+#: ../../mod/dfrn_notify.php:478 ../../mod/regmod.php:93
+#: ../../mod/register.php:329 ../../mod/register.php:366
+#: ../../mod/dfrn_request.php:547 ../../mod/lostpass.php:39
+#: ../../mod/item.php:475 ../../mod/item.php:498
+#: ../../mod/dfrn_confirm.php:649 ../../include/items.php:1420
+msgid "Administrator"
+msgstr ""
+
+#: ../../mod/dfrn_notify.php:179
+msgid "noreply"
+msgstr ""
+
+#: ../../mod/dfrn_notify.php:237
+msgid "New mail received at "
+msgstr ""
+
+#: ../../mod/dfrn_notify.php:391 ../../mod/dfrn_notify.php:477
+#, php-format
+msgid "%s commented on an item at %s"
+msgstr ""
+
+#: ../../mod/profile.php:102
+msgid "Status"
+msgstr ""
+
+#: ../../mod/profile.php:103 ../../include/profile_advanced.php:7
+msgid "Profile"
+msgstr ""
+
+#: ../../mod/profile.php:104
+msgid "Photos"
+msgstr ""
+
+#: ../../mod/profile.php:130 ../../mod/network.php:77
+#: ../../mod/message.php:172
+msgid "Please enter a link URL:"
+msgstr ""
+
+#: ../../mod/profile.php:131 ../../mod/network.php:78
+msgid "Please enter a YouTube link:"
+msgstr ""
+
+#: ../../mod/profile.php:132 ../../mod/network.php:79
+msgid "Please enter a video(.ogg) link/URL:"
+msgstr ""
+
+#: ../../mod/profile.php:133 ../../mod/network.php:80
+msgid "Please enter an audio(.ogg) link/URL:"
+msgstr ""
+
+#: ../../mod/profile.php:134 ../../mod/network.php:81
+msgid "Where are you right now?"
+msgstr ""
+
+#: ../../mod/profile.php:135 ../../mod/network.php:82
+msgid "Enter a title for this item"
+msgstr ""
+
+#: ../../mod/profile.php:158 ../../mod/profile.php:372
+#: ../../mod/photos.php:1086 ../../mod/display.php:158
+#: ../../mod/network.php:105 ../../mod/network.php:489
+msgid "Share"
+msgstr ""
+
+#: ../../mod/profile.php:159 ../../mod/editpost.php:63
+#: ../../mod/network.php:106 ../../mod/message.php:188
+#: ../../mod/message.php:322
+msgid "Upload photo"
+msgstr ""
+
+#: ../../mod/profile.php:160 ../../mod/editpost.php:64
+#: ../../mod/network.php:107 ../../mod/message.php:189
+#: ../../mod/message.php:323
+msgid "Insert web link"
+msgstr ""
+
+#: ../../mod/profile.php:161 ../../mod/editpost.php:65
+#: ../../mod/network.php:108
+msgid "Insert YouTube video"
+msgstr ""
+
+#: ../../mod/profile.php:162 ../../mod/editpost.php:66
+#: ../../mod/network.php:109
+msgid "Insert Vorbis [.ogg] video"
+msgstr ""
+
+#: ../../mod/profile.php:163 ../../mod/editpost.php:67
+#: ../../mod/network.php:110
+msgid "Insert Vorbis [.ogg] audio"
+msgstr ""
+
+#: ../../mod/profile.php:164 ../../mod/editpost.php:68
+#: ../../mod/network.php:111
+msgid "Set your location"
+msgstr ""
+
+#: ../../mod/profile.php:165 ../../mod/editpost.php:69
+#: ../../mod/network.php:112
+msgid "Clear browser location"
+msgstr ""
+
+#: ../../mod/profile.php:166 ../../mod/network.php:113
+msgid "Set title"
+msgstr ""
+
+#: ../../mod/profile.php:167 ../../mod/profile.php:373
+#: ../../mod/photos.php:1087 ../../mod/display.php:159
+#: ../../mod/editpost.php:70 ../../mod/network.php:114
+#: ../../mod/network.php:490 ../../mod/message.php:190
+#: ../../mod/message.php:324
+msgid "Please wait"
+msgstr ""
+
+#: ../../mod/profile.php:168 ../../mod/editpost.php:71
+#: ../../mod/network.php:115
+msgid "Permission settings"
+msgstr ""
+
+#: ../../mod/profile.php:175 ../../mod/editpost.php:77
+#: ../../mod/network.php:121
+msgid "CC: email addresses"
+msgstr ""
+
+#: ../../mod/profile.php:177 ../../mod/editpost.php:79
+#: ../../mod/network.php:123
+msgid "Example: bob@example.com, mary@example.com"
+msgstr ""
+
+#: ../../mod/profile.php:352 ../../mod/network.php:428
+#, php-format
+msgid "See all %d comments"
+msgstr ""
+
+#: ../../mod/profile.php:363 ../../mod/photos.php:962
+#: ../../mod/display.php:149 ../../mod/network.php:443
+msgid "Private Message"
+msgstr ""
+
+#: ../../mod/profile.php:370 ../../mod/photos.php:1084
+#: ../../mod/display.php:156 ../../mod/network.php:487
+msgid "I like this (toggle)"
+msgstr ""
+
+#: ../../mod/profile.php:371 ../../mod/photos.php:1085
+#: ../../mod/display.php:157 ../../mod/network.php:488
+msgid "I don't like this (toggle)"
+msgstr ""
+
+#: ../../mod/profile.php:385 ../../mod/photos.php:1106
+#: ../../mod/photos.php:1148 ../../mod/photos.php:1177
+#: ../../mod/display.php:171 ../../mod/network.php:503
+msgid "This is you"
+msgstr ""
+
+#: ../../mod/profile.php:411 ../../mod/display.php:224
+#: ../../mod/editpost.php:62 ../../mod/network.php:513
+msgid "Edit"
+msgstr ""
+
+#: ../../mod/profile.php:433 ../../mod/photos.php:1205
+#: ../../mod/display.php:240 ../../mod/network.php:514 ../../mod/group.php:141
+msgid "Delete"
+msgstr ""
+
+#: ../../mod/profile.php:455 ../../mod/search.php:124
+#: ../../mod/display.php:264 ../../mod/network.php:330
+#: ../../mod/network.php:563
+msgid "View $name's profile"
+msgstr ""
+
+#: ../../mod/profile.php:489 ../../mod/display.php:320
+#: ../../mod/register.php:442 ../../mod/network.php:609
+msgid ""
+"Shared content is covered by the Creative Commons Attribution 3.0 license."
+msgstr ""
+
+#: ../../mod/follow.php:186
+msgid "The profile address specified does not provide adequate information."
+msgstr ""
+
+#: ../../mod/follow.php:192
+msgid ""
+"Limited profile. This person will be unable to receive direct/personal "
+"notifications from you."
+msgstr ""
+
+#: ../../mod/follow.php:243
+msgid "Unable to retrieve contact information."
+msgstr ""
+
+#: ../../mod/follow.php:289
+msgid "following"
+msgstr ""
+
+#: ../../mod/profile_photo.php:28
+msgid "Image uploaded but image cropping failed."
+msgstr ""
+
+#: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65
+#: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:155
+#: ../../mod/profile_photo.php:231 ../../mod/profile_photo.php:240
+#: ../../mod/photos.php:106 ../../mod/photos.php:531 ../../mod/photos.php:850
+#: ../../mod/photos.php:865 ../../mod/register.php:285
+#: ../../mod/register.php:292 ../../mod/register.php:299
+msgid "Profile Photos"
+msgstr ""
+
+#: ../../mod/profile_photo.php:61 ../../mod/profile_photo.php:68
+#: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:243
+#, php-format
+msgid "Image size reduction [%s] failed."
+msgstr ""
+
+#: ../../mod/profile_photo.php:95
+msgid "Unable to process image"
+msgstr ""
+
+#: ../../mod/profile_photo.php:188
+msgid "Upload File:"
+msgstr ""
+
+#: ../../mod/profile_photo.php:189
+msgid "Upload Profile Photo"
+msgstr ""
+
+#: ../../mod/profile_photo.php:190
+msgid "Upload"
+msgstr ""
+
+#: ../../mod/profile_photo.php:191 ../../mod/settings.php:336
+msgid "or"
+msgstr ""
+
+#: ../../mod/profile_photo.php:191
+msgid "select a photo from your photo albums"
+msgstr ""
+
+#: ../../mod/profile_photo.php:204
+msgid "Crop Image"
+msgstr ""
+
+#: ../../mod/profile_photo.php:205
+msgid "Please adjust the image cropping for optimum viewing."
+msgstr ""
+
+#: ../../mod/profile_photo.php:206
+msgid "Done Editing"
+msgstr ""
+
+#: ../../mod/profile_photo.php:234
+msgid "Image uploaded successfully."
+msgstr ""
+
+#: ../../mod/home.php:23
+#, php-format
+msgid "Welcome to %s"
+msgstr ""
+
+#: ../../mod/regmod.php:10
+msgid "Please login."
+msgstr ""
+
+#: ../../mod/regmod.php:54
+#, php-format
+msgid "Registration revoked for %s"
+msgstr ""
+
+#: ../../mod/regmod.php:92 ../../mod/register.php:328
+#, php-format
+msgid "Registration details for %s"
+msgstr ""
+
+#: ../../mod/regmod.php:96
+msgid "Account approved."
+msgstr ""
+
+#: ../../mod/profiles.php:21 ../../mod/profiles.php:237
+#: ../../mod/profiles.php:342 ../../mod/dfrn_confirm.php:62
+msgid "Profile not found."
+msgstr ""
+
+#: ../../mod/profiles.php:28
+msgid "Profile Name is required."
+msgstr ""
+
+#: ../../mod/profiles.php:199
+msgid "Profile updated."
+msgstr ""
+
+#: ../../mod/profiles.php:254
+msgid "Profile deleted."
+msgstr ""
+
+#: ../../mod/profiles.php:270 ../../mod/profiles.php:301
+msgid "Profile-"
+msgstr ""
+
+#: ../../mod/profiles.php:289 ../../mod/profiles.php:328
+msgid "New profile created."
+msgstr ""
+
+#: ../../mod/profiles.php:307
+msgid "Profile unavailable to clone."
+msgstr ""
+
+#: ../../mod/profiles.php:354
+msgid "Hide my contact/friend list from viewers of this profile?"
+msgstr ""
+
+#: ../../mod/profiles.php:355 ../../mod/settings.php:289
+#: ../../mod/settings.php:301 ../../mod/register.php:436
+#: ../../mod/dfrn_request.php:620
+msgid "Yes"
+msgstr ""
+
+#: ../../mod/profiles.php:356 ../../mod/settings.php:290
+#: ../../mod/settings.php:302 ../../mod/register.php:437
+#: ../../mod/dfrn_request.php:621
+msgid "No"
+msgstr ""
+
+#: ../../mod/profiles.php:369
+msgid "Edit Profile Details"
+msgstr ""
+
+#: ../../mod/profiles.php:371
+msgid "View this profile"
+msgstr ""
+
+#: ../../mod/profiles.php:372
+msgid "Create a new profile using these settings"
+msgstr ""
+
+#: ../../mod/profiles.php:373
+msgid "Clone this profile"
+msgstr ""
+
+#: ../../mod/profiles.php:374
+msgid "Delete this profile"
+msgstr ""
+
+#: ../../mod/profiles.php:375
+msgid "Profile Name:"
+msgstr ""
+
+#: ../../mod/profiles.php:376
+msgid "Your Full Name:"
+msgstr ""
+
+#: ../../mod/profiles.php:377
+msgid "Title/Description:"
+msgstr ""
+
+#: ../../mod/profiles.php:378
+msgid "Your Gender:"
+msgstr ""
+
+#: ../../mod/profiles.php:379
+msgid "Birthday (y/m/d):"
+msgstr ""
+
+#: ../../mod/profiles.php:380
+msgid "Street Address:"
+msgstr ""
+
+#: ../../mod/profiles.php:381
+msgid "Locality/City:"
+msgstr ""
+
+#: ../../mod/profiles.php:382
+msgid "Postal/Zip Code:"
+msgstr ""
+
+#: ../../mod/profiles.php:383
+msgid "Country:"
+msgstr ""
+
+#: ../../mod/profiles.php:384
+msgid "Region/State:"
+msgstr ""
+
+#: ../../mod/profiles.php:385
+msgid "♥ Marital Status:"
+msgstr ""
+
+#: ../../mod/profiles.php:386
+msgid "Who: (if applicable)"
+msgstr ""
+
+#: ../../mod/profiles.php:387
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+msgstr ""
+
+#: ../../mod/profiles.php:388 ../../include/profile_advanced.php:90
+msgid "Sexual Preference:"
+msgstr ""
+
+#: ../../mod/profiles.php:389
+msgid "Homepage URL:"
+msgstr ""
+
+#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:115
+msgid "Political Views:"
+msgstr ""
+
+#: ../../mod/profiles.php:391
+msgid "Religious Views:"
+msgstr ""
+
+#: ../../mod/profiles.php:392
+msgid "Public Keywords:"
+msgstr ""
+
+#: ../../mod/profiles.php:393
+msgid "Private Keywords:"
+msgstr ""
+
+#: ../../mod/profiles.php:394
+msgid "Example: fishing photography software"
+msgstr ""
+
+#: ../../mod/profiles.php:395
+msgid "(Used for suggesting potential friends, can be seen by others)"
+msgstr ""
+
+#: ../../mod/profiles.php:396
+msgid "(Used for searching profiles, never shown to others)"
+msgstr ""
+
+#: ../../mod/profiles.php:397
+msgid "Tell us about yourself..."
+msgstr ""
+
+#: ../../mod/profiles.php:398
+msgid "Hobbies/Interests"
+msgstr ""
+
+#: ../../mod/profiles.php:399
+msgid "Contact information and Social Networks"
+msgstr ""
+
+#: ../../mod/profiles.php:400
+msgid "Musical interests"
+msgstr ""
+
+#: ../../mod/profiles.php:401
+msgid "Books, literature"
+msgstr ""
+
+#: ../../mod/profiles.php:402
+msgid "Television"
+msgstr ""
+
+#: ../../mod/profiles.php:403
+msgid "Film/dance/culture/entertainment"
+msgstr ""
+
+#: ../../mod/profiles.php:404
+msgid "Love/romance"
+msgstr ""
+
+#: ../../mod/profiles.php:405
+msgid "Work/employment"
+msgstr ""
+
+#: ../../mod/profiles.php:406
+msgid "School/education"
+msgstr ""
+
+#: ../../mod/profiles.php:411
+msgid ""
+"This is your public profile.
It may "
+"be visible to anybody using the internet."
+msgstr ""
+
+#: ../../mod/profiles.php:421 ../../mod/directory.php:91
+msgid "Age: "
+msgstr ""
+
+#: ../../mod/profiles.php:456 ../../include/nav.php:110
+msgid "Profiles"
+msgstr ""
+
+#: ../../mod/profiles.php:457
+msgid "Change profile photo"
+msgstr ""
+
+#: ../../mod/profiles.php:458
+msgid "Create New Profile"
+msgstr ""
+
+#: ../../mod/profiles.php:470
+msgid "Profile Image"
+msgstr ""
+
+#: ../../mod/settings.php:38
+msgid "Passwords do not match. Password unchanged."
+msgstr ""
+
+#: ../../mod/settings.php:43
+msgid "Empty passwords are not allowed. Password unchanged."
+msgstr ""
+
+#: ../../mod/settings.php:54
+msgid "Password changed."
+msgstr ""
+
+#: ../../mod/settings.php:56
+msgid "Password update failed. Please try again."
+msgstr ""
+
+#: ../../mod/settings.php:98
+msgid " Please use a shorter name."
+msgstr ""
+
+#: ../../mod/settings.php:100
+msgid " Name too short."
+msgstr ""
+
+#: ../../mod/settings.php:106
+msgid " Not valid email."
+msgstr ""
+
+#: ../../mod/settings.php:108
+msgid " Cannot change to that email."
+msgstr ""
+
+#: ../../mod/settings.php:166
+msgid "Settings updated."
+msgstr ""
+
+#: ../../mod/settings.php:216 ../../mod/settings.php:356
+msgid "Plugin Settings"
+msgstr ""
+
+#: ../../mod/settings.php:217 ../../mod/settings.php:355
+msgid "Account Settings"
+msgstr ""
+
+#: ../../mod/settings.php:223
+msgid "No Plugin settings configured"
+msgstr ""
+
+#: ../../mod/settings.php:262
+msgid "Normal Account"
+msgstr ""
+
+#: ../../mod/settings.php:263
+msgid "This account is a normal personal profile"
+msgstr ""
+
+#: ../../mod/settings.php:264
+msgid "Soapbox Account"
+msgstr ""
+
+#: ../../mod/settings.php:265
+msgid "Automatically approve all connection/friend requests as read-only fans"
+msgstr ""
+
+#: ../../mod/settings.php:266
+msgid "Community/Celebrity Account"
+msgstr ""
+
+#: ../../mod/settings.php:267
+msgid "Automatically approve all connection/friend requests as read-write fans"
+msgstr ""
+
+#: ../../mod/settings.php:268
+msgid "Automatic Friend Account"
+msgstr ""
+
+#: ../../mod/settings.php:269
+msgid "Automatically approve all connection/friend requests as friends"
+msgstr ""
+
+#: ../../mod/settings.php:278
+msgid "OpenID: "
+msgstr ""
+
+#: ../../mod/settings.php:278
+msgid " (Optional) Allow this OpenID to login to this account."
+msgstr ""
+
+#: ../../mod/settings.php:288
+msgid "Publish your default profile in site directory?"
+msgstr ""
+
+#: ../../mod/settings.php:300
+msgid "Publish your default profile in global social directory?"
+msgstr ""
+
+#: ../../mod/settings.php:316
+msgid "Profile is not published."
+msgstr ""
+
+#: ../../mod/settings.php:341
+msgid "Your profile address is"
+msgstr ""
+
+#: ../../mod/settings.php:351
+msgid "Export Personal Data"
+msgstr ""
+
+#: ../../mod/settings.php:357
+msgid "Basic Settings"
+msgstr ""
+
+#: ../../mod/settings.php:358 ../../include/profile_advanced.php:10
+msgid "Full Name:"
+msgstr ""
+
+#: ../../mod/settings.php:359
+msgid "Email Address:"
+msgstr ""
+
+#: ../../mod/settings.php:360
+msgid "Your Timezone:"
+msgstr ""
+
+#: ../../mod/settings.php:361
+msgid "Default Post Location:"
+msgstr ""
+
+#: ../../mod/settings.php:362
+msgid "Use Browser Location:"
+msgstr ""
+
+#: ../../mod/settings.php:363
+msgid "Display Theme:"
+msgstr ""
+
+#: ../../mod/settings.php:365
+msgid "Security and Privacy Settings"
+msgstr ""
+
+#: ../../mod/settings.php:366
+msgid "Maximum Friend Requests/Day:"
+msgstr ""
+
+#: ../../mod/settings.php:367
+msgid "(to prevent spam abuse)"
+msgstr ""
+
+#: ../../mod/settings.php:368
+msgid "Allow friends to post to your profile page:"
+msgstr ""
+
+#: ../../mod/settings.php:369
+msgid "Automatically expire (delete) posts older than"
+msgstr ""
+
+#: ../../mod/settings.php:370 ../../include/datetime.php:154
+msgid "days"
+msgstr ""
+
+#: ../../mod/settings.php:371
+msgid "Notification Settings"
+msgstr ""
+
+#: ../../mod/settings.php:372
+msgid "Send a notification email when:"
+msgstr ""
+
+#: ../../mod/settings.php:373
+msgid "You receive an introduction"
+msgstr ""
+
+#: ../../mod/settings.php:374
+msgid "Your introductions are confirmed"
+msgstr ""
+
+#: ../../mod/settings.php:375
+msgid "Someone writes on your profile wall"
+msgstr ""
+
+#: ../../mod/settings.php:376
+msgid "Someone writes a followup comment"
+msgstr ""
+
+#: ../../mod/settings.php:377
+msgid "You receive a private message"
+msgstr ""
+
+#: ../../mod/settings.php:378
+msgid "Password Settings"
+msgstr ""
+
+#: ../../mod/settings.php:379
+msgid "Leave password fields blank unless changing"
+msgstr ""
+
+#: ../../mod/settings.php:380
+msgid "New Password:"
+msgstr ""
+
+#: ../../mod/settings.php:381
+msgid "Confirm:"
+msgstr ""
+
+#: ../../mod/settings.php:382
+msgid "Advanced Page Settings"
+msgstr ""
+
+#: ../../mod/settings.php:397
+msgid "Default Post Permissions"
+msgstr ""
+
+#: ../../mod/search.php:62
+msgid "No results."
+msgstr ""
+
+#: ../../mod/search.php:140 ../../mod/network.php:346
+msgid "View in context"
+msgstr ""
+
+#: ../../mod/photos.php:30
msgid "Photo Albums"
msgstr ""
#: ../../mod/photos.php:34 ../../mod/photos.php:106 ../../mod/photos.php:781
-#: ../../mod/photos.php:850 ../../mod/photos.php:865 ../../mod/photos.php:1233
-#: ../../mod/photos.php:1244 ../../include/Photo.php:225
+#: ../../mod/photos.php:850 ../../mod/photos.php:865 ../../mod/photos.php:1235
+#: ../../mod/photos.php:1246 ../../include/Photo.php:225
#: ../../include/Photo.php:232 ../../include/Photo.php:239
#: ../../include/items.php:1028 ../../include/items.php:1031
-#: ../../include/items.php:1034 ../../wip/photos.php:35
-#: ../../wip/photos.php:98 ../../wip/photos.php:731 ../../wip/photos.php:785
-#: ../../wip/photos.php:800 ../../wip/photos.php:1111
-#: ../../wip/photos.php:1122 ../../wip/photos-chris.php:45
-#: ../../wip/photos-chris.php:118 ../../wip/photos-chris.php:778
-#: ../../wip/photos-chris.php:832 ../../wip/photos-chris.php:847
-#: ../../wip/photos-chris.php:1158 ../../wip/photos-chris.php:1169
+#: ../../include/items.php:1034
msgid "Contact Photos"
msgstr ""
-#: ../../mod/photos.php:85 ../../mod/photos.php:773 ../../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:211
-#: ../../mod/manage.php:75 ../../mod/network.php:6 ../../mod/group.php:19
-#: ../../mod/viewcontacts.php:13 ../../mod/register.php:25
-#: ../../mod/regmod.php:16 ../../mod/item.php:57 ../../mod/item.php:668
-#: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:133
-#: ../../mod/profile_photo.php:139 ../../mod/profile_photo.php:150
-#: ../../mod/message.php:8 ../../mod/message.php:116
-#: ../../mod/wall_upload.php:42 ../../mod/follow.php:8
-#: ../../mod/display.php:309 ../../mod/profiles.php:7
-#: ../../mod/profiles.php:227 ../../mod/invite.php:13 ../../mod/invite.php:50
-#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:110
-#: ../../wip/photos.php:77 ../../wip/photos.php:723
-#: ../../wip/photos-chris.php:97 ../../wip/photos-chris.php:770
-#: ../../index.php:265
-msgid "Permission denied."
-msgstr ""
-
-#: ../../mod/photos.php:95 ../../wip/photos.php:87
-#: ../../wip/photos-chris.php:107
+#: ../../mod/photos.php:95
msgid "Contact information unavailable"
msgstr ""
-#: ../../mod/photos.php:106 ../../mod/photos.php:531 ../../mod/photos.php:850
-#: ../../mod/photos.php:865 ../../mod/register.php:285
-#: ../../mod/register.php:292 ../../mod/register.php:299
-#: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65
-#: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:155
-#: ../../mod/profile_photo.php:227 ../../mod/profile_photo.php:236
-#: ../../wip/photos.php:98 ../../wip/photos.php:493 ../../wip/photos.php:785
-#: ../../wip/photos.php:800 ../../wip/photos-chris.php:118
-#: ../../wip/photos-chris.php:525 ../../wip/photos-chris.php:832
-#: ../../wip/photos-chris.php:847
-msgid "Profile Photos"
-msgstr ""
-
-#: ../../mod/photos.php:116 ../../wip/photos.php:108
-#: ../../wip/photos-chris.php:128
+#: ../../mod/photos.php:116
msgid "Album not found."
msgstr ""
-#: ../../mod/photos.php:134 ../../mod/photos.php:859 ../../wip/photos.php:126
-#: ../../wip/photos.php:794 ../../wip/photos-chris.php:146
-#: ../../wip/photos-chris.php:841
+#: ../../mod/photos.php:134 ../../mod/photos.php:859
msgid "Delete Album"
msgstr ""
-#: ../../mod/photos.php:197 ../../mod/photos.php:1067 ../../wip/photos.php:192
-#: ../../wip/photos.php:955 ../../wip/photos-chris.php:212
-#: ../../wip/photos-chris.php:1002
+#: ../../mod/photos.php:197 ../../mod/photos.php:1067
msgid "Delete Photo"
msgstr ""
-#: ../../mod/photos.php:469 ../../wip/photos.php:442
-#: ../../wip/photos-chris.php:462
+#: ../../mod/photos.php:469
msgid "was tagged in a"
msgstr ""
-#: ../../mod/photos.php:469 ../../mod/like.php:110 ../../wip/photos.php:442
-#: ../../wip/photos-chris.php:462
+#: ../../mod/photos.php:469 ../../mod/like.php:110
msgid "photo"
msgstr ""
-#: ../../mod/photos.php:469 ../../wip/photos.php:442
-#: ../../wip/photos-chris.php:462
+#: ../../mod/photos.php:469
msgid "by"
msgstr ""
#: ../../mod/photos.php:559 ../../addon/js_upload/js_upload.php:306
-#: ../../wip/photos.php:511 ../../wip/photos-chris.php:555
msgid "Image exceeds size limit of "
msgstr ""
-#: ../../mod/photos.php:571 ../../mod/profile_photo.php:118
-#: ../../mod/wall_upload.php:65 ../../wip/photos.php:520
-#: ../../wip/photos-chris.php:567
-msgid "Unable to process image."
-msgstr ""
-
-#: ../../mod/photos.php:589 ../../mod/profile_photo.php:232
-#: ../../mod/wall_upload.php:82 ../../wip/photos.php:537
-#: ../../wip/photos-chris.php:585
-msgid "Image upload failed."
-msgstr ""
-
-#: ../../mod/photos.php:661 ../../wip/photos.php:611
-#: ../../wip/photos-chris.php:658
+#: ../../mod/photos.php:661
msgid "No photos selected"
msgstr ""
-#: ../../mod/photos.php:801 ../../mod/photos.php:858 ../../mod/photos.php:1066
-#: ../../mod/install.php:123 ../../mod/manage.php:106 ../../mod/group.php:97
-#: ../../mod/group.php:155 ../../mod/invite.php:64
-#: ../../addon/facebook/facebook.php:151
-#: ../../addon/randplace/randplace.php:179
-#: ../../addon/statusnet/statusnet.php:163
-#: ../../addon/statusnet/statusnet.php:189
-#: ../../addon/statusnet/statusnet.php:207 ../../addon/twitter/twitter.php:156
-#: ../../addon/twitter/twitter.php:175 ../../wip/photos.php:754
-#: ../../wip/photos.php:793 ../../wip/photos.php:954
-#: ../../wip/addon/randplace/randplace.php:178 ../../wip/photos-chris.php:801
-#: ../../wip/photos-chris.php:840 ../../wip/photos-chris.php:1001
-msgid "Submit"
-msgstr ""
-
-#: ../../mod/photos.php:808 ../../wip/photos.php:742
-#: ../../wip/photos-chris.php:789
+#: ../../mod/photos.php:808
msgid "Upload Photos"
msgstr ""
-#: ../../mod/photos.php:811 ../../mod/photos.php:854 ../../wip/photos.php:745
-#: ../../wip/photos.php:789 ../../wip/photos-chris.php:792
-#: ../../wip/photos-chris.php:836
+#: ../../mod/photos.php:811 ../../mod/photos.php:854
msgid "New album name: "
msgstr ""
-#: ../../mod/photos.php:812 ../../wip/photos.php:746
-#: ../../wip/photos-chris.php:793
+#: ../../mod/photos.php:812
msgid "or existing album name: "
msgstr ""
-#: ../../mod/photos.php:814 ../../mod/photos.php:1062 ../../wip/photos.php:749
-#: ../../wip/photos-chris.php:796
+#: ../../mod/photos.php:814 ../../mod/photos.php:1062
msgid "Permissions"
msgstr ""
-#: ../../mod/photos.php:869 ../../wip/photos.php:804
-#: ../../wip/photos-chris.php:851
+#: ../../mod/photos.php:869
msgid "Edit Album"
msgstr ""
-#: ../../mod/photos.php:879 ../../mod/photos.php:1263 ../../wip/photos.php:814
-#: ../../wip/photos.php:1141 ../../wip/photos-chris.php:861
-#: ../../wip/photos-chris.php:1188
+#: ../../mod/photos.php:879 ../../mod/photos.php:1265
msgid "View Photo"
msgstr ""
-#: ../../mod/photos.php:909 ../../wip/photos.php:843
-#: ../../wip/photos-chris.php:890
+#: ../../mod/photos.php:909
msgid "Photo not available"
msgstr ""
-#: ../../mod/photos.php:956 ../../wip/photos.php:864
-#: ../../wip/photos-chris.php:911
+#: ../../mod/photos.php:956
msgid "Edit photo"
msgstr ""
@@ -220,17 +1175,11 @@ msgstr ""
msgid "Use as profile photo"
msgstr ""
-#: ../../mod/photos.php:962 ../../mod/network.php:443
-#: ../../mod/profile.php:370 ../../mod/display.php:149
-msgid "Private Message"
-msgstr ""
-
#: ../../mod/photos.php:969
msgid "<< Prev"
msgstr ""
-#: ../../mod/photos.php:973 ../../wip/photos.php:870
-#: ../../wip/photos-chris.php:917
+#: ../../mod/photos.php:973
msgid "View Full Size"
msgstr ""
@@ -238,13 +1187,11 @@ msgstr ""
msgid "Next >>"
msgstr ""
-#: ../../mod/photos.php:1036 ../../wip/photos.php:928
-#: ../../wip/photos-chris.php:975
+#: ../../mod/photos.php:1036
msgid "Tags: "
msgstr ""
-#: ../../mod/photos.php:1046 ../../wip/photos.php:938
-#: ../../wip/photos-chris.php:985
+#: ../../mod/photos.php:1046
msgid "[Remove any tag]"
msgstr ""
@@ -252,74 +1199,54 @@ msgstr ""
msgid "New album name"
msgstr ""
-#: ../../mod/photos.php:1058 ../../wip/photos.php:948
-#: ../../wip/photos-chris.php:995
+#: ../../mod/photos.php:1058
msgid "Caption"
msgstr ""
-#: ../../mod/photos.php:1060 ../../wip/photos.php:950
-#: ../../wip/photos-chris.php:997
+#: ../../mod/photos.php:1060
msgid "Add a Tag"
msgstr ""
-#: ../../mod/photos.php:1064 ../../wip/photos.php:952
-#: ../../wip/photos-chris.php:999
+#: ../../mod/photos.php:1064
msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
msgstr ""
-#: ../../mod/photos.php:1084 ../../mod/network.php:487
-#: ../../mod/profile.php:377 ../../mod/display.php:156
-msgid "I like this (toggle)"
-msgstr ""
-
-#: ../../mod/photos.php:1085 ../../mod/network.php:488
-#: ../../mod/profile.php:378 ../../mod/display.php:157
-msgid "I don't like this (toggle)"
-msgstr ""
-
-#: ../../mod/photos.php:1086 ../../mod/network.php:105
-#: ../../mod/network.php:489 ../../mod/profile.php:165
-#: ../../mod/profile.php:379 ../../mod/display.php:158
-msgid "Share"
-msgstr ""
-
-#: ../../mod/photos.php:1087 ../../mod/editpost.php:70
-#: ../../mod/network.php:114 ../../mod/network.php:490
-#: ../../mod/message.php:190 ../../mod/message.php:324
-#: ../../mod/profile.php:174 ../../mod/profile.php:380
-#: ../../mod/display.php:159
-msgid "Please wait"
-msgstr ""
-
-#: ../../mod/photos.php:1106 ../../mod/photos.php:1146
-#: ../../mod/photos.php:1175 ../../mod/network.php:503
-#: ../../mod/profile.php:392 ../../mod/display.php:171
-#: ../../wip/photos.php:986 ../../wip/photos.php:1025
-#: ../../wip/photos.php:1053 ../../wip/photos-chris.php:1033
-#: ../../wip/photos-chris.php:1072 ../../wip/photos-chris.php:1100
-msgid "This is you"
-msgstr ""
-
-#: ../../mod/photos.php:1203 ../../mod/network.php:512 ../../mod/group.php:141
-#: ../../mod/profile.php:438 ../../mod/display.php:238
-msgid "Delete"
-msgstr ""
-
-#: ../../mod/photos.php:1249 ../../wip/photos.php:1127
-#: ../../wip/photos-chris.php:1174
+#: ../../mod/photos.php:1251
msgid "Recent Photos"
msgstr ""
-#: ../../mod/photos.php:1253 ../../wip/photos.php:1131
-#: ../../wip/photos-chris.php:1178
+#: ../../mod/photos.php:1255
msgid "Upload New Photos"
msgstr ""
-#: ../../mod/photos.php:1269 ../../wip/photos.php:1147
-#: ../../wip/photos-chris.php:1194
+#: ../../mod/photos.php:1271
msgid "View Album"
msgstr ""
+#: ../../mod/display.php:15 ../../mod/display.php:315 ../../mod/item.php:598
+msgid "Item not found."
+msgstr ""
+
+#: ../../mod/display.php:265 ../../mod/network.php:564
+msgid "View $owner_name's profile"
+msgstr ""
+
+#: ../../mod/display.php:266 ../../mod/network.php:565
+msgid "to"
+msgstr ""
+
+#: ../../mod/display.php:267 ../../mod/network.php:566
+msgid "Wall-to-Wall"
+msgstr ""
+
+#: ../../mod/display.php:268 ../../mod/network.php:567
+msgid "via Wall-To-Wall:"
+msgstr ""
+
+#: ../../mod/display.php:308
+msgid "Item has been removed."
+msgstr ""
+
#: ../../mod/editpost.php:17 ../../mod/editpost.php:27
msgid "Item not found"
msgstr ""
@@ -328,61 +1255,694 @@ msgstr ""
msgid "Edit post"
msgstr ""
-#: ../../mod/editpost.php:62 ../../mod/network.php:511
-#: ../../mod/profile.php:416 ../../mod/display.php:222
-msgid "Edit"
+#: ../../mod/invite.php:28
+#, php-format
+msgid "%s : Not a valid email address."
msgstr ""
-#: ../../mod/editpost.php:63 ../../mod/network.php:106
-#: ../../mod/message.php:188 ../../mod/message.php:322
-#: ../../mod/profile.php:166
-msgid "Upload photo"
+#: ../../mod/invite.php:32
+#, php-format
+msgid "Please join my network on %s"
msgstr ""
-#: ../../mod/editpost.php:64 ../../mod/network.php:107
-#: ../../mod/message.php:189 ../../mod/message.php:323
-#: ../../mod/profile.php:167
-msgid "Insert web link"
+#: ../../mod/invite.php:38
+#, php-format
+msgid "%s : Message delivery failed."
msgstr ""
-#: ../../mod/editpost.php:65 ../../mod/network.php:108
-#: ../../mod/profile.php:168
-msgid "Insert YouTube video"
+#: ../../mod/invite.php:42
+#, php-format
+msgid "%d message sent."
+msgid_plural "%d messages sent."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../mod/invite.php:57
+msgid "Send invitations"
msgstr ""
-#: ../../mod/editpost.php:66 ../../mod/network.php:109
-#: ../../mod/profile.php:169
-msgid "Insert Vorbis [.ogg] video"
+#: ../../mod/invite.php:58
+msgid "Enter email addresses, one per line:"
msgstr ""
-#: ../../mod/editpost.php:67 ../../mod/network.php:110
-#: ../../mod/profile.php:170
-msgid "Insert Vorbis [.ogg] audio"
+#: ../../mod/invite.php:59 ../../mod/message.php:185 ../../mod/message.php:319
+msgid "Your message:"
msgstr ""
-#: ../../mod/editpost.php:68 ../../mod/network.php:111
-#: ../../mod/profile.php:171
-msgid "Set your location"
+#: ../../mod/invite.php:60
+#, php-format
+msgid "Please join my social network on %s"
msgstr ""
-#: ../../mod/editpost.php:69 ../../mod/network.php:112
-#: ../../mod/profile.php:172
-msgid "Clear browser location"
+#: ../../mod/invite.php:61
+msgid "To accept this invitation, please visit:"
msgstr ""
-#: ../../mod/editpost.php:71 ../../mod/network.php:115
-#: ../../mod/profile.php:175
-msgid "Permission settings"
+#: ../../mod/invite.php:62
+msgid ""
+"Once you have registered, please connect with me via my profile page at:"
msgstr ""
-#: ../../mod/editpost.php:77 ../../mod/network.php:121
-#: ../../mod/profile.php:182
-msgid "CC: email addresses"
+#: ../../mod/contacts.php:12
+msgid "Invite Friends"
msgstr ""
-#: ../../mod/editpost.php:79 ../../mod/network.php:123
-#: ../../mod/profile.php:184
-msgid "Example: bob@example.com, mary@example.com"
+#: ../../mod/contacts.php:15
+msgid "Find People With Shared Interests"
+msgstr ""
+
+#: ../../mod/contacts.php:19
+msgid "Connect/Follow"
+msgstr ""
+
+#: ../../mod/contacts.php:20
+msgid "Example: bob@example.com, http://example.com/barbara"
+msgstr ""
+
+#: ../../mod/contacts.php:21
+msgid "Follow"
+msgstr ""
+
+#: ../../mod/contacts.php:43 ../../mod/contacts.php:124
+msgid "Could not access contact record."
+msgstr ""
+
+#: ../../mod/contacts.php:57
+msgid "Could not locate selected profile."
+msgstr ""
+
+#: ../../mod/contacts.php:88
+msgid "Contact updated."
+msgstr ""
+
+#: ../../mod/contacts.php:90 ../../mod/dfrn_request.php:402
+msgid "Failed to update contact record."
+msgstr ""
+
+#: ../../mod/contacts.php:146
+msgid "Contact has been blocked"
+msgstr ""
+
+#: ../../mod/contacts.php:146
+msgid "Contact has been unblocked"
+msgstr ""
+
+#: ../../mod/contacts.php:160
+msgid "Contact has been ignored"
+msgstr ""
+
+#: ../../mod/contacts.php:160
+msgid "Contact has been unignored"
+msgstr ""
+
+#: ../../mod/contacts.php:181
+msgid "stopped following"
+msgstr ""
+
+#: ../../mod/contacts.php:200
+msgid "Contact has been removed."
+msgstr ""
+
+#: ../../mod/contacts.php:214 ../../mod/dfrn_confirm.php:114
+msgid "Contact not found."
+msgstr ""
+
+#: ../../mod/contacts.php:228 ../../mod/contacts.php:360
+msgid "Mutual Friendship"
+msgstr ""
+
+#: ../../mod/contacts.php:232 ../../mod/contacts.php:364
+msgid "is a fan of yours"
+msgstr ""
+
+#: ../../mod/contacts.php:237 ../../mod/contacts.php:368
+msgid "you are a fan of"
+msgstr ""
+
+#: ../../mod/contacts.php:252
+msgid "Privacy Unavailable"
+msgstr ""
+
+#: ../../mod/contacts.php:253
+msgid "Private communications are not available for this contact."
+msgstr ""
+
+#: ../../mod/contacts.php:256
+msgid "Never"
+msgstr ""
+
+#: ../../mod/contacts.php:260
+msgid "(Update was successful)"
+msgstr ""
+
+#: ../../mod/contacts.php:260
+msgid "(Update was not successful)"
+msgstr ""
+
+#: ../../mod/contacts.php:263
+msgid "Contact Editor"
+msgstr ""
+
+#: ../../mod/contacts.php:265
+msgid "Profile Visibility"
+msgstr ""
+
+#: ../../mod/contacts.php:266
+#, php-format
+msgid ""
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
+msgstr ""
+
+#: ../../mod/contacts.php:267
+msgid "Contact Information / Notes"
+msgstr ""
+
+#: ../../mod/contacts.php:268
+msgid "Online Reputation"
+msgstr ""
+
+#: ../../mod/contacts.php:269
+msgid ""
+"Occasionally your friends may wish to inquire about this person's online "
+"legitimacy."
+msgstr ""
+
+#: ../../mod/contacts.php:270
+msgid ""
+"You may help them choose whether or not to interact with this person by "
+"providing a reputation to guide them."
+msgstr ""
+
+#: ../../mod/contacts.php:271
+msgid ""
+"Please take a moment to elaborate on this selection if you feel it could be "
+"helpful to others."
+msgstr ""
+
+#: ../../mod/contacts.php:272
+msgid "Visit $name's profile"
+msgstr ""
+
+#: ../../mod/contacts.php:273
+msgid "Block/Unblock contact"
+msgstr ""
+
+#: ../../mod/contacts.php:274
+msgid "Ignore contact"
+msgstr ""
+
+#: ../../mod/contacts.php:275
+msgid "Delete contact"
+msgstr ""
+
+#: ../../mod/contacts.php:277
+msgid "Last updated: "
+msgstr ""
+
+#: ../../mod/contacts.php:278
+msgid "Update public posts: "
+msgstr ""
+
+#: ../../mod/contacts.php:280
+msgid "Update now"
+msgstr ""
+
+#: ../../mod/contacts.php:283
+msgid "Unblock this contact"
+msgstr ""
+
+#: ../../mod/contacts.php:283
+msgid "Block this contact"
+msgstr ""
+
+#: ../../mod/contacts.php:284
+msgid "Unignore this contact"
+msgstr ""
+
+#: ../../mod/contacts.php:284
+msgid "Ignore this contact"
+msgstr ""
+
+#: ../../mod/contacts.php:287
+msgid "Currently blocked"
+msgstr ""
+
+#: ../../mod/contacts.php:288
+msgid "Currently ignored"
+msgstr ""
+
+#: ../../mod/contacts.php:319 ../../include/acl_selectors.php:140
+#: ../../include/acl_selectors.php:155 ../../include/nav.php:112
+msgid "Contacts"
+msgstr ""
+
+#: ../../mod/contacts.php:321
+msgid "Show Blocked Connections"
+msgstr ""
+
+#: ../../mod/contacts.php:321
+msgid "Hide Blocked Connections"
+msgstr ""
+
+#: ../../mod/contacts.php:323 ../../mod/directory.php:38
+msgid "Finding: "
+msgstr ""
+
+#: ../../mod/contacts.php:324 ../../mod/directory.php:40
+msgid "Find"
+msgstr ""
+
+#: ../../mod/contacts.php:384 ../../mod/viewcontacts.php:44
+msgid "Visit $username's profile"
+msgstr ""
+
+#: ../../mod/lockview.php:39
+msgid "Remote privacy information not available."
+msgstr ""
+
+#: ../../mod/lockview.php:43
+msgid "Visible to:"
+msgstr ""
+
+#: ../../mod/register.php:47
+msgid "Invalid OpenID url"
+msgstr ""
+
+#: ../../mod/register.php:62
+msgid "Please enter the required information."
+msgstr ""
+
+#: ../../mod/register.php:74
+msgid "Please use a shorter name."
+msgstr ""
+
+#: ../../mod/register.php:76
+msgid "Name too short."
+msgstr ""
+
+#: ../../mod/register.php:89
+msgid "That doesn't appear to be your full (First Last) name."
+msgstr ""
+
+#: ../../mod/register.php:92
+msgid "Your email domain is not among those allowed on this site."
+msgstr ""
+
+#: ../../mod/register.php:95
+msgid "Not a valid email address."
+msgstr ""
+
+#: ../../mod/register.php:101
+msgid "Cannot use that email."
+msgstr ""
+
+#: ../../mod/register.php:106
+msgid ""
+"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
+"must also begin with a letter."
+msgstr ""
+
+#: ../../mod/register.php:112 ../../mod/register.php:212
+msgid "Nickname is already registered. Please choose another."
+msgstr ""
+
+#: ../../mod/register.php:131
+msgid "SERIOUS ERROR: Generation of security keys failed."
+msgstr ""
+
+#: ../../mod/register.php:198
+msgid "An error occurred during registration. Please try again."
+msgstr ""
+
+#: ../../mod/register.php:234
+msgid "An error occurred creating your default profile. Please try again."
+msgstr ""
+
+#: ../../mod/register.php:333
+msgid ""
+"Registration successful. Please check your email for further instructions."
+msgstr ""
+
+#: ../../mod/register.php:337
+msgid "Failed to send email message. Here is the message that failed."
+msgstr ""
+
+#: ../../mod/register.php:342
+msgid "Your registration can not be processed."
+msgstr ""
+
+#: ../../mod/register.php:365
+#, php-format
+msgid "Registration request at %s"
+msgstr ""
+
+#: ../../mod/register.php:369
+msgid "Your registration is pending approval by the site owner."
+msgstr ""
+
+#: ../../mod/register.php:417
+msgid ""
+"You may (optionally) fill in this form via OpenID by supplying your OpenID "
+"and clicking 'Register'."
+msgstr ""
+
+#: ../../mod/register.php:418
+msgid ""
+"If you are not familiar with OpenID, please leave that field blank and fill "
+"in the rest of the items."
+msgstr ""
+
+#: ../../mod/register.php:419
+msgid "Your OpenID (optional): "
+msgstr ""
+
+#: ../../mod/register.php:433
+msgid "Include your profile in member directory?"
+msgstr ""
+
+#: ../../mod/register.php:449
+msgid "Registration"
+msgstr ""
+
+#: ../../mod/register.php:457
+msgid "Your Full Name (e.g. Joe Smith): "
+msgstr ""
+
+#: ../../mod/register.php:458
+msgid "Your Email Address: "
+msgstr ""
+
+#: ../../mod/register.php:459
+msgid ""
+"Choose a profile nickname. This must begin with a text character. Your "
+"profile address on this site will then be 'nickname@$sitename"
+"strong>'."
+msgstr ""
+
+#: ../../mod/register.php:460
+msgid "Choose a nickname: "
+msgstr ""
+
+#: ../../mod/oexchange.php:27
+msgid "Post successful."
+msgstr ""
+
+#: ../../mod/install.php:33
+msgid "Could not create/connect to database."
+msgstr ""
+
+#: ../../mod/install.php:38
+msgid "Connected to database."
+msgstr ""
+
+#: ../../mod/install.php:72
+msgid "Proceed with Installation"
+msgstr ""
+
+#: ../../mod/install.php:74
+msgid "Your Friendika site database has been installed."
+msgstr ""
+
+#: ../../mod/install.php:75
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
+msgstr ""
+
+#: ../../mod/install.php:76 ../../mod/install.php:86 ../../mod/install.php:199
+msgid "Please see the file \"INSTALL.txt\"."
+msgstr ""
+
+#: ../../mod/install.php:78
+msgid "Proceed to registration"
+msgstr ""
+
+#: ../../mod/install.php:84
+msgid "Database import failed."
+msgstr ""
+
+#: ../../mod/install.php:85
+msgid ""
+"You may need to import the file \"database.sql\" manually using phpmyadmin "
+"or mysql."
+msgstr ""
+
+#: ../../mod/install.php:98
+msgid "Welcome to Friendika."
+msgstr ""
+
+#: ../../mod/install.php:121
+msgid "Friendika Social Network"
+msgstr ""
+
+#: ../../mod/install.php:122
+msgid "Installation"
+msgstr ""
+
+#: ../../mod/install.php:123
+msgid ""
+"In order to install Friendika we need to know how to contact your database."
+msgstr ""
+
+#: ../../mod/install.php:124
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
+msgstr ""
+
+#: ../../mod/install.php:125
+msgid ""
+"The database you specify below must already exist. If it does not, please "
+"create it before continuing."
+msgstr ""
+
+#: ../../mod/install.php:126
+msgid "Database Server Name"
+msgstr ""
+
+#: ../../mod/install.php:127
+msgid "Database Login Name"
+msgstr ""
+
+#: ../../mod/install.php:128
+msgid "Database Login Password"
+msgstr ""
+
+#: ../../mod/install.php:129
+msgid "Database Name"
+msgstr ""
+
+#: ../../mod/install.php:130
+msgid "Please select a default timezone for your website"
+msgstr ""
+
+#: ../../mod/install.php:148
+msgid "Could not find a command line version of PHP in the web server PATH."
+msgstr ""
+
+#: ../../mod/install.php:149
+msgid ""
+"This is required. Please adjust the configuration file .htconfig.php "
+"accordingly."
+msgstr ""
+
+#: ../../mod/install.php:156
+msgid ""
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
+msgstr ""
+
+#: ../../mod/install.php:157
+msgid "This is required for message delivery to work."
+msgstr ""
+
+#: ../../mod/install.php:179
+msgid ""
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
+msgstr ""
+
+#: ../../mod/install.php:180
+msgid ""
+"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
+"installation.php\"."
+msgstr ""
+
+#: ../../mod/install.php:189
+msgid ""
+"Error: Apache webserver mod-rewrite module is required but not installed."
+msgstr ""
+
+#: ../../mod/install.php:191
+msgid "Error: libCURL PHP module required but not installed."
+msgstr ""
+
+#: ../../mod/install.php:193
+msgid ""
+"Error: GD graphics PHP module with JPEG support required but not installed."
+msgstr ""
+
+#: ../../mod/install.php:195
+msgid "Error: openssl PHP module required but not installed."
+msgstr ""
+
+#: ../../mod/install.php:197
+msgid "Error: mysqli PHP module required but not installed."
+msgstr ""
+
+#: ../../mod/install.php:208
+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 ""
+
+#: ../../mod/install.php:209
+msgid ""
+"This is most often a permission setting, as the web server may not be able "
+"to write files in your folder - even if you can."
+msgstr ""
+
+#: ../../mod/install.php:210
+msgid ""
+"Please check with your site documentation or support people to see if this "
+"situation can be corrected."
+msgstr ""
+
+#: ../../mod/install.php:211
+msgid ""
+"If not, you may be required to perform a manual installation. Please see the "
+"file \"INSTALL.txt\" for instructions."
+msgstr ""
+
+#: ../../mod/install.php:220
+msgid ""
+"The database configuration file \".htconfig.php\" could not be written. "
+"Please use the enclosed text to create a configuration file in your web "
+"server root."
+msgstr ""
+
+#: ../../mod/install.php:235
+msgid "Errors encountered creating database tables."
+msgstr ""
+
+#: ../../mod/network.php:18
+msgid "Normal View"
+msgstr ""
+
+#: ../../mod/network.php:20
+msgid "New Item View"
+msgstr ""
+
+#: ../../mod/network.php:59
+#, php-format
+msgid "%d member"
+msgid_plural "%d members"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../mod/network.php:60
+#, php-format
+msgid "Warning: This group contains %s from an insecure network."
+msgstr ""
+
+#: ../../mod/network.php:61
+msgid "Private messages to this group are at risk of public disclosure."
+msgstr ""
+
+#: ../../mod/network.php:166
+msgid "No such group"
+msgstr ""
+
+#: ../../mod/network.php:177
+msgid "Group is empty"
+msgstr ""
+
+#: ../../mod/network.php:181
+msgid "Group: "
+msgstr ""
+
+#: ../../mod/network.php:409
+msgid "See more posts like this"
+msgstr ""
+
+#: ../../mod/notifications.php:28
+msgid "Invalid request identifier."
+msgstr ""
+
+#: ../../mod/notifications.php:31 ../../mod/notifications.php:133
+msgid "Discard"
+msgstr ""
+
+#: ../../mod/notifications.php:41 ../../mod/notifications.php:132
+msgid "Ignore"
+msgstr ""
+
+#: ../../mod/notifications.php:68
+msgid "Pending Friend/Connect Notifications"
+msgstr ""
+
+#: ../../mod/notifications.php:72
+msgid "Show Ignored Requests"
+msgstr ""
+
+#: ../../mod/notifications.php:72
+msgid "Hide Ignored Requests"
+msgstr ""
+
+#: ../../mod/notifications.php:104
+msgid "Claims to be known to you: "
+msgstr ""
+
+#: ../../mod/notifications.php:104
+msgid "yes"
+msgstr ""
+
+#: ../../mod/notifications.php:104
+msgid "no"
+msgstr ""
+
+#: ../../mod/notifications.php:110
+msgid "Approve as: "
+msgstr ""
+
+#: ../../mod/notifications.php:111
+msgid "Friend"
+msgstr ""
+
+#: ../../mod/notifications.php:112
+msgid "Fan/Admirer"
+msgstr ""
+
+#: ../../mod/notifications.php:119
+msgid "Notification type: "
+msgstr ""
+
+#: ../../mod/notifications.php:120
+msgid "Friend/Connect Request"
+msgstr ""
+
+#: ../../mod/notifications.php:120
+msgid "New Follower"
+msgstr ""
+
+#: ../../mod/notifications.php:130 ../../mod/notifications.php:153
+msgid "Approve"
+msgstr ""
+
+#: ../../mod/notifications.php:139
+msgid "No notifications."
+msgstr ""
+
+#: ../../mod/notifications.php:143
+msgid "User registrations waiting for confirm"
+msgstr ""
+
+#: ../../mod/notifications.php:154
+msgid "Deny"
+msgstr ""
+
+#: ../../mod/notifications.php:159
+msgid "No registrations."
msgstr ""
#: ../../mod/dfrn_request.php:92
@@ -458,10 +2018,6 @@ msgstr ""
msgid "Disallowed profile URL."
msgstr ""
-#: ../../mod/dfrn_request.php:402 ../../mod/contacts.php:90
-msgid "Failed to update contact record."
-msgstr ""
-
#: ../../mod/dfrn_request.php:423
msgid "Your introduction has been sent."
msgstr ""
@@ -498,15 +2054,6 @@ msgstr ""
msgid "Introduction received at "
msgstr ""
-#: ../../mod/dfrn_request.php:547 ../../mod/lostpass.php:39
-#: ../../mod/register.php:329 ../../mod/register.php:366
-#: ../../mod/regmod.php:93 ../../mod/item.php:475 ../../mod/item.php:498
-#: ../../mod/dfrn_notify.php:177 ../../mod/dfrn_notify.php:392
-#: ../../mod/dfrn_notify.php:478 ../../mod/dfrn_confirm.php:649
-#: ../../include/items.php:1420
-msgid "Administrator"
-msgstr ""
-
#: ../../mod/dfrn_request.php:617
msgid "Friend/Connection Request"
msgstr ""
@@ -519,14 +2066,6 @@ msgstr ""
msgid "Does $name know you?"
msgstr ""
-#: ../../mod/dfrn_request.php:620 ../../mod/register.php:436
-msgid "Yes"
-msgstr ""
-
-#: ../../mod/dfrn_request.php:621 ../../mod/register.php:437
-msgid "No"
-msgstr ""
-
#: ../../mod/dfrn_request.php:622
msgid "Add a personal note:"
msgstr ""
@@ -561,410 +2100,23 @@ msgstr ""
msgid "Submit Request"
msgstr ""
-#: ../../mod/install.php:33
-msgid "Could not create/connect to database."
+#: ../../mod/dfrn_request.php:630 ../../mod/tagrm.php:11
+#: ../../mod/tagrm.php:94 ../../addon/js_upload/js_upload.php:41
+msgid "Cancel"
msgstr ""
-#: ../../mod/install.php:38
-msgid "Connected to database."
+#: ../../mod/like.php:110
+msgid "status"
msgstr ""
-#: ../../mod/install.php:72
-msgid "Proceed with Installation"
-msgstr ""
-
-#: ../../mod/install.php:74
-msgid "Your Friendika site database has been installed."
-msgstr ""
-
-#: ../../mod/install.php:75
-msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
-msgstr ""
-
-#: ../../mod/install.php:76 ../../mod/install.php:86 ../../mod/install.php:189
-msgid "Please see the file \"INSTALL.txt\"."
-msgstr ""
-
-#: ../../mod/install.php:78
-msgid "Proceed to registration"
-msgstr ""
-
-#: ../../mod/install.php:84
-msgid "Database import failed."
-msgstr ""
-
-#: ../../mod/install.php:85
-msgid ""
-"You may need to import the file \"database.sql\" manually using phpmyadmin "
-"or mysql."
-msgstr ""
-
-#: ../../mod/install.php:98
-msgid "Welcome to Friendika."
-msgstr ""
-
-#: ../../mod/install.php:138
-msgid "Could not find a command line version of PHP in the web server PATH."
-msgstr ""
-
-#: ../../mod/install.php:139
-msgid ""
-"This is required. Please adjust the configuration file .htconfig.php "
-"accordingly."
-msgstr ""
-
-#: ../../mod/install.php:146
-msgid ""
-"The command line version of PHP on your system does not have "
-"\"register_argc_argv\" enabled."
-msgstr ""
-
-#: ../../mod/install.php:147
-msgid "This is required for message delivery to work."
-msgstr ""
-
-#: ../../mod/install.php:169
-msgid ""
-"Error: the \"openssl_pkey_new\" function on this system is not able to "
-"generate encryption keys"
-msgstr ""
-
-#: ../../mod/install.php:170
-msgid ""
-"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
-"installation.php\"."
-msgstr ""
-
-#: ../../mod/install.php:179
-msgid ""
-"Error: Apache webserver mod-rewrite module is required but not installed."
-msgstr ""
-
-#: ../../mod/install.php:181
-msgid "Error: libCURL PHP module required but not installed."
-msgstr ""
-
-#: ../../mod/install.php:183
-msgid ""
-"Error: GD graphics PHP module with JPEG support required but not installed."
-msgstr ""
-
-#: ../../mod/install.php:185
-msgid "Error: openssl PHP module required but not installed."
-msgstr ""
-
-#: ../../mod/install.php:187
-msgid "Error: mysqli PHP module required but not installed."
-msgstr ""
-
-#: ../../mod/install.php:198
-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 ""
-
-#: ../../mod/install.php:199
-msgid ""
-"This is most often a permission setting, as the web server may not be able "
-"to write files in your folder - even if you can."
-msgstr ""
-
-#: ../../mod/install.php:200
-msgid ""
-"Please check with your site documentation or support people to see if this "
-"situation can be corrected."
-msgstr ""
-
-#: ../../mod/install.php:201
-msgid ""
-"If not, you may be required to perform a manual installation. Please see the "
-"file \"INSTALL.txt\" for instructions."
-msgstr ""
-
-#: ../../mod/install.php:210
-msgid ""
-"The database configuration file \".htconfig.php\" could not be written. "
-"Please use the enclosed text to create a configuration file in your web "
-"server root."
-msgstr ""
-
-#: ../../mod/install.php:225
-msgid "Errors encountered creating database tables."
-msgstr ""
-
-#: ../../mod/match.php:10
-msgid "Profile Match"
-msgstr ""
-
-#: ../../mod/match.php:50
-msgid "No matches"
-msgstr ""
-
-#: ../../mod/lockview.php:39
-msgid "Remote privacy information not available."
-msgstr ""
-
-#: ../../mod/lockview.php:43
-msgid "Visible to:"
-msgstr ""
-
-#: ../../mod/home.php:23
+#: ../../mod/like.php:127
#, php-format
-msgid "Welcome to %s"
+msgid "%1$s likes %2$s's %3$s"
msgstr ""
-#: ../../mod/notifications.php:28
-msgid "Invalid request identifier."
-msgstr ""
-
-#: ../../mod/notifications.php:31 ../../mod/notifications.php:133
-msgid "Discard"
-msgstr ""
-
-#: ../../mod/notifications.php:41 ../../mod/notifications.php:132
-msgid "Ignore"
-msgstr ""
-
-#: ../../mod/notifications.php:68
-msgid "Pending Friend/Connect Notifications"
-msgstr ""
-
-#: ../../mod/notifications.php:72
-msgid "Show Ignored Requests"
-msgstr ""
-
-#: ../../mod/notifications.php:72
-msgid "Hide Ignored Requests"
-msgstr ""
-
-#: ../../mod/notifications.php:104
-msgid "Claims to be known to you: "
-msgstr ""
-
-#: ../../mod/notifications.php:104
-msgid "yes"
-msgstr ""
-
-#: ../../mod/notifications.php:104
-msgid "no"
-msgstr ""
-
-#: ../../mod/notifications.php:110
-msgid "Approve as: "
-msgstr ""
-
-#: ../../mod/notifications.php:111
-msgid "Friend"
-msgstr ""
-
-#: ../../mod/notifications.php:112
-msgid "Fan/Admirer"
-msgstr ""
-
-#: ../../mod/notifications.php:119
-msgid "Notification type: "
-msgstr ""
-
-#: ../../mod/notifications.php:120
-msgid "Friend/Connect Request"
-msgstr ""
-
-#: ../../mod/notifications.php:120
-msgid "New Follower"
-msgstr ""
-
-#: ../../mod/notifications.php:130
-msgid "Approve"
-msgstr ""
-
-#: ../../mod/notifications.php:139
-msgid "No notifications."
-msgstr ""
-
-#: ../../mod/notifications.php:143
-msgid "User registrations waiting for confirm"
-msgstr ""
-
-#: ../../mod/notifications.php:163
-msgid "No registrations."
-msgstr ""
-
-#: ../../mod/contacts.php:12
-msgid "Invite Friends"
-msgstr ""
-
-#: ../../mod/contacts.php:15
-msgid "Find People With Shared Interests"
-msgstr ""
-
-#: ../../mod/contacts.php:19
-msgid "Connect/Follow"
-msgstr ""
-
-#: ../../mod/contacts.php:20
-msgid "Example: bob@example.com, http://example.com/barbara"
-msgstr ""
-
-#: ../../mod/contacts.php:21
-msgid "Follow"
-msgstr ""
-
-#: ../../mod/contacts.php:43 ../../mod/contacts.php:124
-msgid "Could not access contact record."
-msgstr ""
-
-#: ../../mod/contacts.php:57
-msgid "Could not locate selected profile."
-msgstr ""
-
-#: ../../mod/contacts.php:88
-msgid "Contact updated."
-msgstr ""
-
-#: ../../mod/contacts.php:146
-msgid "Contact has been blocked"
-msgstr ""
-
-#: ../../mod/contacts.php:146
-msgid "Contact has been unblocked"
-msgstr ""
-
-#: ../../mod/contacts.php:160
-msgid "Contact has been ignored"
-msgstr ""
-
-#: ../../mod/contacts.php:160
-msgid "Contact has been unignored"
-msgstr ""
-
-#: ../../mod/contacts.php:181
-msgid "stopped following"
-msgstr ""
-
-#: ../../mod/contacts.php:200
-msgid "Contact has been removed."
-msgstr ""
-
-#: ../../mod/contacts.php:214 ../../mod/dfrn_confirm.php:114
-msgid "Contact not found."
-msgstr ""
-
-#: ../../mod/contacts.php:228 ../../mod/contacts.php:352
-msgid "Mutual Friendship"
-msgstr ""
-
-#: ../../mod/contacts.php:232 ../../mod/contacts.php:356
-msgid "is a fan of yours"
-msgstr ""
-
-#: ../../mod/contacts.php:237 ../../mod/contacts.php:360
-msgid "you are a fan of"
-msgstr ""
-
-#: ../../mod/contacts.php:252
-msgid "Privacy Unavailable"
-msgstr ""
-
-#: ../../mod/contacts.php:253
-msgid "Private communications are not available for this contact."
-msgstr ""
-
-#: ../../mod/contacts.php:256
-msgid "Never"
-msgstr ""
-
-#: ../../mod/contacts.php:260
-msgid "(Update was successful)"
-msgstr ""
-
-#: ../../mod/contacts.php:260
-msgid "(Update was not successful)"
-msgstr ""
-
-#: ../../mod/contacts.php:263
-msgid "Contact Editor"
-msgstr ""
-
-#: ../../mod/contacts.php:264
-msgid "Visit $name's profile"
-msgstr ""
-
-#: ../../mod/contacts.php:265
-msgid "Block/Unblock contact"
-msgstr ""
-
-#: ../../mod/contacts.php:266
-msgid "Ignore contact"
-msgstr ""
-
-#: ../../mod/contacts.php:267
-msgid "Delete contact"
-msgstr ""
-
-#: ../../mod/contacts.php:269
-msgid "Last updated: "
-msgstr ""
-
-#: ../../mod/contacts.php:270
-msgid "Update public posts: "
-msgstr ""
-
-#: ../../mod/contacts.php:272
-msgid "Update now"
-msgstr ""
-
-#: ../../mod/contacts.php:275
-msgid "Unblock this contact"
-msgstr ""
-
-#: ../../mod/contacts.php:275
-msgid "Block this contact"
-msgstr ""
-
-#: ../../mod/contacts.php:276
-msgid "Unignore this contact"
-msgstr ""
-
-#: ../../mod/contacts.php:276
-msgid "Ignore this contact"
-msgstr ""
-
-#: ../../mod/contacts.php:279
-msgid "Currently blocked"
-msgstr ""
-
-#: ../../mod/contacts.php:280
-msgid "Currently ignored"
-msgstr ""
-
-#: ../../mod/contacts.php:311 ../../include/nav.php:112
-#: ../../include/acl_selectors.php:140 ../../include/acl_selectors.php:155
-msgid "Contacts"
-msgstr ""
-
-#: ../../mod/contacts.php:313
-msgid "Show Blocked Connections"
-msgstr ""
-
-#: ../../mod/contacts.php:313
-msgid "Hide Blocked Connections"
-msgstr ""
-
-#: ../../mod/contacts.php:315 ../../mod/directory.php:38
-msgid "Finding: "
-msgstr ""
-
-#: ../../mod/contacts.php:316 ../../mod/directory.php:40
-msgid "Find"
-msgstr ""
-
-#: ../../mod/contacts.php:376 ../../mod/viewcontacts.php:44
-msgid "Visit $username's profile"
-msgstr ""
-
-#: ../../mod/contacts.php:377 ../../boot.php:2732
-msgid "Edit contact"
+#: ../../mod/like.php:129
+#, php-format
+msgid "%1$s doesn't like %2$s's %3$s"
msgstr ""
#: ../../mod/lostpass.php:27
@@ -982,453 +2134,85 @@ msgid ""
"Password reset failed."
msgstr ""
-#: ../../mod/lostpass.php:100
+#: ../../mod/lostpass.php:75
+msgid "Your password has been reset as requested."
+msgstr ""
+
+#: ../../mod/lostpass.php:76
+msgid "Your new password is"
+msgstr ""
+
+#: ../../mod/lostpass.php:77
+msgid "Save or copy your new password - and then"
+msgstr ""
+
+#: ../../mod/lostpass.php:78
+msgid "click here to login"
+msgstr ""
+
+#: ../../mod/lostpass.php:79
+msgid ""
+"Your password may be changed from the Settings page after "
+"successful login."
+msgstr ""
+
+#: ../../mod/lostpass.php:107
msgid "Forgot your Password?"
msgstr ""
-#: ../../mod/lostpass.php:101
+#: ../../mod/lostpass.php:108
msgid ""
"Enter your email address and submit to have your password reset. Then check "
"your email for further instructions."
msgstr ""
-#: ../../mod/lostpass.php:102
+#: ../../mod/lostpass.php:109
msgid "Nickname or Email: "
msgstr ""
-#: ../../mod/lostpass.php:103
+#: ../../mod/lostpass.php:110
msgid "Reset"
msgstr ""
-#: ../../mod/settings.php:38
-msgid "Passwords do not match. Password unchanged."
+#: ../../mod/removeme.php:42 ../../mod/removeme.php:45
+msgid "Remove My Account"
msgstr ""
-#: ../../mod/settings.php:43
-msgid "Empty passwords are not allowed. Password unchanged."
-msgstr ""
-
-#: ../../mod/settings.php:54
-msgid "Password changed."
-msgstr ""
-
-#: ../../mod/settings.php:56
-msgid "Password update failed. Please try again."
-msgstr ""
-
-#: ../../mod/settings.php:98
-msgid " Please use a shorter name."
-msgstr ""
-
-#: ../../mod/settings.php:100
-msgid " Name too short."
-msgstr ""
-
-#: ../../mod/settings.php:106
-msgid " Not valid email."
-msgstr ""
-
-#: ../../mod/settings.php:108
-msgid " Cannot change to that email."
-msgstr ""
-
-#: ../../mod/settings.php:166
-msgid "Settings updated."
-msgstr ""
-
-#: ../../mod/settings.php:216
-msgid "Plugin Settings"
-msgstr ""
-
-#: ../../mod/settings.php:217
-msgid "Account Settings"
-msgstr ""
-
-#: ../../mod/settings.php:223
-msgid "No Plugin settings configured"
-msgstr ""
-
-#: ../../mod/settings.php:262
-msgid "Normal Account"
-msgstr ""
-
-#: ../../mod/settings.php:263
-msgid "This account is a normal personal profile"
-msgstr ""
-
-#: ../../mod/settings.php:264
-msgid "Soapbox Account"
-msgstr ""
-
-#: ../../mod/settings.php:265
-msgid "Automatically approve all connection/friend requests as read-only fans"
-msgstr ""
-
-#: ../../mod/settings.php:266
-msgid "Community/Celebrity Account"
-msgstr ""
-
-#: ../../mod/settings.php:267
-msgid "Automatically approve all connection/friend requests as read-write fans"
-msgstr ""
-
-#: ../../mod/settings.php:268
-msgid "Automatic Friend Account"
-msgstr ""
-
-#: ../../mod/settings.php:269
-msgid "Automatically approve all connection/friend requests as friends"
-msgstr ""
-
-#: ../../mod/settings.php:278
-msgid "OpenID: "
-msgstr ""
-
-#: ../../mod/settings.php:278
-msgid " (Optional) Allow this OpenID to login to this account."
-msgstr ""
-
-#: ../../mod/settings.php:310
-msgid "Profile is not published."
-msgstr ""
-
-#: ../../mod/settings.php:353
-msgid "Export Personal Data"
-msgstr ""
-
-#: ../../mod/settings.php:371
-msgid "Default Post Permissions"
-msgstr ""
-
-#: ../../mod/manage.php:37
-#, php-format
-msgid "Welcome back %s"
-msgstr ""
-
-#: ../../mod/manage.php:87
-msgid "Manage Identities and/or Pages"
-msgstr ""
-
-#: ../../mod/manage.php:90
+#: ../../mod/removeme.php:43
msgid ""
-"(Toggle between different identities or community/group pages which share "
-"your account details.)"
+"This will completely remove your account. Once this has been done it is not "
+"recoverable."
msgstr ""
-#: ../../mod/manage.php:92
-msgid "Select an identity to manage: "
+#: ../../mod/removeme.php:44
+msgid "Please enter your password for verification:"
msgstr ""
-#: ../../mod/network.php:18
-msgid "Normal View"
+#: ../../mod/apps.php:6
+msgid "Applications"
msgstr ""
-#: ../../mod/network.php:20
-msgid "New Item View"
+#: ../../mod/directory.php:32
+msgid "Global Directory"
msgstr ""
-#: ../../mod/network.php:59
-#, php-format
-msgid "%d member"
-msgid_plural "%d members"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../mod/network.php:60
-#, php-format
-msgid "Warning: This group contains %s from an insecure network."
-msgstr ""
-
-#: ../../mod/network.php:61
-msgid "Private messages to this group are at risk of public disclosure."
-msgstr ""
-
-#: ../../mod/network.php:77 ../../mod/message.php:172
-#: ../../mod/profile.php:137
-msgid "Please enter a link URL:"
-msgstr ""
-
-#: ../../mod/network.php:78 ../../mod/profile.php:138
-msgid "Please enter a YouTube link:"
-msgstr ""
-
-#: ../../mod/network.php:79 ../../mod/profile.php:139
-msgid "Please enter a video(.ogg) link/URL:"
-msgstr ""
-
-#: ../../mod/network.php:80 ../../mod/profile.php:140
-msgid "Please enter an audio(.ogg) link/URL:"
-msgstr ""
-
-#: ../../mod/network.php:81 ../../mod/profile.php:141
-msgid "Where are you right now?"
-msgstr ""
-
-#: ../../mod/network.php:82 ../../mod/profile.php:142
-msgid "Enter a title for this item"
-msgstr ""
-
-#: ../../mod/network.php:113 ../../mod/profile.php:173
-msgid "Set title"
-msgstr ""
-
-#: ../../mod/network.php:166
-msgid "No such group"
-msgstr ""
-
-#: ../../mod/network.php:177
-msgid "Group is empty"
-msgstr ""
-
-#: ../../mod/network.php:181
-msgid "Group: "
-msgstr ""
-
-#: ../../mod/network.php:330 ../../mod/network.php:561
-#: ../../mod/profile.php:460 ../../mod/display.php:262
-#: ../../mod/search.php:124
-msgid "View $name's profile"
-msgstr ""
-
-#: ../../mod/network.php:346 ../../mod/search.php:140
-msgid "View in context"
-msgstr ""
-
-#: ../../mod/network.php:409
-msgid "See more posts like this"
-msgstr ""
-
-#: ../../mod/network.php:428 ../../mod/profile.php:359
-#, php-format
-msgid "See all %d comments"
-msgstr ""
-
-#: ../../mod/network.php:562 ../../mod/display.php:263
-msgid "View $owner_name's profile"
-msgstr ""
-
-#: ../../mod/network.php:563 ../../mod/display.php:264
-msgid "to"
-msgstr ""
-
-#: ../../mod/network.php:564 ../../mod/display.php:265
-msgid "Wall-to-Wall"
-msgstr ""
-
-#: ../../mod/network.php:565 ../../mod/display.php:266
-msgid "via Wall-To-Wall:"
-msgstr ""
-
-#: ../../mod/network.php:607 ../../mod/register.php:442
-#: ../../mod/profile.php:494 ../../mod/display.php:318
-msgid ""
-"Shared content is covered by the Creative Commons Attribution 3.0 license."
-msgstr ""
-
-#: ../../mod/group.php:27
-msgid "Group created."
-msgstr ""
-
-#: ../../mod/group.php:33
-msgid "Could not create group."
-msgstr ""
-
-#: ../../mod/group.php:43 ../../mod/group.php:127
-msgid "Group not found."
-msgstr ""
-
-#: ../../mod/group.php:56
-msgid "Group name changed."
-msgstr ""
-
-#: ../../mod/group.php:79
-msgid "Membership list updated."
-msgstr ""
-
-#: ../../mod/group.php:88 ../../index.php:264
-msgid "Permission denied"
-msgstr ""
-
-#: ../../mod/group.php:95
-msgid "Create a group of contacts/friends."
-msgstr ""
-
-#: ../../mod/group.php:96 ../../mod/group.php:153
-msgid "Group Name: "
-msgstr ""
-
-#: ../../mod/group.php:111
-msgid "Group removed."
-msgstr ""
-
-#: ../../mod/group.php:113
-msgid "Unable to remove group."
-msgstr ""
-
-#: ../../mod/group.php:152
-msgid "Group Editor"
-msgstr ""
-
-#: ../../mod/group.php:154
-msgid "Members:"
-msgstr ""
-
-#: ../../mod/viewcontacts.php:17 ../../boot.php:2049
-msgid "View Contacts"
-msgstr ""
-
-#: ../../mod/viewcontacts.php:32
-msgid "No contacts."
-msgstr ""
-
-#: ../../mod/register.php:47
-msgid "Invalid OpenID url"
-msgstr ""
-
-#: ../../mod/register.php:62
-msgid "Please enter the required information."
-msgstr ""
-
-#: ../../mod/register.php:74
-msgid "Please use a shorter name."
-msgstr ""
-
-#: ../../mod/register.php:76
-msgid "Name too short."
-msgstr ""
-
-#: ../../mod/register.php:89
-msgid "That doesn't appear to be your full (First Last) name."
-msgstr ""
-
-#: ../../mod/register.php:92
-msgid "Your email domain is not among those allowed on this site."
-msgstr ""
-
-#: ../../mod/register.php:95
-msgid "Not a valid email address."
-msgstr ""
-
-#: ../../mod/register.php:101
-msgid "Cannot use that email."
-msgstr ""
-
-#: ../../mod/register.php:106
-msgid ""
-"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
-"must also begin with a letter."
-msgstr ""
-
-#: ../../mod/register.php:112 ../../mod/register.php:212
-msgid "Nickname is already registered. Please choose another."
-msgstr ""
-
-#: ../../mod/register.php:131
-msgid "SERIOUS ERROR: Generation of security keys failed."
-msgstr ""
-
-#: ../../mod/register.php:198
-msgid "An error occurred during registration. Please try again."
-msgstr ""
-
-#: ../../mod/register.php:234
-msgid "An error occurred creating your default profile. Please try again."
-msgstr ""
-
-#: ../../mod/register.php:328 ../../mod/regmod.php:92
-#, php-format
-msgid "Registration details for %s"
-msgstr ""
-
-#: ../../mod/register.php:333
-msgid ""
-"Registration successful. Please check your email for further instructions."
-msgstr ""
-
-#: ../../mod/register.php:337
-msgid "Failed to send email message. Here is the message that failed."
-msgstr ""
-
-#: ../../mod/register.php:342
-msgid "Your registration can not be processed."
-msgstr ""
-
-#: ../../mod/register.php:365
-#, php-format
-msgid "Registration request at %s"
-msgstr ""
-
-#: ../../mod/register.php:369
-msgid "Your registration is pending approval by the site owner."
-msgstr ""
-
-#: ../../mod/register.php:417
-msgid ""
-"You may (optionally) fill in this form via OpenID by supplying your OpenID "
-"and clicking 'Register'."
-msgstr ""
-
-#: ../../mod/register.php:418
-msgid ""
-"If you are not familiar with OpenID, please leave that field blank and fill "
-"in the rest of the items."
-msgstr ""
-
-#: ../../mod/register.php:419
-msgid "Your OpenID (optional): "
-msgstr ""
-
-#: ../../mod/register.php:433
-msgid "Include your profile in member directory?"
-msgstr ""
-
-#: ../../mod/register.php:449
-msgid "Registration"
-msgstr ""
-
-#: ../../mod/register.php:457
-msgid "Your Full Name (e.g. Joe Smith): "
-msgstr ""
-
-#: ../../mod/register.php:458
-msgid "Your Email Address: "
-msgstr ""
-
-#: ../../mod/register.php:459
-msgid ""
-"Choose a profile nickname. This must begin with a text character. Your "
-"profile address on this site will then be 'nickname@$sitename"
-"strong>'."
-msgstr ""
-
-#: ../../mod/register.php:460
-msgid "Choose a nickname: "
-msgstr ""
-
-#: ../../mod/register.php:463 ../../include/nav.php:62 ../../boot.php:814
-msgid "Register"
-msgstr ""
-
-#: ../../mod/like.php:110
-msgid "status"
+#: ../../mod/directory.php:39
+msgid "Site Directory"
msgstr ""
-#: ../../mod/like.php:127
-#, php-format
-msgid "%1$s likes %2$s's %3$s"
+#: ../../mod/directory.php:94
+msgid "Gender: "
msgstr ""
-#: ../../mod/like.php:129
-#, php-format
-msgid "%1$s doesn't like %2$s's %3$s"
+#: ../../mod/directory.php:120
+msgid "No entries (some entries may be hidden)."
msgstr ""
-#: ../../mod/friendika.php:12 ../../wip/friendika.php:12
+#: ../../mod/friendika.php:12
msgid "This is Friendika version"
msgstr ""
-#: ../../mod/friendika.php:13 ../../wip/friendika.php:13
+#: ../../mod/friendika.php:13
msgid "running at web location"
msgstr ""
@@ -1445,11 +2229,11 @@ msgid ""
"a> to learn more about the Friendika project."
msgstr ""
-#: ../../mod/friendika.php:19 ../../wip/friendika.php:15
+#: ../../mod/friendika.php:19
msgid "Bug reports and issues: please visit"
msgstr ""
-#: ../../mod/friendika.php:20 ../../wip/friendika.php:16
+#: ../../mod/friendika.php:20
msgid ""
"Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - "
"dot com"
@@ -1463,19 +2247,6 @@ msgstr ""
msgid "No installed plugins/addons/apps"
msgstr ""
-#: ../../mod/regmod.php:10
-msgid "Please login."
-msgstr ""
-
-#: ../../mod/regmod.php:54
-#, php-format
-msgid "Registration revoked for %s"
-msgstr ""
-
-#: ../../mod/regmod.php:96
-msgid "Account approved."
-msgstr ""
-
#: ../../mod/item.php:37
msgid "Unable to locate original post."
msgstr ""
@@ -1484,12 +2255,6 @@ msgstr ""
msgid "Empty post discarded."
msgstr ""
-#: ../../mod/item.php:212 ../../mod/message.php:93
-#: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88
-#: ../../mod/wall_upload.php:95
-msgid "Wall Photos"
-msgstr ""
-
#: ../../mod/item.php:474
#, php-format
msgid "%s commented on your item at %s"
@@ -1525,57 +2290,20 @@ msgstr ""
msgid "%s posted an update."
msgstr ""
-#: ../../mod/item.php:598 ../../mod/display.php:15 ../../mod/display.php:313
-msgid "Item not found."
+#: ../../mod/tagrm.php:41
+msgid "Tag removed"
msgstr ""
-#: ../../mod/profile_photo.php:28
-msgid "Image uploaded but image cropping failed."
+#: ../../mod/tagrm.php:79
+msgid "Remove Item Tag"
msgstr ""
-#: ../../mod/profile_photo.php:61 ../../mod/profile_photo.php:68
-#: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:239
-#, php-format
-msgid "Image size reduction [%s] failed."
+#: ../../mod/tagrm.php:81
+msgid "Select a tag to remove: "
msgstr ""
-#: ../../mod/profile_photo.php:95
-msgid "Unable to process image"
-msgstr ""
-
-#: ../../mod/profile_photo.php:109 ../../mod/wall_upload.php:56
-#, php-format
-msgid "Image exceeds size limit of %d"
-msgstr ""
-
-#: ../../mod/profile_photo.php:200
-msgid "Crop Image"
-msgstr ""
-
-#: ../../mod/profile_photo.php:201
-msgid "Please adjust the image cropping for optimum viewing."
-msgstr ""
-
-#: ../../mod/profile_photo.php:202
-msgid "Done Editing"
-msgstr ""
-
-#: ../../mod/profile_photo.php:230
-msgid "Image uploaded successfully."
-msgstr ""
-
-#: ../../mod/removeme.php:42 ../../mod/removeme.php:45
-msgid "Remove My Account"
-msgstr ""
-
-#: ../../mod/removeme.php:43
-msgid ""
-"This will completely remove your account. Once this has been done it is not "
-"recoverable."
-msgstr ""
-
-#: ../../mod/removeme.php:44
-msgid "Please enter your password for verification:"
+#: ../../mod/tagrm.php:93
+msgid "Remove"
msgstr ""
#: ../../mod/message.php:18
@@ -1634,10 +2362,6 @@ msgstr ""
msgid "Subject:"
msgstr ""
-#: ../../mod/message.php:185 ../../mod/message.php:319 ../../mod/invite.php:59
-msgid "Your message:"
-msgstr ""
-
#: ../../mod/message.php:224
msgid "No messages."
msgstr ""
@@ -1662,181 +2386,6 @@ msgstr ""
msgid "Send Reply"
msgstr ""
-#: ../../mod/profile.php:8 ../../boot.php:2221
-msgid "No profile"
-msgstr ""
-
-#: ../../mod/profile.php:102
-msgid "Status"
-msgstr ""
-
-#: ../../mod/profile.php:103
-msgid "Profile"
-msgstr ""
-
-#: ../../mod/profile.php:104
-msgid "Photos"
-msgstr ""
-
-#: ../../mod/openid.php:62 ../../mod/openid.php:109 ../../include/auth.php:105
-#: ../../include/auth.php:130 ../../include/auth.php:183
-msgid "Login failed."
-msgstr ""
-
-#: ../../mod/openid.php:73 ../../include/auth.php:194
-msgid "Welcome back "
-msgstr ""
-
-#: ../../mod/follow.php:186
-msgid "The profile address specified does not provide adequate information."
-msgstr ""
-
-#: ../../mod/follow.php:192
-msgid ""
-"Limited profile. This person will be unable to receive direct/personal "
-"notifications from you."
-msgstr ""
-
-#: ../../mod/follow.php:243
-msgid "Unable to retrieve contact information."
-msgstr ""
-
-#: ../../mod/follow.php:289
-msgid "following"
-msgstr ""
-
-#: ../../mod/display.php:306
-msgid "Item has been removed."
-msgstr ""
-
-#: ../../mod/dfrn_notify.php:179
-msgid "noreply"
-msgstr ""
-
-#: ../../mod/dfrn_notify.php:237
-msgid "New mail received at "
-msgstr ""
-
-#: ../../mod/dfrn_notify.php:391 ../../mod/dfrn_notify.php:477
-#, php-format
-msgid "%s commented on an item at %s"
-msgstr ""
-
-#: ../../mod/apps.php:6
-msgid "Applications"
-msgstr ""
-
-#: ../../mod/search.php:17 ../../include/nav.php:68 ../../boot.php:2066
-msgid "Search"
-msgstr ""
-
-#: ../../mod/search.php:62
-msgid "No results."
-msgstr ""
-
-#: ../../mod/profiles.php:21 ../../mod/profiles.php:237
-#: ../../mod/profiles.php:342 ../../mod/dfrn_confirm.php:62
-msgid "Profile not found."
-msgstr ""
-
-#: ../../mod/profiles.php:28
-msgid "Profile Name is required."
-msgstr ""
-
-#: ../../mod/profiles.php:199
-msgid "Profile updated."
-msgstr ""
-
-#: ../../mod/profiles.php:254
-msgid "Profile deleted."
-msgstr ""
-
-#: ../../mod/profiles.php:270 ../../mod/profiles.php:301
-msgid "Profile-"
-msgstr ""
-
-#: ../../mod/profiles.php:289 ../../mod/profiles.php:328
-msgid "New profile created."
-msgstr ""
-
-#: ../../mod/profiles.php:307
-msgid "Profile unavailable to clone."
-msgstr ""
-
-#: ../../mod/profiles.php:370
-msgid ""
-"This is your public profile.
It may "
-"be visible to anybody using the internet."
-msgstr ""
-
-#: ../../mod/profiles.php:380 ../../mod/directory.php:91
-msgid "Age: "
-msgstr ""
-
-#: ../../mod/profiles.php:422
-msgid "Profile Image"
-msgstr ""
-
-#: ../../mod/directory.php:32
-msgid "Global Directory"
-msgstr ""
-
-#: ../../mod/directory.php:39
-msgid "Site Directory"
-msgstr ""
-
-#: ../../mod/directory.php:94
-msgid "Gender: "
-msgstr ""
-
-#: ../../mod/directory.php:120
-msgid "No entries (some entries may be hidden)."
-msgstr ""
-
-#: ../../mod/invite.php:28
-#, php-format
-msgid "%s : Not a valid email address."
-msgstr ""
-
-#: ../../mod/invite.php:32
-#, php-format
-msgid "Please join my network on %s"
-msgstr ""
-
-#: ../../mod/invite.php:38
-#, php-format
-msgid "%s : Message delivery failed."
-msgstr ""
-
-#: ../../mod/invite.php:42
-#, php-format
-msgid "%d message sent."
-msgid_plural "%d messages sent."
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../mod/invite.php:57
-msgid "Send invitations"
-msgstr ""
-
-#: ../../mod/invite.php:58
-msgid "Enter email addresses, one per line:"
-msgstr ""
-
-#: ../../mod/invite.php:60
-#, php-format
-msgid "Please join my social network on %s"
-msgstr ""
-
-#: ../../mod/invite.php:61
-msgid "To accept this invitation, please visit:"
-msgstr ""
-
-#: ../../mod/invite.php:62
-msgid ""
-"Once you have registered, please connect with me via my profile page at:"
-msgstr ""
-
#: ../../mod/dfrn_confirm.php:231
msgid "Response from remote site was not understood."
msgstr ""
@@ -1906,44 +2455,178 @@ msgstr ""
msgid "Connection accepted at %s"
msgstr ""
-#: ../../addon/facebook/facebook.php:116
-msgid "Facebook disabled"
+#: ../../mod/openid.php:62 ../../mod/openid.php:109 ../../include/auth.php:105
+#: ../../include/auth.php:130 ../../include/auth.php:183
+msgid "Login failed."
msgstr ""
-#: ../../addon/facebook/facebook.php:124
-msgid "Facebook API key is missing."
+#: ../../mod/openid.php:73 ../../include/auth.php:194
+msgid "Welcome back "
msgstr ""
-#: ../../addon/facebook/facebook.php:131
-msgid "Facebook Connect"
+#: ../../mod/dfrn_poll.php:78 ../../mod/dfrn_poll.php:483
+#, php-format
+msgid "%s welcomes %s"
msgstr ""
-#: ../../addon/facebook/facebook.php:137
-msgid "Install Facebook post connector"
+#: ../../mod/viewcontacts.php:32
+msgid "No contacts."
msgstr ""
-#: ../../addon/facebook/facebook.php:144
-msgid "Remove Facebook post connector"
+#: ../../mod/group.php:27
+msgid "Group created."
msgstr ""
-#: ../../addon/facebook/facebook.php:150
-msgid "Post to Facebook by default"
+#: ../../mod/group.php:33
+msgid "Could not create group."
msgstr ""
-#: ../../addon/facebook/facebook.php:174
-msgid "Facebook"
+#: ../../mod/group.php:43 ../../mod/group.php:127
+msgid "Group not found."
msgstr ""
-#: ../../addon/facebook/facebook.php:175
-msgid "Facebook Connector Settings"
+#: ../../mod/group.php:56
+msgid "Group name changed."
msgstr ""
-#: ../../addon/facebook/facebook.php:189
-msgid "Post to Facebook"
+#: ../../mod/group.php:79
+msgid "Membership list updated."
msgstr ""
-#: ../../addon/facebook/facebook.php:230
-msgid "Image: "
+#: ../../mod/group.php:95
+msgid "Create a group of contacts/friends."
+msgstr ""
+
+#: ../../mod/group.php:96 ../../mod/group.php:153
+msgid "Group Name: "
+msgstr ""
+
+#: ../../mod/group.php:111
+msgid "Group removed."
+msgstr ""
+
+#: ../../mod/group.php:113
+msgid "Unable to remove group."
+msgstr ""
+
+#: ../../mod/group.php:152
+msgid "Group Editor"
+msgstr ""
+
+#: ../../mod/group.php:154
+msgid "Members:"
+msgstr ""
+
+#: ../../mod/match.php:10
+msgid "Profile Match"
+msgstr ""
+
+#: ../../mod/match.php:50
+msgid "No matches"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:64
+msgid "Post to Twitter"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:122
+msgid "Twitter Posting Settings"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:129
+msgid ""
+"No consumer key pair for Twitter found. Please contact your site "
+"administrator."
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:148
+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 "
+"button below to get a PIN from Twitter which you have to copy into the input "
+"box below and submit the form. Only your public posts will "
+"be posted to Twitter."
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:149
+msgid "Log in with Twitter"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:151
+msgid "Copy the PIN from Twitter here"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:165 ../../addon/statusnet/statusnet.php:197
+msgid "Currently connected to: "
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:166
+msgid ""
+"If enabled all your public postings will be posted to the "
+"associated Twitter account as well."
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:168
+msgid "Send public postings to Twitter"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:172 ../../addon/statusnet/statusnet.php:204
+msgid "Clear OAuth configuration"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:78
+msgid "Post to StatusNet"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:146
+msgid "StatusNet Posting Settings"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:152
+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 "
+"and enter the API base root.
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."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:154
+msgid "OAuth Consumer Key"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:157
+msgid "OAuth Consumer Secret"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:160
+msgid "Base API Path (remember the trailing /)"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:181
+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 "
+"and submit the form. Only your public posts will be posted "
+"to StatusNet."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:182
+msgid "Log in with StatusNet"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:184
+msgid "Copy the security code from StatusNet here"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:198
+msgid ""
+"If enabled all your public postings will be posted to the "
+"associated StatusNet account as well."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:200
+msgid "Send public postings to StatusNet"
msgstr ""
#: ../../addon/tictac/tictac.php:14
@@ -2000,27 +2683,63 @@ msgstr ""
msgid "I won!"
msgstr ""
+#: ../../addon/java_upload/java_upload.php:33
+msgid "Select files to upload: "
+msgstr ""
+
+#: ../../addon/java_upload/java_upload.php:35
+msgid ""
+"Use the following controls only if the Java uploader [above] fails to launch."
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:116
+msgid "Facebook disabled"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:124
+msgid "Facebook API key is missing."
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:131
+msgid "Facebook Connect"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:137
+msgid "Install Facebook post connector"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:144
+msgid "Remove Facebook post connector"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:150
+msgid "Post to Facebook by default"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:174
+msgid "Facebook"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:175
+msgid "Facebook Connector Settings"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:189
+msgid "Post to Facebook"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:230
+msgid "Image: "
+msgstr ""
+
#: ../../addon/randplace/randplace.php:171
-#: ../../wip/addon/randplace/randplace.php:170
msgid "Randplace Settings"
msgstr ""
#: ../../addon/randplace/randplace.php:173
-#: ../../wip/addon/randplace/randplace.php:172
msgid "Enable Randplace Plugin"
msgstr ""
-#: ../../addon/java_upload/java_upload.php:33 ../../wip/photos.php:747
-#: ../../wip/photos-chris.php:794
-msgid "Select files to upload: "
-msgstr ""
-
-#: ../../addon/java_upload/java_upload.php:35 ../../wip/photos.php:752
-#: ../../wip/photos-chris.php:799
-msgid ""
-"Use the following controls only if the Java uploader [above] fails to launch."
-msgstr ""
-
#: ../../addon/js_upload/js_upload.php:39
msgid "Upload a file"
msgstr ""
@@ -2053,110 +2772,6 @@ msgstr ""
msgid "Upload was cancelled, or server error encountered"
msgstr ""
-#: ../../addon/statusnet/statusnet.php:78
-msgid "Post to StatusNet"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:146
-msgid "StatusNet Posting Settings"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:152
-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 "
-"and enter the API base root.
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."
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:154
-msgid "OAuth Consumer Key"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:157
-msgid "OAuth Consumer Secret"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:160
-msgid "Base API Path (remember the trailing /)"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:181
-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 "
-"and submit the form. Only your public posts will be posted "
-"to StatusNet."
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:182
-msgid "Log in with StatusNet"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:184
-msgid "Copy the security code from StatusNet here"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:197 ../../addon/twitter/twitter.php:165
-msgid "Currently connected to: "
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:198
-msgid ""
-"If enabled all your public postings will be posted to the "
-"associated StatusNet account as well."
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:200
-msgid "Send public postings to StatusNet"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:204 ../../addon/twitter/twitter.php:172
-msgid "Clear OAuth configuration"
-msgstr ""
-
-#: ../../addon/twitter/twitter.php:64
-msgid "Post to Twitter"
-msgstr ""
-
-#: ../../addon/twitter/twitter.php:122
-msgid "Twitter Posting Settings"
-msgstr ""
-
-#: ../../addon/twitter/twitter.php:129
-msgid ""
-"No consumer key pair for Twitter found. Please contact your site "
-"administrator."
-msgstr ""
-
-#: ../../addon/twitter/twitter.php:148
-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 "
-"button below to get a PIN from Twitter which you have to copy into the input "
-"box below and submit the form. Only your public posts will "
-"be posted to Twitter."
-msgstr ""
-
-#: ../../addon/twitter/twitter.php:149
-msgid "Log in with Twitter"
-msgstr ""
-
-#: ../../addon/twitter/twitter.php:151
-msgid "Copy the PIN from Twitter here"
-msgstr ""
-
-#: ../../addon/twitter/twitter.php:166
-msgid ""
-"If enabled all your public postings will be posted to the "
-"associated Twitter account as well."
-msgstr ""
-
-#: ../../addon/twitter/twitter.php:168
-msgid "Send public postings to Twitter"
-msgstr ""
-
#: ../../include/contact_selectors.php:32
msgid "Unknown | Not categorised"
msgstr ""
@@ -2417,56 +3032,16 @@ msgstr ""
msgid "Ask me"
msgstr ""
-#: ../../include/oembed.php:57
-msgid "Embedding disabled"
+#: ../../include/acl_selectors.php:132
+msgid "Visible To:"
msgstr ""
-#: ../../include/group.php:145
-msgid "Create a new group"
+#: ../../include/acl_selectors.php:136 ../../include/acl_selectors.php:151
+msgid "Groups"
msgstr ""
-#: ../../include/group.php:146
-msgid "Everybody"
-msgstr ""
-
-#: ../../include/nav.php:39 ../../boot.php:842
-msgid "Logout"
-msgstr ""
-
-#: ../../include/nav.php:45 ../../boot.php:822 ../../boot.php:828
-msgid "Login"
-msgstr ""
-
-#: ../../include/nav.php:57 ../../include/nav.php:92
-msgid "Home"
-msgstr ""
-
-#: ../../include/nav.php:65
-msgid "Apps"
-msgstr ""
-
-#: ../../include/nav.php:78
-msgid "Directory"
-msgstr ""
-
-#: ../../include/nav.php:88
-msgid "Network"
-msgstr ""
-
-#: ../../include/nav.php:97
-msgid "Notifications"
-msgstr ""
-
-#: ../../include/nav.php:105
-msgid "Manage"
-msgstr ""
-
-#: ../../include/nav.php:108
-msgid "Settings"
-msgstr ""
-
-#: ../../include/nav.php:110
-msgid "Profiles"
+#: ../../include/acl_selectors.php:147
+msgid "Except For:"
msgstr ""
#: ../../include/auth.php:27
@@ -2509,10 +3084,6 @@ msgstr ""
msgid "day"
msgstr ""
-#: ../../include/datetime.php:154
-msgid "days"
-msgstr ""
-
#: ../../include/datetime.php:155
msgid "hour"
msgstr ""
@@ -2541,297 +3112,115 @@ msgstr ""
msgid " ago"
msgstr ""
+#: ../../include/profile_advanced.php:36 ../../include/items.php:1073
+msgid "Birthday:"
+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 "♥ 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/nav.php:57 ../../include/nav.php:92
+msgid "Home"
+msgstr ""
+
+#: ../../include/nav.php:65
+msgid "Apps"
+msgstr ""
+
+#: ../../include/nav.php:78
+msgid "Directory"
+msgstr ""
+
+#: ../../include/nav.php:88
+msgid "Network"
+msgstr ""
+
+#: ../../include/nav.php:97
+msgid "Notifications"
+msgstr ""
+
+#: ../../include/nav.php:105
+msgid "Manage"
+msgstr ""
+
+#: ../../include/nav.php:108
+msgid "Settings"
+msgstr ""
+
#: ../../include/dba.php:31
#, php-format
msgid "Cannot locate DNS info for database server '%s'"
msgstr ""
-#: ../../include/acl_selectors.php:132
-msgid "Visible To:"
-msgstr ""
-
-#: ../../include/acl_selectors.php:136 ../../include/acl_selectors.php:151
-msgid "Groups"
-msgstr ""
-
-#: ../../include/acl_selectors.php:147
-msgid "Except For:"
-msgstr ""
-
-#: ../../include/items.php:1073
-msgid "Birthday:"
-msgstr ""
-
#: ../../include/items.php:1418
msgid "You have a new follower at "
msgstr ""
-#: ../../boot.php:359
-msgid "Delete this item?"
+#: ../../include/group.php:145
+msgid "Create a new group"
msgstr ""
-#: ../../boot.php:360
-msgid "Comment"
+#: ../../include/group.php:146
+msgid "Everybody"
msgstr ""
-#: ../../boot.php:813
-msgid "Create a New Account"
-msgstr ""
-
-#: ../../boot.php:820
-msgid "Nickname or Email address: "
-msgstr ""
-
-#: ../../boot.php:821
-msgid "Password: "
-msgstr ""
-
-#: ../../boot.php:826
-msgid "Nickname/Email/OpenID: "
-msgstr ""
-
-#: ../../boot.php:827
-msgid "Password (if not OpenID): "
-msgstr ""
-
-#: ../../boot.php:830
-msgid "Forgot your password?"
-msgstr ""
-
-#: ../../boot.php:831
-msgid "Password Reset"
-msgstr ""
-
-#: ../../boot.php:1083
-msgid "prev"
-msgstr ""
-
-#: ../../boot.php:1085
-msgid "first"
-msgstr ""
-
-#: ../../boot.php:1114
-msgid "last"
-msgstr ""
-
-#: ../../boot.php:1117
-msgid "next"
-msgstr ""
-
-#: ../../boot.php:1848
-#, php-format
-msgid "%s likes this."
-msgstr ""
-
-#: ../../boot.php:1848
-#, php-format
-msgid "%s doesn't like this."
-msgstr ""
-
-#: ../../boot.php:1852
-#, php-format
-msgid "%2$d people like this."
-msgstr ""
-
-#: ../../boot.php:1854
-#, php-format
-msgid "%2$d people don't like this."
-msgstr ""
-
-#: ../../boot.php:1860
-msgid "and"
-msgstr ""
-
-#: ../../boot.php:1863
-#, php-format
-msgid ", and %d other people"
-msgstr ""
-
-#: ../../boot.php:1864
-#, php-format
-msgid "%s like this."
-msgstr ""
-
-#: ../../boot.php:1864
-#, php-format
-msgid "%s don't like this."
-msgstr ""
-
-#: ../../boot.php:2025
-msgid "No contacts"
-msgstr ""
-
-#: ../../boot.php:2033
-#, php-format
-msgid "%d Contact"
-msgid_plural "%d Contacts"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../boot.php:2278
-msgid "Connect"
-msgstr ""
-
-#: ../../boot.php:2288
-msgid "Location:"
-msgstr ""
-
-#: ../../boot.php:2292
-msgid ", "
-msgstr ""
-
-#: ../../boot.php:2300
-msgid "Gender:"
-msgstr ""
-
-#: ../../boot.php:2304
-msgid "Status:"
-msgstr ""
-
-#: ../../boot.php:2306
-msgid "Homepage:"
-msgstr ""
-
-#: ../../boot.php:2397
-msgid "Monday"
-msgstr ""
-
-#: ../../boot.php:2397
-msgid "Tuesday"
-msgstr ""
-
-#: ../../boot.php:2397
-msgid "Wednesday"
-msgstr ""
-
-#: ../../boot.php:2397
-msgid "Thursday"
-msgstr ""
-
-#: ../../boot.php:2397
-msgid "Friday"
-msgstr ""
-
-#: ../../boot.php:2397
-msgid "Saturday"
-msgstr ""
-
-#: ../../boot.php:2397
-msgid "Sunday"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "January"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "February"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "March"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "April"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "May"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "June"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "July"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "August"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "September"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "October"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "November"
-msgstr ""
-
-#: ../../boot.php:2401
-msgid "December"
-msgstr ""
-
-#: ../../boot.php:2416
-msgid "g A l F d"
-msgstr ""
-
-#: ../../boot.php:2433
-msgid "Birthday Reminders"
-msgstr ""
-
-#: ../../boot.php:2434
-msgid "Birthdays this week:"
-msgstr ""
-
-#: ../../boot.php:2435
-msgid "(Adjusted for local time)"
-msgstr ""
-
-#: ../../boot.php:2446
-msgid "[today]"
-msgstr ""
-
-#: ../../boot.php:2643
-msgid "link to source"
-msgstr ""
-
-#: ../../boot.php:2729
-msgid "View status"
-msgstr ""
-
-#: ../../boot.php:2730
-msgid "View profile"
-msgstr ""
-
-#: ../../boot.php:2731
-msgid "View photos"
-msgstr ""
-
-#: ../../boot.php:2733
-msgid "Send PM"
-msgstr ""
-
-#: ../../wip/dfrn_poll2.php:72 ../../wip/dfrn_poll2.php:376
-msgid " welcomes "
-msgstr ""
-
-#: ../../wip/addon/facebook/facebook.php:54
-msgid "Facebook status update failed."
-msgstr ""
-
-#: ../../wip/addon/js_upload/js_upload.php:213
-msgid "Could not save uploaded file."
-msgstr ""
-
-#: ../../wip/addon/js_upload/js_upload.php:214
-msgid "The upload was cancelled, or server error encountered"
-msgstr ""
-
-#: ../../wip/addon/js_upload/js_upload.php:167
-msgid "Server error. Upload directory isn"
-msgstr ""
-
-#: ../../index.php:208
-msgid "Not Found"
-msgstr ""
-
-#: ../../index.php:209
-msgid "Page not found."
+#: ../../include/oembed.php:57
+msgid "Embedding disabled"
msgstr ""
diff --git a/util/strings.php b/util/strings.php
index a40f36701..835b86c70 100644
--- a/util/strings.php
+++ b/util/strings.php
@@ -71,24 +71,6 @@ $a->strings['%d Contact'] = array(
0 => '%d Contact',
1 => '%d Contacts',
);
-$a->strings['Profile not found.'] = 'Profile not found.';
-$a->strings['Contact not found.'] = 'Contact not found.';
-$a->strings['Response from remote site was not understood.'] = 'Response from remote site was not understood.';
-$a->strings['Unexpected response from remote site: '] = 'Unexpected response from remote site: ';
-$a->strings["Confirmation completed successfully."] = "Confirmation completed successfully.";
-$a->strings['Remote site reported: '] = 'Remote site reported: ';
-$a->strings["Temporary failure. Please wait and try again."] = "Temporary failure. Please wait and try again.";
-$a->strings["Introduction failed or was revoked."] = "Introduction failed or was revoked.";
-$a->strings['Unable to set contact photo.'] = 'Unable to set contact photo.';
-$a->strings['is now friends with'] = 'is now friends with';
-$a->strings['Our site encryption key is apparently messed up.'] = 'Our site encryption key is apparently messed up.';
-$a->strings['Empty site URL was provided or URL could not be decrypted by us.'] = 'Empty site URL was provided or URL could not be decrypted by us.';
-$a->strings['Contact record was not found for you on our site.'] = 'Contact record was not found for you on our site.';
-$a->strings['The ID provided by your system is a duplicate on our system. It should work if you try again.'] = 'The ID provided by your system is a duplicate on our system. It should work if you try again.';
-$a->strings['Unable to set your contact credentials on our system.'] = 'Unable to set your contact credentials on our system.';
-$a->strings['Unable to update your contact profile details on our system'] = 'Unable to update your contact profile details on our system';
-$a->strings["Connection accepted at %s"] = "Connection accepted at %s";
-$a->strings['Administrator'] = 'Administrator';
$a->strings['Applications'] = 'Applications';
$a->strings["Invite Friends"] = "Invite Friends";
$a->strings['Find People With Shared Interests'] = 'Find People With Shared Interests';
@@ -108,6 +90,7 @@ $a->strings['Contact has been ignored'] = 'Contact has been ignored';
$a->strings['Contact has been unignored'] = 'Contact has been unignored';
$a->strings['stopped following'] = 'stopped following';
$a->strings['Contact has been removed.'] = 'Contact has been removed.';
+$a->strings['Contact not found.'] = 'Contact not found.';
$a->strings['Mutual Friendship'] = 'Mutual Friendship';
$a->strings['is a fan of yours'] = 'is a fan of yours';
$a->strings['you are a fan of'] = 'you are a fan of';
@@ -117,6 +100,14 @@ $a->strings['Never'] = 'Never';
$a->strings["\x28Update was successful\x29"] = "\x28Update was successful\x29";
$a->strings["\x28Update was not successful\x29"] = "\x28Update was not successful\x29";
$a->strings['Contact Editor'] = 'Contact Editor';
+$a->strings['Submit'] = 'Submit';
+$a->strings['Profile Visibility'] = 'Profile Visibility';
+$a->strings['Please choose the profile you would like to display to %s when viewing your profile securely.'] = 'Please choose the profile you would like to display to %s when viewing your profile securely.';
+$a->strings['Contact Information / Notes'] = 'Contact Information / Notes';
+$a->strings['Online Reputation'] = 'Online Reputation';
+$a->strings['Occasionally your friends may wish to inquire about this person\'s online legitimacy.'] = '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 reputation to guide them.'] = 'You may help them choose whether or not to interact with this person by providing a reputation to guide them.';
+$a->strings['Please take a moment to elaborate on this selection if you feel it could be helpful to others.'] = 'Please take a moment to elaborate on this selection if you feel it could be helpful to others.';
$a->strings['Visit $name\'s profile'] = 'Visit $name\'s profile';
$a->strings['Block/Unblock contact'] = 'Block/Unblock contact';
$a->strings['Ignore contact'] = 'Ignore contact';
@@ -137,6 +128,23 @@ $a->strings['Finding: '] = 'Finding: ';
$a->strings['Find'] = 'Find';
$a->strings['Visit $username\'s profile'] = 'Visit $username\'s profile';
$a->strings['Edit contact'] = 'Edit contact';
+$a->strings['Profile not found.'] = 'Profile not found.';
+$a->strings['Response from remote site was not understood.'] = 'Response from remote site was not understood.';
+$a->strings['Unexpected response from remote site: '] = 'Unexpected response from remote site: ';
+$a->strings["Confirmation completed successfully."] = "Confirmation completed successfully.";
+$a->strings['Remote site reported: '] = 'Remote site reported: ';
+$a->strings["Temporary failure. Please wait and try again."] = "Temporary failure. Please wait and try again.";
+$a->strings["Introduction failed or was revoked."] = "Introduction failed or was revoked.";
+$a->strings['Unable to set contact photo.'] = 'Unable to set contact photo.';
+$a->strings['is now friends with'] = 'is now friends with';
+$a->strings['Our site encryption key is apparently messed up.'] = 'Our site encryption key is apparently messed up.';
+$a->strings['Empty site URL was provided or URL could not be decrypted by us.'] = 'Empty site URL was provided or URL could not be decrypted by us.';
+$a->strings['Contact record was not found for you on our site.'] = 'Contact record was not found for you on our site.';
+$a->strings['The ID provided by your system is a duplicate on our system. It should work if you try again.'] = 'The ID provided by your system is a duplicate on our system. It should work if you try again.';
+$a->strings['Unable to set your contact credentials on our system.'] = 'Unable to set your contact credentials on our system.';
+$a->strings['Unable to update your contact profile details on our system'] = 'Unable to update your contact profile details on our system';
+$a->strings["Connection accepted at %s"] = "Connection accepted at %s";
+$a->strings['Administrator'] = 'Administrator';
$a->strings['noreply'] = 'noreply';
$a->strings["%s commented on an item at %s"] = "%s commented on an item at %s";
$a->strings["This introduction has already been accepted."] = "This introduction has already been accepted.";
@@ -233,7 +241,6 @@ $a->strings['Group name changed.'] = 'Group name changed.';
$a->strings['Membership list updated.'] = 'Membership list updated.';
$a->strings['Create a group of contacts/friends.'] = 'Create a group of contacts/friends.';
$a->strings['Group Name: '] = 'Group Name: ';
-$a->strings['Submit'] = 'Submit';
$a->strings['Group removed.'] = 'Group removed.';
$a->strings['Unable to remove group.'] = 'Unable to remove group.';
$a->strings['Group Editor'] = 'Group Editor';
@@ -249,6 +256,16 @@ $a->strings['Proceed to registration'] = 'Proceed to registration';
$a->strings['Database import failed.'] = 'Database import failed.';
$a->strings['You may need to import the file "database.sql" manually using phpmyadmin or mysql.'] = 'You may need to import the file "database.sql" manually using phpmyadmin or mysql.';
$a->strings['Welcome to Friendika.'] = 'Welcome to Friendika.';
+$a->strings['Friendika Social Network'] = 'Friendika Social Network';
+$a->strings['Installation'] = 'Installation';
+$a->strings['In order to install Friendika we need to know how to contact your database.'] = 'In order to install Friendika we need to know how to contact your database.';
+$a->strings['Please contact your hosting provider or site administrator if you have questions about these settings.'] = 'Please contact your hosting provider or site administrator if you have questions about these settings.';
+$a->strings['The database you specify below must already exist. If it does not, please create it before continuing.'] = 'The database you specify below must already exist. If it does not, please create it before continuing.';
+$a->strings['Database Server Name'] = 'Database Server Name';
+$a->strings['Database Login Name'] = 'Database Login Name';
+$a->strings['Database Login Password'] = 'Database Login Password';
+$a->strings['Database Name'] = 'Database Name';
+$a->strings['Please select a default timezone for your website'] = 'Please select a default timezone for your website';
$a->strings['Could not find a command line version of PHP in the web server PATH.'] = 'Could not find a command line version of PHP in the web server PATH.';
$a->strings['This is required. Please adjust the configuration file .htconfig.php accordingly.'] = 'This is required. Please adjust the configuration file .htconfig.php accordingly.';
$a->strings['The command line version of PHP on your system does not have "register_argc_argv" enabled.'] = 'The command line version of PHP on your system does not have "register_argc_argv" enabled.';
@@ -296,6 +313,11 @@ $a->strings['Visible to:'] = 'Visible to:';
$a->strings['Password reset request issued. Check your email.'] = 'Password reset request issued. Check your email.';
$a->strings['Password reset requested at %s'] = 'Password reset requested at %s';
$a->strings["Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed."] = "Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.";
+$a->strings['Your password has been reset as requested.'] = 'Your password has been reset as requested.';
+$a->strings['Your new password is'] = 'Your new password is';
+$a->strings['Save or copy your new password - and then'] = 'Save or copy your new password - and then';
+$a->strings['click here to login'] = 'click here to login';
+$a->strings['Your password may be changed from the Settings page after successful login.'] = 'Your password may be changed from the Settings page after successful login.';
$a->strings['Forgot your Password?'] = 'Forgot your Password?';
$a->strings['Enter your email address and submit to have your password reset. Then check your email for further instructions.'] = 'Enter your email address and submit to have your password reset. Then check your email for further instructions.';
$a->strings['Nickname or Email: '] = 'Nickname or Email: ';
@@ -365,6 +387,7 @@ $a->strings['New Follower'] = 'New Follower';
$a->strings['Approve'] = 'Approve';
$a->strings['No notifications.'] = 'No notifications.';
$a->strings['User registrations waiting for confirm'] = 'User registrations waiting for confirm';
+$a->strings['Deny'] = 'Deny';
$a->strings['No registrations.'] = 'No registrations.';
$a->strings['Post successful.'] = 'Post successful.';
$a->strings['Login failed.'] = 'Login failed.';
@@ -407,6 +430,11 @@ $a->strings['Profile'] = 'Profile';
$a->strings['Photos'] = 'Photos';
$a->strings['Image uploaded but image cropping failed.'] = 'Image uploaded but image cropping failed.';
$a->strings['Unable to process image'] = 'Unable to process image';
+$a->strings['Upload File:'] = 'Upload File:';
+$a->strings['Upload Profile Photo'] = 'Upload Profile Photo';
+$a->strings['Upload'] = 'Upload';
+$a->strings['or'] = 'or';
+$a->strings['select a photo from your photo albums'] = 'select a photo from your photo albums';
$a->strings['Crop Image'] = 'Crop Image';
$a->strings['Please adjust the image cropping for optimum viewing.'] = 'Please adjust the image cropping for optimum viewing.';
$a->strings['Done Editing'] = 'Done Editing';
@@ -417,7 +445,48 @@ $a->strings['Profile deleted.'] = 'Profile deleted.';
$a->strings['Profile-'] = 'Profile-';
$a->strings['New profile created.'] = 'New profile created.';
$a->strings['Profile unavailable to clone.'] = 'Profile unavailable to clone.';
+$a->strings['Hide my contact/friend list from viewers of this profile?'] = 'Hide my contact/friend list from viewers of this profile?';
+$a->strings['Edit Profile Details'] = 'Edit Profile Details';
+$a->strings['View this profile'] = 'View this profile';
+$a->strings['Create a new profile using these settings'] = 'Create a new profile using these settings';
+$a->strings['Clone this profile'] = 'Clone this profile';
+$a->strings['Delete this profile'] = 'Delete this profile';
+$a->strings['Profile Name:'] = 'Profile Name:';
+$a->strings['Your Full Name:'] = 'Your Full Name:';
+$a->strings['Title/Description:'] = 'Title/Description:';
+$a->strings['Your Gender:'] = 'Your Gender:';
+$a->strings["Birthday \x28y/m/d\x29:"] = "Birthday \x28y/m/d\x29:";
+$a->strings['Street Address:'] = 'Street Address:';
+$a->strings['Locality/City:'] = 'Locality/City:';
+$a->strings['Postal/Zip Code:'] = 'Postal/Zip Code:';
+$a->strings['Country:'] = 'Country:';
+$a->strings['Region/State:'] = 'Region/State:';
+$a->strings['♥ Marital Status:'] = '♥ Marital Status:';
+$a->strings["Who: \x28if applicable\x29"] = "Who: \x28if applicable\x29";
+$a->strings['Examples: cathy123, Cathy Williams, cathy@example.com'] = 'Examples: cathy123, Cathy Williams, cathy@example.com';
+$a->strings['Sexual Preference:'] = 'Sexual Preference:';
+$a->strings['Homepage URL:'] = 'Homepage URL:';
+$a->strings['Political Views:'] = 'Political Views:';
+$a->strings['Religious Views:'] = 'Religious Views:';
+$a->strings['Public Keywords:'] = 'Public Keywords:';
+$a->strings['Private Keywords:'] = 'Private Keywords:';
+$a->strings['Example: fishing photography software'] = 'Example: fishing photography software';
+$a->strings["\x28Used for suggesting potential friends, can be seen by others\x29"] = "\x28Used for suggesting potential friends, can be seen by others\x29";
+$a->strings["\x28Used for searching profiles, never shown to others\x29"] = "\x28Used for searching profiles, never shown to others\x29";
+$a->strings['Tell us about yourself...'] = 'Tell us about yourself...';
+$a->strings['Hobbies/Interests'] = 'Hobbies/Interests';
+$a->strings['Contact information and Social Networks'] = 'Contact information and Social Networks';
+$a->strings['Musical interests'] = 'Musical interests';
+$a->strings['Books, literature'] = 'Books, literature';
+$a->strings['Television'] = 'Television';
+$a->strings['Film/dance/culture/entertainment'] = 'Film/dance/culture/entertainment';
+$a->strings['Love/romance'] = 'Love/romance';
+$a->strings['Work/employment'] = 'Work/employment';
+$a->strings['School/education'] = 'School/education';
$a->strings['This is your public profile.
It may be visible to anybody using the internet.'] = 'This is your public profile.
It may be visible to anybody using the internet.';
+$a->strings['Profiles'] = 'Profiles';
+$a->strings['Change profile photo'] = 'Change profile photo';
+$a->strings['Create New Profile'] = 'Create New Profile';
$a->strings['Profile Image'] = 'Profile Image';
$a->strings['Invalid OpenID url'] = 'Invalid OpenID url';
$a->strings['Please enter the required information.'] = 'Please enter the required information.';
@@ -474,8 +543,36 @@ $a->strings['Automatic Friend Account'] = 'Automatic Friend Account';
$a->strings['Automatically approve all connection/friend requests as friends'] = 'Automatically approve all connection/friend requests as friends';
$a->strings['OpenID: '] = 'OpenID: ';
$a->strings[" \x28Optional\x29 Allow this OpenID to login to this account."] = " \x28Optional\x29 Allow this OpenID to login to this account.";
+$a->strings['Publish your default profile in site directory?'] = 'Publish your default profile in site directory?';
+$a->strings['Publish your default profile in global social directory?'] = 'Publish your default profile in global social directory?';
$a->strings['Profile is not published.'] = 'Profile is not published.';
+$a->strings['Your profile address is'] = 'Your profile address is';
$a->strings['Export Personal Data'] = 'Export Personal Data';
+$a->strings['Basic Settings'] = 'Basic Settings';
+$a->strings['Full Name:'] = 'Full Name:';
+$a->strings['Email Address:'] = 'Email Address:';
+$a->strings['Your Timezone:'] = 'Your Timezone:';
+$a->strings['Default Post Location:'] = 'Default Post Location:';
+$a->strings['Use Browser Location:'] = 'Use Browser Location:';
+$a->strings['Display Theme:'] = 'Display Theme:';
+$a->strings['Security and Privacy Settings'] = 'Security and Privacy Settings';
+$a->strings['Maximum Friend Requests/Day:'] = 'Maximum Friend Requests/Day:';
+$a->strings["\x28to prevent spam abuse\x29"] = "\x28to prevent spam abuse\x29";
+$a->strings['Allow friends to post to your profile page:'] = 'Allow friends to post to your profile page:';
+$a->strings["Automatically expire \x28delete\x29 posts older than"] = "Automatically expire \x28delete\x29 posts older than";
+$a->strings['days'] = 'days';
+$a->strings['Notification Settings'] = 'Notification Settings';
+$a->strings['Send a notification email when:'] = 'Send a notification email when:';
+$a->strings['You receive an introduction'] = 'You receive an introduction';
+$a->strings['Your introductions are confirmed'] = 'Your introductions are confirmed';
+$a->strings['Someone writes on your profile wall'] = 'Someone writes on your profile wall';
+$a->strings['Someone writes a followup comment'] = 'Someone writes a followup comment';
+$a->strings['You receive a private message'] = 'You receive a private message';
+$a->strings['Password Settings'] = 'Password Settings';
+$a->strings['Leave password fields blank unless changing'] = 'Leave password fields blank unless changing';
+$a->strings['New Password:'] = 'New Password:';
+$a->strings['Confirm:'] = 'Confirm:';
+$a->strings['Advanced Page Settings'] = 'Advanced Page Settings';
$a->strings['Default Post Permissions'] = 'Default Post Permissions';
$a->strings['Tag removed'] = 'Tag removed';
$a->strings['Remove Item Tag'] = 'Remove Item Tag';
@@ -507,7 +604,6 @@ $a->strings['months'] = 'months';
$a->strings['week'] = 'week';
$a->strings['weeks'] = 'weeks';
$a->strings['day'] = 'day';
-$a->strings['days'] = 'days';
$a->strings['hour'] = 'hour';
$a->strings['hours'] = 'hours';
$a->strings['minute'] = 'minute';
@@ -526,8 +622,22 @@ $a->strings['Network'] = 'Network';
$a->strings['Notifications'] = 'Notifications';
$a->strings['Manage'] = 'Manage';
$a->strings['Settings'] = 'Settings';
-$a->strings['Profiles'] = 'Profiles';
$a->strings['Embedding disabled'] = 'Embedding disabled';
+$a->strings['j F, Y'] = 'j F, Y';
+$a->strings['j F'] = 'j F';
+$a->strings['Age:'] = 'Age:';
+$a->strings['♥ Status:'] = '♥ Status:';
+$a->strings['Religion:'] = 'Religion:';
+$a->strings['About:'] = 'About:';
+$a->strings['Hobbies/Interests:'] = 'Hobbies/Interests:';
+$a->strings['Contact information and Social Networks:'] = 'Contact information and Social Networks:';
+$a->strings['Musical interests:'] = 'Musical interests:';
+$a->strings['Books, literature:'] = 'Books, literature:';
+$a->strings['Television:'] = 'Television:';
+$a->strings['Film/dance/culture/entertainment:'] = 'Film/dance/culture/entertainment:';
+$a->strings['Love/Romance:'] = 'Love/Romance:';
+$a->strings['Work/employment:'] = 'Work/employment:';
+$a->strings['School/education:'] = 'School/education:';
$a->strings['Male'] = 'Male';
$a->strings['Female'] = 'Female';
$a->strings['Currently Male'] = 'Currently Male';
@@ -783,7 +893,6 @@ $a->strings['America/Managua'] = 'America/Managua';
$a->strings['America/Manaus'] = 'America/Manaus';
$a->strings['America/Marigot'] = 'America/Marigot';
$a->strings['America/Martinique'] = 'America/Martinique';
-$a->strings['America/Matamoros'] = 'America/Matamoros';
$a->strings['America/Mazatlan'] = 'America/Mazatlan';
$a->strings['America/Mendoza'] = 'America/Mendoza';
$a->strings['America/Menominee'] = 'America/Menominee';
@@ -802,7 +911,6 @@ $a->strings['America/Nome'] = 'America/Nome';
$a->strings['America/Noronha'] = 'America/Noronha';
$a->strings['America/North_Dakota/Center'] = 'America/North_Dakota/Center';
$a->strings['America/North_Dakota/New_Salem'] = 'America/North_Dakota/New_Salem';
-$a->strings['America/Ojinaga'] = 'America/Ojinaga';
$a->strings['America/Panama'] = 'America/Panama';
$a->strings['America/Pangnirtung'] = 'America/Pangnirtung';
$a->strings['America/Paramaribo'] = 'America/Paramaribo';
@@ -819,7 +927,6 @@ $a->strings['America/Regina'] = 'America/Regina';
$a->strings['America/Resolute'] = 'America/Resolute';
$a->strings['America/Rio_Branco'] = 'America/Rio_Branco';
$a->strings['America/Rosario'] = 'America/Rosario';
-$a->strings['America/Santa_Isabel'] = 'America/Santa_Isabel';
$a->strings['America/Santarem'] = 'America/Santarem';
$a->strings['America/Santiago'] = 'America/Santiago';
$a->strings['America/Santo_Domingo'] = 'America/Santo_Domingo';
@@ -848,7 +955,6 @@ $a->strings['America/Yellowknife'] = 'America/Yellowknife';
$a->strings['Antarctica/Casey'] = 'Antarctica/Casey';
$a->strings['Antarctica/Davis'] = 'Antarctica/Davis';
$a->strings['Antarctica/DumontDUrville'] = 'Antarctica/DumontDUrville';
-$a->strings['Antarctica/Macquarie'] = 'Antarctica/Macquarie';
$a->strings['Antarctica/Mawson'] = 'Antarctica/Mawson';
$a->strings['Antarctica/McMurdo'] = 'Antarctica/McMurdo';
$a->strings['Antarctica/Palmer'] = 'Antarctica/Palmer';
@@ -911,7 +1017,6 @@ $a->strings['Asia/Makassar'] = 'Asia/Makassar';
$a->strings['Asia/Manila'] = 'Asia/Manila';
$a->strings['Asia/Muscat'] = 'Asia/Muscat';
$a->strings['Asia/Nicosia'] = 'Asia/Nicosia';
-$a->strings['Asia/Novokuznetsk'] = 'Asia/Novokuznetsk';
$a->strings['Asia/Novosibirsk'] = 'Asia/Novosibirsk';
$a->strings['Asia/Omsk'] = 'Asia/Omsk';
$a->strings['Asia/Oral'] = 'Asia/Oral';
diff --git a/view/comment_item.tpl b/view/comment_item.tpl
index dabbd6e87..0216e31d3 100644
--- a/view/comment_item.tpl
+++ b/view/comment_item.tpl
@@ -10,11 +10,11 @@
-
+
diff --git a/view/en/contact_edit.tpl b/view/contact_edit.tpl
similarity index 79%
rename from view/en/contact_edit.tpl
rename to view/contact_edit.tpl
index 9aca60188..4c2c6c6f8 100644
--- a/view/en/contact_edit.tpl
+++ b/view/contact_edit.tpl
@@ -28,7 +28,7 @@
- $lastupdtext$last_update
+ $lastupdtext$last_update
$updpub
$poll_interval
@@ -41,41 +41,41 @@ $blocked
$ignored
-Contact Information / Notes
+$lbl_info1
-
+
-Profile Visibility
-Please choose the profile you would like to display to $name when viewing your profile securely.
+
$lbl_vis1
+$lbl_vis2
$profile_select
-
+
-Online Reputation
+$lbl_rep1
-Occasionally your friends may wish to inquire about this person's online legitimacy. You may help them choose whether or not to interact with this person by providing a 'reputation' to guide them.
+$lbl_rep2 $lbl_rep3
$rating
-Please take a moment to elaborate on this selection if you feel it could be helpful to others.
+$lbl_rep4
$groups
-
+
diff --git a/view/de/contact_edit.tpl b/view/de/contact_edit.tpl
deleted file mode 100644
index 0b32bdd66..000000000
--- a/view/de/contact_edit.tpl
+++ /dev/null
@@ -1,86 +0,0 @@
-
-$header
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Musical interests
-
-
-
-
-
-
-
-
-
-
-Books, literature
-
-
-
-
-
-
-
-
-
-
-
-
-Television
-
-
-
-
-
-
-
-
-
-
-
-
-Film/dance/culture/entertainment
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Love/romance
-
-
-
-
-
-
-
-
-
-
-
-
-Work/employment
-
-
-
-
-
-
-
-
-
-
-
-
-School/education
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/view/en/profile_entry_default.tpl b/view/en/profile_entry_default.tpl
deleted file mode 100644
index 651199918..000000000
--- a/view/en/profile_entry_default.tpl
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
diff --git a/view/en/profile_listing_header.tpl b/view/en/profile_listing_header.tpl
deleted file mode 100644
index d4b139a69..000000000
--- a/view/en/profile_listing_header.tpl
+++ /dev/null
@@ -1,8 +0,0 @@
-Profiles
-
-
-
diff --git a/view/en/pwdreset.tpl b/view/en/pwdreset.tpl
deleted file mode 100644
index dd609f061..000000000
--- a/view/en/pwdreset.tpl
+++ /dev/null
@@ -1,16 +0,0 @@
-Password Reset
-
-
-Your password has been reset as requested.
-
-
-Your new password is
-
-
-$newpass
-
-
-Save or copy your new password - and then click here to login.
-
-
-Your password may be changed from the 'Settings' page after successful login.
\ No newline at end of file
diff --git a/view/en/registrations.tpl b/view/en/registrations.tpl
deleted file mode 100644
index c8646043e..000000000
--- a/view/en/registrations.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
$fullname ($email) : Approve - Deny
diff --git a/view/fr/contact_edit.tpl b/view/fr/contact_edit.tpl
deleted file mode 100644
index d74ac54f3..000000000
--- a/view/fr/contact_edit.tpl
+++ /dev/null
@@ -1,83 +0,0 @@
-
-$header
-
-
-
-
-
-
-
-
-
-
diff --git a/view/fr/profile-hide-friends.tpl b/view/fr/profile-hide-friends.tpl
deleted file mode 100644
index 857e049bb..000000000
--- a/view/fr/profile-hide-friends.tpl
+++ /dev/null
@@ -1,16 +0,0 @@
-
-Cacher ma liste de contacts/amis des visiteurs de ce profil?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/view/fr/profile-in-directory.tpl b/view/fr/profile-in-directory.tpl
deleted file mode 100644
index 1189e3f9f..000000000
--- a/view/fr/profile-in-directory.tpl
+++ /dev/null
@@ -1,16 +0,0 @@
-
-Publier votre profil par défaut dans l'annuaire local?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/view/fr/profile-in-netdir.tpl b/view/fr/profile-in-netdir.tpl
deleted file mode 100644
index 9b94f302a..000000000
--- a/view/fr/profile-in-netdir.tpl
+++ /dev/null
@@ -1,16 +0,0 @@
-
-Publier votre profil par défaut dans l'annuaire global?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/view/fr/profile_edit.tpl b/view/fr/profile_edit.tpl
deleted file mode 100644
index c76bc592c..000000000
--- a/view/fr/profile_edit.tpl
+++ /dev/null
@@ -1,299 +0,0 @@
-Éditer les détails du profil
-
-
-
-
-
-
-
-$default
-
-
-
-
-
-
-*
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$gender
-
-
-
-
-
-
-$dob $age
-
-
-
-
-$hide_friends
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$marital
-
-
-
-
-
-
-
-$sexual
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-(Utilisés pour les amis potentiels, peuvent être vus)
-
-
-
-
-
-(Utilisés lors des recherches, ne sont jamais montrés à personne)
-
-
-
-
-
-
-
-
-
-
-Parlez nous de vous...
-
-
-
-
-
-
-
-
-
-
-
-Marottes/Centre d'intérêts
-
-
-
-
-
-
-
-
-
-
-
-Coordonnées et réseau sociaux
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Goûts musicaux
-
-
-
-
-
-
-
-
-
-
-Livres, littérature
-
-
-
-
-
-
-
-
-
-
-
-
-Télévision
-
-
-
-
-
-
-
-
-
-
-
-
-Cinéma/Danse/Culture/Divertissement
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Amour/Passion
-
-
-
-
-
-
-
-
-
-
-
-
-Travail/activité professionnelle
-
-
-
-
-
-
-
-
-
-
-
-
-École/études
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/view/fr/profile_entry_default.tpl b/view/fr/profile_entry_default.tpl
deleted file mode 100644
index b7f94b0b0..000000000
--- a/view/fr/profile_entry_default.tpl
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
diff --git a/view/fr/profile_listing_header.tpl b/view/fr/profile_listing_header.tpl
deleted file mode 100644
index 70393e1bc..000000000
--- a/view/fr/profile_listing_header.tpl
+++ /dev/null
@@ -1,8 +0,0 @@
-Profiles
-
-
-
diff --git a/view/fr/profile_photo.tpl b/view/fr/profile_photo.tpl
deleted file mode 100644
index e506b2066..000000000
--- a/view/fr/profile_photo.tpl
+++ /dev/null
@@ -1,18 +0,0 @@
-Téléverser une photo de profil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/view/fr/pwdreset.tpl b/view/fr/pwdreset.tpl
deleted file mode 100644
index 502d0d447..000000000
--- a/view/fr/pwdreset.tpl
+++ /dev/null
@@ -1,18 +0,0 @@
-Mot de passe réinitialisé
-
-
-Votre mot de passe a été changé, comme demandé.
-
-
-Votre nouveau mot de passe est
-
-
-$newpass
-
-
-Sauvez ou copiez ce nouveau mot de passe - puis connectez-vous.
-
-
-
-Votre mot de passe pourra être changé, après connexion, dans la page 'Réglages'.
-
diff --git a/view/fr/registrations.tpl b/view/fr/registrations.tpl
deleted file mode 100644
index 73bc3883e..000000000
--- a/view/fr/registrations.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
$fullname ($email) : Approuver - Refuser
diff --git a/view/fr/settings.tpl b/view/fr/settings.tpl
deleted file mode 100644
index fc9b6d65b..000000000
--- a/view/fr/settings.tpl
+++ /dev/null
@@ -1,175 +0,0 @@
-Réglages du compte
-
-
-
-$uexport
-
-$nickname_block
-
-
-
-
-
-Réglages basiques
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$zoneselect
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$theme
-
-
-
-
-
-
-
-
-Sécurité et vie privée
-
-
-
-
-
-
-
-(pour limiter le spam)
-
-
-
-
-
-
-$profile_in_dir
-
-$profile_in_net_dir
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Faire automatiquement expirer (supprimer) les publications de plus de jours
-
-
-
-
-
-
-
-
-Notifications
-
-
-
-Envoyer un courriel d'alerte quand:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Mot de passe
-
-
-
-
-Laissez le champ vide, sauf si vous souhaitez le changer
-
-
-
-
-
-
-
-
-
-
-
-
-
- $oidhtml
-
-
-
-
-
-
-
-
-
-Réglages avancés
-
-$pagetype
-
-
-
-
-
-
diff --git a/view/fr/settings_nick_set.tpl b/view/fr/settings_nick_set.tpl
deleted file mode 100644
index 761b089f1..000000000
--- a/view/fr/settings_nick_set.tpl
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-$subdir
-
-
-
-
diff --git a/view/fr/settings_nick_subdir.tpl b/view/fr/settings_nick_subdir.tpl
deleted file mode 100644
index 2a367f8da..000000000
--- a/view/fr/settings_nick_subdir.tpl
+++ /dev/null
@@ -1,7 +0,0 @@
-
-Il semble que votre site soit situé dans un sous-répertoire du
-site $hostname, ce réglage pourrait donc ne pas marcher comme prévu.
-
-Si vous avez le moindre problème, essayez d'utiliser l'adresse
-de profil suivante : '$baseurl/profile/$nickname'.
-
diff --git a/view/head.tpl b/view/head.tpl
index 7a5710b2a..1ff0ae1df 100644
--- a/view/head.tpl
+++ b/view/head.tpl
@@ -3,6 +3,10 @@
+