merged multipart email changes
2
.gitignore
vendored
|
|
@ -1,3 +1,4 @@
|
|||
favicon.*
|
||||
.htconfig.php
|
||||
\#*
|
||||
wip/*
|
||||
|
|
@ -6,4 +7,5 @@ include/jquery-1.4.2.min.js
|
|||
*.out
|
||||
*.version*
|
||||
push*
|
||||
langup
|
||||
home.html
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
Options -Indexes
|
||||
AddType application/x-java-archive .jar
|
||||
AddType audio/ogg .oga
|
||||
|
|
|
|||
190
README
|
|
@ -1,132 +1,74 @@
|
|||
|
||||
*********
|
||||
Friendika
|
||||
*********
|
||||
*************
|
||||
* Friendika *
|
||||
*************
|
||||
|
||||
Distributed Social Network
|
||||
Friendika Communications Server
|
||||
|
||||
http://friendika.com
|
||||
|
||||
|
||||
Since the dawn of the world-wide-web, the internet has been a battleground
|
||||
between the "big boys" with all their resources, and a bunch of upstarts whose
|
||||
goal is to topple the status quo - and bring the same powers of global reach
|
||||
to anybody with a computer and an internet connection.
|
||||
|
||||
The latest battleground is social networking. Many of your friends would
|
||||
have you believe that the world (and all the information in it) belongs to
|
||||
Facebook.
|
||||
|
||||
Friendika is here to rock that boat.
|
||||
|
||||
Granted, all your friends aren't here - yet. The people who made fun of you
|
||||
in high school (yet curiously wanted to be friends with you now) are still
|
||||
"poking" each other and managing their virtual farms and telling you all about
|
||||
their virtual gang wars. Would you miss them?
|
||||
|
||||
I wouldn't.
|
||||
|
||||
You probably have a handful of friends that are truly special. Tell those
|
||||
friends that the world has changed - because it has. It's time to move on. A
|
||||
year ago, if you had left Facebook, there was no place to go - at least a
|
||||
place which offered the same kind of social interaction (and wasn't just
|
||||
another huge company trying to make money off of all of your private
|
||||
information).
|
||||
|
||||
Today you have options.
|
||||
|
||||
What if there was a social network which provided some of the same
|
||||
interaction you've grown to love, *and* was free to use, *and* was open source,
|
||||
*and* where your privacy is always under your control?
|
||||
|
||||
And what if this social network could scale to encompass the entire
|
||||
internet, and *not* require a central organisation to provide servers?
|
||||
(In exchange for peddling your private information behind your back.)
|
||||
|
||||
Look no further.
|
||||
|
||||
Friendika is a social network without boundaries, and without ownership.
|
||||
Friendika installations can link together into a global social network which
|
||||
is free from central control. Besides the Friendika network (which is privacy
|
||||
enhanced); you can also connect with and communicate with friends on identi.ca,
|
||||
Status.Net and many other sites and social networks *today*.
|
||||
|
||||
Welcome to the federated social web. If you choose not to use Friendika
|
||||
(though we think you'd be foolish not to), you can choose any of 20-30 other
|
||||
providers of federated social networking software and still be a part of this
|
||||
vast new social network. This is going to be bigger than Facebook.
|
||||
|
||||
Much bigger.
|
||||
|
||||
We are currently developing connectors to seamlessly communicate with many
|
||||
other open social networks and providers - like Diaspora, GNU-Social,
|
||||
OneSocialWeb, and even some of the larger closed services such as Facebook and
|
||||
Twitter.
|
||||
|
||||
Over the coming months, the boundaries between these networks will start
|
||||
to become indistinguishable as they all become part of your social circle.
|
||||
|
||||
Our core belief is that your personal thoughts and conversations belong to
|
||||
you - and are only meant to be shared with those you wish to share them with.
|
||||
|
||||
Period.
|
||||
|
||||
Friendika is secure, and as private as you wish it to be. Our privacy
|
||||
settings are straight-forward and simple, because we know that relationships
|
||||
rarely are (straight-forward and simple). Whether you're communicating with
|
||||
drinking buddies or potential employers, you can rest assured that each is
|
||||
only able to see the side of you that you wish to present. If you send a
|
||||
private message to your aunt Mary, we will encrypt it with military grade
|
||||
encryption.
|
||||
|
||||
Other distributed social network projects talk about privacy and offering
|
||||
a feature-rich social networking alternative, but all they can deliver is
|
||||
vapour and vague promises. Things like "Private mail will be in the next
|
||||
release".
|
||||
|
||||
Friendika delivers. We've got an incredibly rich social communications
|
||||
interface you can make use of *right now*.
|
||||
|
||||
And lest you think we're just trying to copy Facebook feature-for-feature,
|
||||
you couldn't be further from the truth. We like the conversational style
|
||||
because it feels natural, and that's why Facebook grew to be what it is today.
|
||||
But we're creating something completely different.
|
||||
|
||||
Something better.
|
||||
|
||||
A single instance of Friendika can easily support hundreds of (and up to
|
||||
several thousand) people using commodity hosting hardware. You could even run
|
||||
Friendika on an old PC in your closet or garage. Each of these people are able
|
||||
to connect with potentially hundreds or thousands of friends and associates
|
||||
on any other supported network anywhere in the world and share photos, links,
|
||||
status updates, etc.
|
||||
|
||||
But maybe you don't want to be connected to the world... and that's OK
|
||||
too. Friendika may be closed off from the global community and used to support
|
||||
social networking amongst corporate, educational, religious, and other private
|
||||
communities. This makes it an excellent choice for the social networking needs
|
||||
of young teenagers and especially k-12 organisations.
|
||||
|
||||
Every person on Friendika has unlimited profiles available to them. There
|
||||
is a "public profile" which can be seen by anybody. Additional profiles may be
|
||||
tailored to specific groups or individuals. Try doing that on Twitter.
|
||||
|
||||
Groups may be created and used for closed conversations. In this way your
|
||||
conversations with one group of friends is completely isolated from other
|
||||
friends or groups of friends.
|
||||
|
||||
You may also create interactive band/celebrity pages, special interest
|
||||
groups, and even organisational 'soapboxes' - for social communications that
|
||||
require the ability to scale to global levels. Friendika provides for automatic
|
||||
relationship management in these extreme cases so that you can concentrate on
|
||||
your message and public persona - and not worry about being swamped by friend
|
||||
requests. You can even maintain private social contact with your closest
|
||||
friends and public updates to your hordes of fans - using the same interface.
|
||||
|
||||
No other social network offers this ability.
|
||||
http://project.friendika.com
|
||||
|
||||
|
||||
Join us.
|
||||
Friendika is a web application for managing social communications. Some
|
||||
would call it a "social network" or "distributed social network". We think
|
||||
both terms have been over-used, and don't adequately describe Friendika's
|
||||
capabilities - though Friendika can also fill those roles.
|
||||
|
||||
At its essence, Friendika is a web application which can monitor various
|
||||
information and social activity streams, and which also lets you participate
|
||||
in online conversations with friends and associates, using a variety of network
|
||||
protocols. These are combined into an overview of your various communications
|
||||
and activities - regardless of network origin.
|
||||
|
||||
Friendika also manages your personal profiles and photo albums and lets
|
||||
you securely present each of these to specific audiences. Your communications
|
||||
can be either open and public, or closed and private. You can easily create
|
||||
"groups" of contacts with which you can partition your conversations into
|
||||
private social circles, and which cannot be seen outside the circle.
|
||||
|
||||
Friendika is decentralised. Any account on any Friendika server can connect
|
||||
with any account on any other Friendika server. You can also connect to and
|
||||
interact directly with friends on Status.Net and other federated social web
|
||||
services (e.g. identi.ca, GNU-Social, etc.).
|
||||
|
||||
Outgoing communications can be directed at these networks and also
|
||||
existing accounts on Facebook and Twitter - or even delivered to email
|
||||
contacts.
|
||||
|
||||
Incoming data streams aren't limited to traditional social networks.
|
||||
They may include most any service which provides a syndication feed (both RSS
|
||||
and Atom). This allows you to view communications from friends in other
|
||||
diverse social networks - such as Diaspora, Google Buzz, and millions of
|
||||
blogs, news services, and other websites. You can also import
|
||||
contacts from (and write to) anybody that is accessible from your email
|
||||
INBOX and view them in your social stream. Over time we will try to
|
||||
build two-way bridges to other services so that you can freely
|
||||
interact in both directions with anybody on an accessible network that
|
||||
allows it.
|
||||
|
||||
Communications between Friendika servers are private and encrypted,
|
||||
using military grade encryption - and require mutual identity provenance
|
||||
before any data is exchanged. These same crypto mechanisms provide remote
|
||||
password-less authentication; allowing you to post to profiles and view private
|
||||
photo collections on other servers - without encountering any login and/or
|
||||
authorisation dialogues when visiting these sites.
|
||||
|
||||
Friendika has no boundaries and no central ownership of the data generated
|
||||
within the network. Anybody with a commodity PHP/MySQL web server or hosting
|
||||
account can provide a server, and each individual server can then support
|
||||
up to several thousand participating members - each with their own unique
|
||||
communication and privacy needs. This allows Friendika to scale to global
|
||||
levels and mimics the decentralised architecture of the web itself.
|
||||
|
||||
If you are creating a website which requires social interaction, Friendika
|
||||
can also take the place of blog software, forum software and feed readers, and
|
||||
also provide individualised communications and content management - or
|
||||
simply be used as an alternative to traditional "monolithic" social networks.
|
||||
|
||||
Friendika is also free - in every sense of the word.
|
||||
|
||||
Choose freedom - join us.
|
||||
|
||||
Find out more about the project at http://project.friendika.com
|
||||
|
||||
*******************
|
||||
Friendika Demo Site
|
||||
|
|
|
|||
|
|
@ -1,17 +1,13 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* This module still needs a lot of work, but is functional today.
|
||||
* Please review this section if you upgrade because things will change.
|
||||
* If you have issues upgrading, remove facebook from the addon list,
|
||||
* view a page on your site, then add it back to the list. This will reset
|
||||
* all of the plugin 'hooks'.
|
||||
* Installing the Friendika/Facebook connector
|
||||
*
|
||||
* 1. register an API key for your site from developer.facebook.com
|
||||
* a. We'd be very happy if you include "Friendika" in the application name
|
||||
* to increase name recognition. The Friendika icons are also present
|
||||
* in the images directory and may be uploaded as a Facebook app icon.
|
||||
* Use images/ff-16.jpg for the Icon and images/ff-128.jpg for the Logo.
|
||||
* Use images/friendika-16.jpg for the Icon and images/friendika-128.jpg for the Logo.
|
||||
* b. The url should be your site URL with a trailing slash.
|
||||
* You may use http://portal.friendika.com/privacy as the privacy policy
|
||||
* URL unless your site has different requirements, and
|
||||
|
|
@ -24,20 +20,20 @@
|
|||
* Replace with the settings Facebook gives you.
|
||||
* 2. Enable the facebook plugin by including it in .htconfig.php - e.g.
|
||||
* $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
|
||||
* 3. Visit your site url + '/facebook' (e.g. http://example.com/facebook)
|
||||
* and click 'Install Facebook posting'.
|
||||
* 3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
|
||||
* and click 'Install Facebook Connector'.
|
||||
* 4. This will ask you to login to Facebook and grant permission to the
|
||||
* plugin to do its stuff. Allow it to do so.
|
||||
* 5. You're done. To turn it off visit your site's /facebook page again and
|
||||
* 5. You're done. To turn it off visit the Plugin Settings page again and
|
||||
* 'Remove Facebook posting'.
|
||||
*
|
||||
* Turn logging on (see the github Friendika wiki page 'Settings') and
|
||||
* repeat these steps if you have trouble.
|
||||
* Vidoes and embeds will not be posted if there is no other content. Links
|
||||
* and images will be converted to text and long posts truncated - with a link
|
||||
* to view the full post. Posts with permission settings and comments will
|
||||
* not be posted to Facebook.
|
||||
* and images will be converted to a format suitable for the Facebook API and
|
||||
* long posts truncated - with a link to view the full post.
|
||||
*
|
||||
* Facebook contacts will not be able to view private photos, as they are not able to
|
||||
* authenticate to your site to establish identity. We will address this
|
||||
* in a future release.
|
||||
*/
|
||||
|
||||
define('FACEBOOK_MAXPOSTLEN', 420);
|
||||
|
|
@ -88,6 +84,10 @@ function facebook_init(&$a) {
|
|||
$token = substr($token,0,strpos($token,'&'));
|
||||
set_pconfig($uid,'facebook','access_token',$token);
|
||||
set_pconfig($uid,'facebook','post','1');
|
||||
fb_get_self($uid);
|
||||
fb_get_friends($uid);
|
||||
fb_consume_all($uid);
|
||||
|
||||
}
|
||||
|
||||
// todo: is this a browser session or a server session? where do we go?
|
||||
|
|
@ -95,6 +95,138 @@ function facebook_init(&$a) {
|
|||
|
||||
}
|
||||
|
||||
|
||||
function fb_get_self($uid) {
|
||||
$access_token = get_pconfig($uid,'facebook','access_token');
|
||||
if(! $access_token)
|
||||
return;
|
||||
$s = fetch_url('https://graph.facebook.com/me/?access_token=' . $access_token);
|
||||
if($s) {
|
||||
$j = json_decode($s);
|
||||
set_pconfig($uid,'facebook','self_id',(string) $j->id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function fb_get_friends($uid) {
|
||||
|
||||
$access_token = get_pconfig($uid,'facebook','access_token');
|
||||
if(! $access_token)
|
||||
return;
|
||||
$s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token);
|
||||
if($s) {
|
||||
logger('facebook: fb_get_friends: ' . $s, LOGGER_DATA);
|
||||
$j = json_decode($s);
|
||||
logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA);
|
||||
foreach($j->data as $person) {
|
||||
$s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token);
|
||||
if($s) {
|
||||
$jp = json_decode($s);
|
||||
logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA);
|
||||
|
||||
// always use numeric link for consistency
|
||||
|
||||
$jp->link = 'http://facebook.com/profile.php?id=' . $person->id;
|
||||
|
||||
// check if we already have a contact
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
|
||||
intval($uid),
|
||||
dbesc($jp->link)
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
|
||||
// check that we have all the photos, this has been known to fail on occasion
|
||||
|
||||
if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) {
|
||||
require_once("Photo.php");
|
||||
|
||||
$photos = import_profile_photo('https://graph.facebook.com/' . $jp->id . '/picture', $uid, $r[0]['id']);
|
||||
|
||||
$r = q("UPDATE `contact` SET `photo` = '%s',
|
||||
`thumb` = '%s',
|
||||
`micro` = '%s',
|
||||
`name-date` = '%s',
|
||||
`uri-date` = '%s',
|
||||
`avatar-date` = '%s'
|
||||
WHERE `id` = %d LIMIT 1
|
||||
",
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
dbesc($photos[2]),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
intval($r[0]['id'])
|
||||
);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
|
||||
// create contact record
|
||||
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`,
|
||||
`name`, `nick`, `photo`, `network`, `rel`, `priority`,
|
||||
`writable`, `blocked`, `readonly`, `pending` )
|
||||
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
|
||||
intval($uid),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($jp->link),
|
||||
dbesc(''),
|
||||
dbesc(''),
|
||||
dbesc($jp->id),
|
||||
dbesc('facebook ' . $jp->id),
|
||||
dbesc($jp->name),
|
||||
dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)),
|
||||
dbesc('https://graph.facebook.com/' . $jp->id . '/picture'),
|
||||
dbesc(NETWORK_FACEBOOK),
|
||||
intval(REL_BUD),
|
||||
intval(1),
|
||||
intval(1)
|
||||
);
|
||||
}
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($jp->link),
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
if(! count($r)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$contact = $r[0];
|
||||
$contact_id = $r[0]['id'];
|
||||
|
||||
require_once("Photo.php");
|
||||
|
||||
$photos = import_profile_photo($r[0]['photo'],$uid,$contact_id);
|
||||
|
||||
$r = q("UPDATE `contact` SET `photo` = '%s',
|
||||
`thumb` = '%s',
|
||||
`micro` = '%s',
|
||||
`name-date` = '%s',
|
||||
`uri-date` = '%s',
|
||||
`avatar-date` = '%s'
|
||||
WHERE `id` = %d LIMIT 1
|
||||
",
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
dbesc($photos[2]),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
intval($contact_id)
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function facebook_post(&$a) {
|
||||
|
||||
if(local_user()){
|
||||
|
|
@ -116,6 +248,12 @@ function facebook_content(&$a) {
|
|||
notice( t('Facebook disabled') . EOL);
|
||||
}
|
||||
|
||||
if($a->argc > 1 && $a->argv[1] === 'friends') {
|
||||
fb_get_friends(local_user());
|
||||
notice( t('Updating contacts') . EOL);
|
||||
}
|
||||
|
||||
|
||||
$fb_installed = get_pconfig(local_user(),'facebook','post');
|
||||
|
||||
$appid = get_config('facebook','appid');
|
||||
|
|
@ -134,14 +272,14 @@ function facebook_content(&$a) {
|
|||
$o .= '<div id="facebook-enable-wrapper">';
|
||||
|
||||
$o .= '<a href="https://www.facebook.com/dialog/oauth?client_id=' . $appid . '&redirect_uri='
|
||||
. $a->get_baseurl() . '/facebook/' . $a->user['nickname'] . '&scope=publish_stream,read_stream,offline_access">' . t('Install Facebook post connector') . '</a>';
|
||||
. $a->get_baseurl() . '/facebook/' . $a->user['nickname'] . '&scope=publish_stream,read_stream,offline_access">' . t('Install Facebook connector for this account.') . '</a>';
|
||||
$o .= '</div>';
|
||||
}
|
||||
|
||||
if($fb_installed) {
|
||||
$o .= '<div id="facebook-disable-wrapper">';
|
||||
|
||||
$o .= '<a href="' . $a->get_baseurl() . '/facebook/remove' . '">' . t('Remove Facebook post connector') . '</a></div>';
|
||||
$o .= '<a href="' . $a->get_baseurl() . '/facebook/remove' . '">' . t('Remove Facebook connector') . '</a></div>';
|
||||
|
||||
$o .= '<div id="facebook-post-default-form">';
|
||||
$o .= '<form action="facebook" method="post" >';
|
||||
|
|
@ -158,6 +296,7 @@ function facebook_install() {
|
|||
register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook');
|
||||
register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets');
|
||||
register_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings');
|
||||
register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron');
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -165,9 +304,46 @@ function facebook_uninstall() {
|
|||
unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook');
|
||||
unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets');
|
||||
unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings');
|
||||
unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron');
|
||||
}
|
||||
|
||||
|
||||
function facebook_cron($a,$b) {
|
||||
|
||||
$last = get_config('facebook','last_poll');
|
||||
|
||||
$poll_interval = intval(get_config('facebook','poll_interval'));
|
||||
if(! $poll_interval)
|
||||
$poll_interval = 3600;
|
||||
|
||||
if($last) {
|
||||
$next = $last + $poll_interval;
|
||||
if($next > time())
|
||||
return;
|
||||
}
|
||||
|
||||
logger('facebook_cron');
|
||||
|
||||
set_config('facebook','last_poll', time());
|
||||
|
||||
$r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'post' AND `v` = '1' ");
|
||||
if(count($r)) {
|
||||
foreach($r as $rr) {
|
||||
// check for new friends once a day
|
||||
$last_friend_check = get_pconfig($rr['uid'],'facebook','friend_check');
|
||||
if($last_friend_check)
|
||||
$next_friend_check = $last_friend_check + 86400;
|
||||
if($next_friend_check <= time()) {
|
||||
fb_get_friends($rr['uid']);
|
||||
set_pconfig($rr['uid'],'facebook','friend_check',time());
|
||||
}
|
||||
fb_consume_all($rr['uid']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function facebook_plugin_settings(&$a,&$b) {
|
||||
|
||||
$b .= '<div class="settings-block">';
|
||||
|
|
@ -197,9 +373,77 @@ function facebook_post_hook(&$a,&$b) {
|
|||
* Post to Facebook stream
|
||||
*/
|
||||
|
||||
require_once('include/group.php');
|
||||
|
||||
logger('Facebook post');
|
||||
|
||||
if((local_user()) && (local_user() == $b['uid']) && (! $b['private']) && (! $b['parent'])) {
|
||||
$reply = false;
|
||||
$likes = false;
|
||||
|
||||
if((local_user()) && (local_user() == $b['uid'])) {
|
||||
|
||||
if($b['parent']) {
|
||||
$r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($b['parent']),
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r) && substr($r[0]['uri'],0,4) === 'fb::')
|
||||
$reply = substr($r[0]['uri'],4);
|
||||
elseif(count($r) && substr($r[0]['extid'],0,4) === 'fb::')
|
||||
$reply = substr($r[0]['extid'],4);
|
||||
else
|
||||
return;
|
||||
logger('facebook reply id=' . $reply);
|
||||
}
|
||||
|
||||
if($b['private'] && $reply == false) {
|
||||
$allow_people = expand_acl($b['allow_cid']);
|
||||
$allow_groups = expand_groups(expand_acl($b['allow_gid']));
|
||||
$deny_people = expand_acl($b['deny_cid']);
|
||||
$deny_groups = expand_groups(expand_acl($b['deny_gid']));
|
||||
|
||||
$recipients = array_unique(array_merge($allow_people,$allow_groups));
|
||||
$deny = array_unique(array_merge($deny_people,$deny_groups));
|
||||
|
||||
$allow_str = dbesc(implode(', ',$recipients));
|
||||
if($allow_str) {
|
||||
$r = q("SELECT `notify` FROM `contact` WHERE `id` IN ( $allow_str ) AND `network` = 'face'");
|
||||
$allow_arr = array();
|
||||
if(count($r))
|
||||
foreach($r as $rr)
|
||||
$allow_arr[] = $rr['notify'];
|
||||
}
|
||||
|
||||
$deny_str = dbesc(implode(', ',$deny));
|
||||
if($deny_str) {
|
||||
$r = q("SELECT `notify` FROM `contact` WHERE `id` IN ( $deny_str ) AND `network` = 'face'");
|
||||
$deny_arr = array();
|
||||
if(count($r))
|
||||
foreach($r as $rr)
|
||||
$deny_arr[] = $rr['notify'];
|
||||
}
|
||||
|
||||
if(count($deny_arr) && (! count($allow_arr))) {
|
||||
|
||||
// One or more FB folks were denied access but nobody on FB was specifically allowed access.
|
||||
// This might cause the post to be open to public on Facebook, but only to selected members
|
||||
// on another network. Since this could potentially leak a post to somebody who was denied,
|
||||
// we will skip posting it to Facebook with a slightly vague but relevant message that will
|
||||
// hopefully lead somebody to this code comment for a better explanation of what went wrong.
|
||||
|
||||
notice( t('Post to Facebook cancelled because of multi-network access permission conflict.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// if it's a private message but no Facebook members are allowed or denied, skip Facebook post
|
||||
|
||||
if((! count($allow_arr)) && (! count($deny_arr)))
|
||||
return;
|
||||
}
|
||||
|
||||
if($b['verb'] == ACTIVITY_LIKE)
|
||||
$likes = true;
|
||||
|
||||
|
||||
$appid = get_config('facebook', 'appid' );
|
||||
|
|
@ -214,7 +458,12 @@ function facebook_post_hook(&$a,&$b) {
|
|||
$fb_token = get_pconfig(local_user(),'facebook','access_token');
|
||||
|
||||
logger('facebook: $fb_post: ' . $fb_post . ' $fb_enable: ' . $fb_enable . ' $fb_token: ' . $fb_token,LOGGER_DEBUG);
|
||||
if($fb_post && $fb_token && $fb_enable) {
|
||||
|
||||
// post to facebook if it's a public post and we've ticked the 'post to Facebook' box,
|
||||
// or it's a private message with facebook participants
|
||||
// or it's a reply or likes action to an existing facebook post
|
||||
|
||||
if($fb_post && $fb_token && ($fb_enable || $b['private'] || $reply)) {
|
||||
logger('facebook: able to post');
|
||||
require_once('library/facebook.php');
|
||||
require_once('include/bbcode.php');
|
||||
|
|
@ -225,9 +474,32 @@ function facebook_post_hook(&$a,&$b) {
|
|||
|
||||
// make links readable before we strip the code
|
||||
|
||||
$msg = preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/is",'$2 [$1]',$msg);
|
||||
// unless it's a dislike - just send the text as a comment
|
||||
|
||||
if($b['verb'] == ACTIVITY_DISLIKE)
|
||||
$msg = trim(strip_tags(bbcode($msg)));
|
||||
|
||||
$search_str = $a->get_baseurl() . '/search';
|
||||
|
||||
if(preg_match("/\[url=(.+?)\](.+?)\[\/url\]/is",$msg,$matches)) {
|
||||
|
||||
// don't use hashtags for message link
|
||||
|
||||
if(strpos($matches[2],$search_str) === false) {
|
||||
$link = $matches[1];
|
||||
if(substr($matches[2],0,5) != '[img]')
|
||||
$linkname = $matches[2];
|
||||
}
|
||||
}
|
||||
|
||||
$msg = preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/is",'$2 $1',$msg);
|
||||
|
||||
if(preg_match("/\[img\](.+?)\[\/img\]/is",$msg,$matches))
|
||||
$image = $matches[1];
|
||||
|
||||
$msg = preg_replace("/\[img\](.+?)\[\/img\]/is", t('Image: ') . '$1', $msg);
|
||||
|
||||
|
||||
$msg = preg_replace("/\[img\](.+?)\[\/img\]/is", t('Image: ') . '$1',$msg);
|
||||
|
||||
$msg = trim(strip_tags(bbcode($msg)));
|
||||
$msg = html_entity_decode($msg,ENT_QUOTES,'UTF-8');
|
||||
|
|
@ -237,7 +509,7 @@ function facebook_post_hook(&$a,&$b) {
|
|||
require_once('library/slinky.php');
|
||||
|
||||
$display_url = $a->get_baseurl() . '/display/' . $a->user['nickname'] . '/' . $b['id'];
|
||||
$slinky = new Slinky( $posturl );
|
||||
$slinky = new Slinky( $display_url );
|
||||
// setup a cascade of shortening services
|
||||
// try to get a short link from these services
|
||||
// in the order ur1.ca, trim, id.gd, tinyurl
|
||||
|
|
@ -253,9 +525,57 @@ function facebook_post_hook(&$a,&$b) {
|
|||
|
||||
logger('Facebook post: msg=' . $msg, LOGGER_DATA);
|
||||
|
||||
$postvars = array('access_token' => $fb_token, 'message' => $msg);
|
||||
if($likes) {
|
||||
$postvars = array('access_token' => $fb_token);
|
||||
}
|
||||
else {
|
||||
$postvars = array(
|
||||
'access_token' => $fb_token,
|
||||
'message' => $msg
|
||||
);
|
||||
if(isset($image))
|
||||
$postvars['picture'] = $image;
|
||||
if(isset($link))
|
||||
$postvars['link'] = $link;
|
||||
if(isset($linkname))
|
||||
$postvars['name'] = $linkname;
|
||||
}
|
||||
|
||||
$x = post_url('https://graph.facebook.com/me/feed', $postvars);
|
||||
if(($b['private']) && (! $b['parent'])) {
|
||||
$postvars['privacy'] = '{"value": "CUSTOM", "friends": "SOME_FRIENDS"';
|
||||
if(count($allow_arr))
|
||||
$postvars['privacy'] .= ',"allow": "' . implode(',',$allow_arr) . '"';
|
||||
if(count($deny_arr))
|
||||
$postvars['privacy'] .= ',"deny": "' . implode(',',$deny_arr) . '"';
|
||||
$postvars['privacy'] .= '}';
|
||||
|
||||
}
|
||||
|
||||
if($reply) {
|
||||
$url = 'https://graph.facebook.com/' . $reply . '/' . (($likes) ? 'likes' : 'comments');
|
||||
}
|
||||
else {
|
||||
$url = 'https://graph.facebook.com/me/feed';
|
||||
if($b['plink'])
|
||||
$postvars['actions'] = '{"name": "' . t('View on Friendika') . '", "link": "' . $b['plink'] . '"}';
|
||||
}
|
||||
|
||||
logger('facebook: post to ' . $url);
|
||||
logger('facebook: postvars: ' . print_r($postvars,true));
|
||||
|
||||
// "test_mode" prevents anything from actually being posted.
|
||||
// Otherwise, let's do it.
|
||||
|
||||
if(! get_config('facebook','test_mode'))
|
||||
$x = post_url($url, $postvars);
|
||||
|
||||
$retj = json_decode($x);
|
||||
if($retj->id) {
|
||||
q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
dbesc('fb::' . $retj->id),
|
||||
intval($b['id'])
|
||||
);
|
||||
}
|
||||
|
||||
logger('Facebook post returns: ' . $x, LOGGER_DEBUG);
|
||||
|
||||
|
|
@ -264,3 +584,234 @@ function facebook_post_hook(&$a,&$b) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
function fb_consume_all($uid) {
|
||||
|
||||
require_once('include/items.php');
|
||||
|
||||
$access_token = get_pconfig($uid,'facebook','access_token');
|
||||
if(! $access_token)
|
||||
return;
|
||||
$s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
|
||||
if($s) {
|
||||
$j = json_decode($s);
|
||||
logger('fb_consume_stream: wall: ' . print_r($j,true), LOGGER_DATA);
|
||||
fb_consume_stream($uid,$j,true);
|
||||
}
|
||||
$s = fetch_url('https://graph.facebook.com/me/home?access_token=' . $access_token);
|
||||
if($s) {
|
||||
$j = json_decode($s);
|
||||
logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA);
|
||||
fb_consume_stream($uid,$j,false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function fb_consume_stream($uid,$j,$wall = false) {
|
||||
$a = get_app();
|
||||
|
||||
$self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
$user = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
intval($uid)
|
||||
);
|
||||
if(count($user))
|
||||
$my_local_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname'];
|
||||
|
||||
|
||||
$self_id = get_pconfig($uid,'facebook','self_id');
|
||||
if(! count($j->data) || (! strlen($self_id)))
|
||||
return;
|
||||
|
||||
foreach($j->data as $entry) {
|
||||
logger('fb_consume: entry: ' . print_r($entry,true), LOGGER_DATA);
|
||||
$datarray = array();
|
||||
$we_posted = false;
|
||||
$app = $entry->application;
|
||||
if($app->id == get_config('facebook','appid') && $wall)
|
||||
$we_posted = true;
|
||||
|
||||
$r = q("SELECT * FROM `item` WHERE ( `uri` = '%s' OR `extid` = '%s') AND `uid` = %d LIMIT 1",
|
||||
dbesc('fb::' . $entry->id),
|
||||
dbesc('fb::' . $entry->id),
|
||||
intval($uid)
|
||||
);
|
||||
if(count($r)) {
|
||||
$post_exists = true;
|
||||
$orig_post = $r[0];
|
||||
$top_item = $r[0]['id'];
|
||||
}
|
||||
else {
|
||||
$post_exists = false;
|
||||
$orig_post = null;
|
||||
}
|
||||
|
||||
if(! $orig_post) {
|
||||
$datarray['gravity'] = 0;
|
||||
$datarray['uid'] = $uid;
|
||||
$datarray['wall'] = (($wall) ? 1 : 0);
|
||||
$datarray['uri'] = $datarray['parent-uri'] = 'fb::' . $entry->id;
|
||||
$from = $entry->from;
|
||||
if($from->id == $self_id)
|
||||
$datarray['contact-id'] = $self[0]['id'];
|
||||
else {
|
||||
$r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
|
||||
dbesc($from->id),
|
||||
intval($uid)
|
||||
);
|
||||
if(count($r))
|
||||
$datarray['contact-id'] = $r[0]['id'];
|
||||
}
|
||||
|
||||
// don't store post if we don't have a contact
|
||||
|
||||
if(! x($datarray,'contact-id'))
|
||||
continue;
|
||||
|
||||
$datarray['verb'] = ACTIVITY_POST;
|
||||
if($wall) {
|
||||
$datarray['owner-name'] = $self[0]['name'];
|
||||
$datarray['owner-link'] = $self[0]['url'];
|
||||
$datarray['owner-avatar'] = $self[0]['thumb'];
|
||||
}
|
||||
$datarray['author-name'] = $from->name;
|
||||
$datarray['author-link'] = 'http://facebook.com/profile.php?id=' . $from->id;
|
||||
$datarray['author-avatar'] = 'https://graph.facebook.com/' . $from->id . '/picture';
|
||||
$datarray['plink'] = $datarray['author-link'] . '&v=wall&story_fbid=' . substr($entry->id,strpos($entry->id,'_') + 1);
|
||||
|
||||
$datarray['body'] = $entry->message;
|
||||
if($entry->picture)
|
||||
$datarray['body'] .= "\n\n" . '[img]' . $entry->picture . '[/img]';
|
||||
if($entry->link)
|
||||
$datarray['body'] .= "\n" . linkify($entry->link);
|
||||
if($entry->name)
|
||||
$datarray['body'] .= "\n" . $entry->name;
|
||||
if($entry->caption)
|
||||
$datarray['body'] .= "\n" . $entry->caption;
|
||||
if($entry->description)
|
||||
$datarray['body'] .= "\n" . $entry->description;
|
||||
$datarray['created'] = datetime_convert('UTC','UTC',$entry->created_time);
|
||||
$datarray['edited'] = datetime_convert('UTC','UTC',$entry->updated_time);
|
||||
if($entry->privacy && $entry->privacy->value !== 'EVERYONE')
|
||||
$datarray['private'] = 1;
|
||||
$top_item = item_store($datarray);
|
||||
$r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($top_item),
|
||||
intval($uid)
|
||||
);
|
||||
if(count($r))
|
||||
$orig_post = $r[0];
|
||||
|
||||
}
|
||||
$likers = $entry->likes->data;
|
||||
$comments = $entry->comments->data;
|
||||
|
||||
if(is_array($likers)) {
|
||||
foreach($likers as $likes) {
|
||||
|
||||
if(! $orig_post)
|
||||
continue;
|
||||
|
||||
$r = q("SELECT * FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `verb` = '%s' AND `author-link` = '%s' LIMIT 1",
|
||||
dbesc($orig_post['uri']),
|
||||
intval($uid),
|
||||
dbesc(ACTIVITY_LIKE),
|
||||
dbesc('http://facebook.com/profile.php?id=' . $likes->id)
|
||||
);
|
||||
|
||||
if(count($r))
|
||||
continue;
|
||||
|
||||
$likedata = array();
|
||||
$likedata['parent'] = $top_item;
|
||||
$likedata['verb'] = ACTIVITY_LIKE;
|
||||
$likedata['gravity'] = 3;
|
||||
$likedata['uid'] = $uid;
|
||||
$likedata['wall'] = (($wall) ? 1 : 0);
|
||||
$likedata['uri'] = item_new_uri($a->get_baseurl(), $uid);
|
||||
$likedata['parent-uri'] = $orig_post['uri'];
|
||||
if($likes->id == $self_id)
|
||||
$likedata['contact-id'] = $self[0]['id'];
|
||||
else {
|
||||
$r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
|
||||
dbesc($likes->id),
|
||||
intval($uid)
|
||||
);
|
||||
if(count($r))
|
||||
$likedata['contact-id'] = $r[0]['id'];
|
||||
}
|
||||
if(! x($likedata,'contact-id'))
|
||||
$likedata['contact-id'] = $orig_post['contact-id'];
|
||||
|
||||
$likedata['verb'] = ACTIVITY_LIKE;
|
||||
$likedata['author-name'] = $likes->name;
|
||||
$likedata['author-link'] = 'http://facebook.com/profile.php?id=' . $likes->id;
|
||||
$likedata['author-avatar'] = 'https://graph.facebook.com/' . $likes->id . '/picture';
|
||||
|
||||
$author = '[url=' . $likedata['author-link'] . ']' . $likedata['author-name'] . '[/url]';
|
||||
$objauthor = '[url=' . $orig_post['author-link'] . ']' . $orig_post['author-name'] . '[/url]';
|
||||
$post_type = t('status');
|
||||
$plink = '[url=' . $orig_post['plink'] . ']' . $post_type . '[/url]';
|
||||
$likedata['object-type'] = ACTIVITY_OBJ_NOTE;
|
||||
|
||||
$likedata['body'] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink);
|
||||
$likedata['object'] = '<object><type>' . ACTIVITY_OBJ_NOTE . '</type><local>1</local>' .
|
||||
'<id>' . $orig_post['uri'] . '</id><link>' . xmlify('<link rel="alternate" type="text/html" href="' . $orig_post['plink'] . '">') . '</link><title>' . $orig_post['title'] . '</title><content>' . $orig_post['body'] . '</content></object>';
|
||||
|
||||
$item = item_store($likedata);
|
||||
}
|
||||
}
|
||||
if(is_array($comments)) {
|
||||
foreach($comments as $cmnt) {
|
||||
|
||||
if(! $orig_post)
|
||||
continue;
|
||||
|
||||
$r = q("SELECT * FROM `item` WHERE `uid` = %d AND ( `uri` = '%s' OR `extid` = '%s' ) LIMIT 1",
|
||||
intval($uid),
|
||||
dbesc('fb::' . $cmnt->id),
|
||||
dbesc('fb::' . $cmnt->id)
|
||||
);
|
||||
if(count($r))
|
||||
continue;
|
||||
|
||||
$cmntdata = array();
|
||||
$cmntdata['parent'] = $top_item;
|
||||
$cmntdata['verb'] = ACTIVITY_POST;
|
||||
$cmntdata['gravity'] = 6;
|
||||
$cmntdata['uid'] = $uid;
|
||||
$cmntdata['wall'] = (($wall) ? 1 : 0);
|
||||
$cmntdata['uri'] = 'fb::' . $cmnt->id;
|
||||
$cmntdata['parent-uri'] = $orig_post['uri'];
|
||||
if($cmnt->from->id == $self_id) {
|
||||
$cmntdata['contact-id'] = $self[0]['id'];
|
||||
}
|
||||
else {
|
||||
$r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($cmnt->from->id),
|
||||
intval($uid)
|
||||
);
|
||||
if(count($r)) {
|
||||
$cmntdata['contact-id'] = $r[0]['id'];
|
||||
if($r[0]['blocked'] || $r[0]['readonly'])
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(! x($cmntdata,'contact-id'))
|
||||
$cmntdata['contact-id'] = $orig_post['contact-id'];
|
||||
|
||||
$cmntdata['created'] = datetime_convert('UTC','UTC',$cmnt->created_time);
|
||||
$cmntdata['edited'] = datetime_convert('UTC','UTC',$cmnt->created_time);
|
||||
$cmntdata['verb'] = ACTIVITY_POST;
|
||||
$cmntdata['author-name'] = $cmnt->from->name;
|
||||
$cmntdata['author-link'] = 'http://facebook.com/profile.php?id=' . $cmnt->from->id;
|
||||
$cmntdata['author-avatar'] = 'https://graph.facebook.com/' . $cmnt->from->id . '/picture';
|
||||
$cmntdata['body'] = $cmnt->message;
|
||||
$item = item_store($cmntdata);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,10 @@ function oembed_uninstall() {
|
|||
}
|
||||
|
||||
function oembed_hook_page_header($a, &$b){
|
||||
|
||||
if(($a->module !== 'network') && ($a->module !== 'profile'))
|
||||
return;
|
||||
|
||||
$b .= '<script src="addon/oembed/oembed.js"></script>
|
||||
<style>#oembed.hide { display: none }
|
||||
#oembed {
|
||||
|
|
@ -33,11 +37,11 @@ function oembed_hook_page_header($a, &$b){
|
|||
<div id="oembed" class="hide"><input id="oembed_url">
|
||||
<input type="button" value="Embed" onclick="oembed_do()" style="float:left;">
|
||||
<a onclick="oembed(); return false;" style="float:right;"><img onmouseout="imgdull(this);" onmouseover="imgbright(this);" class="wall-item-delete-icon" src="images/b_drophide.gif" style="width: 16px; height: 16px;"></a>
|
||||
<p style="clear:both">Paste a link from 5min.com, Amazon Product Image, blip.tv, Clikthrough, CollegeHumor Video,
|
||||
<div style="clear:both">Paste a link from 5min.com, Amazon Product Image, blip.tv, Clikthrough, CollegeHumor Video,
|
||||
Daily Show with Jon Stewart, Dailymotion, dotSUB.com, Flickr Photos, Funny or Die Video,
|
||||
Google Video, Hulu, Kinomap, LiveJournal UserPic, Metacafe, National Film Board of Canada,
|
||||
Phodroid Photos, Photobucket, Qik Video, Revision3, Scribd, SlideShare, TwitPic, Twitter Status,
|
||||
Viddler Video, Vimeo, Wikipedia, Wordpress.com, XKCD Comic, YFrog, YouTube</p>
|
||||
Viddler Video, Vimeo, Wikipedia, Wordpress.com, XKCD Comic, YFrog, YouTube</div>
|
||||
</div>
|
||||
';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,25 +12,32 @@
|
|||
}
|
||||
#statusnet-disconnect-label {
|
||||
float: left;
|
||||
width: 200px;
|
||||
width: 250px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
#statusnet-default-label {
|
||||
float: left;
|
||||
width: 250px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
#statusnet-disconnect {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#statusnet-enable-label {
|
||||
float: left;
|
||||
width: 200px;
|
||||
width: 250px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#statusnet-checkbox {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#statusnet-pin-label {
|
||||
float: left;
|
||||
width: 200px;
|
||||
width: 250px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
#statusnet-pin {
|
||||
|
|
@ -40,7 +47,7 @@
|
|||
|
||||
#statusnet-consumerkey-label {
|
||||
float: left;
|
||||
width: 200px;
|
||||
width: 250px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
#statusnet-consumerkey {
|
||||
|
|
@ -49,7 +56,7 @@
|
|||
}
|
||||
#statusnet-consumersecret-label {
|
||||
float: left;
|
||||
width: 200px;
|
||||
width: 250px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
#statusnet-consumersecret {
|
||||
|
|
@ -58,7 +65,7 @@
|
|||
}
|
||||
#statusnet-baseapi-label {
|
||||
float: left;
|
||||
width: 200px;
|
||||
width: 250px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
#statusnet-baseapi {
|
||||
|
|
|
|||
|
|
@ -90,18 +90,40 @@ function statusnet_settings_post ($a,$post) {
|
|||
* if the statusnet-disconnect checkbox is set, clear the statusnet configuration
|
||||
* TODO can we revoke the access tokens at Twitter and do we need to do so?
|
||||
*/
|
||||
del_pconfig( local_user(), 'statusnet', 'consumerkey' );
|
||||
del_pconfig( local_user(), 'statusnet', 'consumersecret' );
|
||||
del_pconfig( local_user(), 'statusnet', 'post' );
|
||||
del_pconfig( local_user(), 'statusnet', 'oauthtoken' );
|
||||
del_pconfig( local_user(), 'statusnet', 'consumerkey' );
|
||||
del_pconfig( local_user(), 'statusnet', 'consumersecret' );
|
||||
del_pconfig( local_user(), 'statusnet', 'post' );
|
||||
del_pconfig( local_user(), 'statusnet', 'post_by_default' );
|
||||
del_pconfig( local_user(), 'statusnet', 'oauthtoken' );
|
||||
del_pconfig( local_user(), 'statusnet', 'oauthsecret' );
|
||||
del_pconfig( local_user(), 'statusnet', 'baseapi' );
|
||||
} else {
|
||||
if (isset($_POST['statusnet-consumersecret'])) {
|
||||
set_pconfig(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']);
|
||||
set_pconfig(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']);
|
||||
set_pconfig(local_user(), 'statusnet', 'baseapi', $_POST['statusnet-baseapi']);
|
||||
header('Location: '.$a->get_baseurl().'/settings/addon');
|
||||
// check if we can reach the API of the StatusNet server
|
||||
// we'll check the API Version for that, if we don't get one we'll try to fix the path but will
|
||||
// resign quickly after this one try to fix the path ;-)
|
||||
$apibase = $_POST['statusnet-baseapi'];
|
||||
$c = fetch_url( $apibase . 'statusnet/version.xml' );
|
||||
if (strlen($c) > 0) {
|
||||
// ok the API path is correct, let's save the settings
|
||||
set_pconfig(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']);
|
||||
set_pconfig(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']);
|
||||
set_pconfig(local_user(), 'statusnet', 'baseapi', $apibase );
|
||||
} else {
|
||||
// the API path is not correct, maybe missing trailing / ?
|
||||
$apibase = $apibase . '/';
|
||||
$c = fetch_url( $apibase . 'statusnet/version.xml' );
|
||||
if (strlen($c) > 0) {
|
||||
// ok the API path is now correct, let's save the settings
|
||||
set_pconfig(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']);
|
||||
set_pconfig(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']);
|
||||
set_pconfig(local_user(), 'statusnet', 'baseapi', $apibase );
|
||||
} else {
|
||||
// still not the correct API base, let's do noting
|
||||
notice( t('We could not contact the StatusNet API with the Path you entered.').EOL );
|
||||
}
|
||||
}
|
||||
goaway($a->get_baseurl().'/settings/addon');
|
||||
} else {
|
||||
if (isset($_POST['statusnet-pin'])) {
|
||||
// if the user supplied us with a PIN from Twitter, let the magic of OAuth happen
|
||||
|
|
@ -119,11 +141,13 @@ function statusnet_settings_post ($a,$post) {
|
|||
set_pconfig(local_user(),'statusnet', 'oauthsecret', $token['oauth_token_secret']);
|
||||
set_pconfig(local_user(),'statusnet', 'post', 1);
|
||||
// reload the Addon Settings page, if we don't do it see Bug #42
|
||||
header('Location: '.$a->get_baseurl().'/settings/addon');
|
||||
goaway($a->get_baseurl().'/settings/addon');
|
||||
} else {
|
||||
// if no PIN is supplied in the POST variables, the user has changed the setting
|
||||
// to post a tweet for every new __public__ posting to the wall
|
||||
set_pconfig(local_user(),'statusnet','post',intval($_POST['statusnet-enable']));
|
||||
set_pconfig(local_user(),'statusnet','post_by_default',intval($_POST['statusnet-default']));
|
||||
notice( t('StatusNet settings updated.') . EOL);
|
||||
}}}
|
||||
}
|
||||
function statusnet_settings(&$a,&$s) {
|
||||
|
|
@ -133,6 +157,7 @@ function statusnet_settings(&$a,&$s) {
|
|||
/***
|
||||
* 1) Check that we have a base api url and a consumer key & secret
|
||||
* 2) If no OAuthtoken & stuff is present, generate button to get some
|
||||
* allow the user to cancel the connection process at this step
|
||||
* 3) Checkbox for "Send public notices (respect size limitation)
|
||||
*/
|
||||
$api = get_pconfig(local_user(), 'statusnet', 'baseapi');
|
||||
|
|
@ -140,8 +165,10 @@ function statusnet_settings(&$a,&$s) {
|
|||
$csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' );
|
||||
$otoken = get_pconfig(local_user(), 'statusnet', 'oauthtoken' );
|
||||
$osecret = get_pconfig(local_user(), 'statusnet', 'oauthsecret' );
|
||||
$enabled = get_pconfig(local_user(), 'statusnet', 'post');
|
||||
$enabled = get_pconfig(local_user(), 'statusnet', 'post');
|
||||
$checked = (($enabled) ? ' checked="checked" ' : '');
|
||||
$defenabled = get_pconfig(local_user(),'statusnet','post_by_default');
|
||||
$defchecked = (($defenabled) ? ' checked="checked" ' : '');
|
||||
$s .= '<div class="settings-block">';
|
||||
$s .= '<h3>'. t('StatusNet Posting Settings').'</h3>';
|
||||
|
||||
|
|
@ -187,6 +214,13 @@ function statusnet_settings(&$a,&$s) {
|
|||
$s .= '<input id="statusnet-token2" type="hidden" name="statusnet-token2" value="'.$request_token['oauth_token_secret'].'" />';
|
||||
$s .= '</div><div class="clear"></div>';
|
||||
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
|
||||
$s .= '<h4>'.t('Cancel Connection Process').'</h4>';
|
||||
$s .= '<div id="statusnet-cancel-wrapper">';
|
||||
$s .= '<p>'.t('Current StatusNet API is').': '.$api.'</p>';
|
||||
$s .= '<label id="statusnet-cancel-label" for="statusnet-cancel">'. t('Cancel StatusNet Connection') . '</label>';
|
||||
$s .= '<input id="statusnet-cancel" type="checkbox" name="statusnet-disconnect" value="1" />';
|
||||
$s .= '</div><div class="clear"></div>';
|
||||
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
|
||||
} else {
|
||||
/***
|
||||
* we have an OAuth key / secret pair for the user
|
||||
|
|
@ -195,11 +229,15 @@ function statusnet_settings(&$a,&$s) {
|
|||
$connection = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
|
||||
$details = $connection->get('account/verify_credentials');
|
||||
$s .= '<div id="statusnet-info" ><img id="statusnet-avatar" src="'.$details->profile_image_url.'" /><p id="statusnet-info-block">'. t('Currently connected to: ') .'<a href="'.$details->statusnet_profile_url.'" target="_statusnet">'.$details->screen_name.'</a><br /><em>'.$details->description.'</em></p></div>';
|
||||
$s .= '<p>'. t('If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account as well.') .'</p>';
|
||||
$s .= '<p>'. t('If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account.') .'</p>';
|
||||
$s .= '<div id="statusnet-enable-wrapper">';
|
||||
$s .= '<label id="statusnet-enable-label" for="statusnet-checkbox">'. t('Send public postings to StatusNet') .'</label>';
|
||||
$s .= '<label id="statusnet-enable-label" for="statusnet-checkbox">'. t('Allow posting to StatusNet') .'</label>';
|
||||
$s .= '<input id="statusnet-checkbox" type="checkbox" name="statusnet-enable" value="1" ' . $checked . '/>';
|
||||
$s .= '<div class="clear"></div>';
|
||||
$s .= '<label id="statusnet-default-label" for="statusnet-default">'. t('Send public postings to StatusNet by default') .'</label>';
|
||||
$s .= '<input id="statusnet-default" type="checkbox" name="statusnet-default" value="1" ' . $defchecked . '/>';
|
||||
$s .= '</div><div class="clear"></div>';
|
||||
|
||||
$s .= '<div id="statusnet-disconnect-wrapper">';
|
||||
$s .= '<label id="statusnet-disconnect-label" for="statusnet-disconnect">'. t('Clear OAuth configuration') .'</label>';
|
||||
$s .= '<input id="statusnet-disconnect" type="checkbox" name="statusnet-disconnect" value="1" />';
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ function twitter_settings(&$a,&$s) {
|
|||
* which the user can request a PIN to connect the account to a
|
||||
* account at Twitter.
|
||||
*/
|
||||
require_once('library/twitteroauth.php');
|
||||
require_once('library/twitteroauth.php');
|
||||
$connection = new TwitterOAuth($ckey, $csecret);
|
||||
$request_token = $connection->getRequestToken();
|
||||
$token = $request_token['oauth_token'];
|
||||
|
|
|
|||
32
addon/widgets/widget_friends.php
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
function friends_widget_name() {
|
||||
return "Shows profile contacts";
|
||||
}
|
||||
function friends_widget_help() {
|
||||
return "";
|
||||
}
|
||||
|
||||
function friends_widget_args(){
|
||||
return Array();
|
||||
}
|
||||
|
||||
function friends_widget_content(&$a, $conf){
|
||||
|
||||
$r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `user`.* FROM `profile`
|
||||
LEFT JOIN `user` ON `profile`.`uid` = `user`.`uid`
|
||||
WHERE `user`.`uid` = %s AND `profile`.`is-default` = 1 LIMIT 1",
|
||||
intval($conf['uid'])
|
||||
);
|
||||
if(!count($r)) return;
|
||||
$a->profile = $r[0];
|
||||
|
||||
$o = "";
|
||||
$o .= "<style>
|
||||
.f9k_widget .contact-block-div { display: block !important; float: left!important; width: 50px!important; height: 50px!important; margin: 2px!important;}
|
||||
.f9k_widget #contact-block-end { clear: left; }
|
||||
</style>";
|
||||
$o .= _abs_url(contact_block());
|
||||
$o .= "<a href='".$a->get_baseurl().'/profile/'.$a->profile['nickname']."'>". t('Connect on Friendika!') ."</a>";
|
||||
return $o;
|
||||
}
|
||||
22
addon/widgets/widget_like.php
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
function like_widget_name() {
|
||||
return "Shows likes";
|
||||
}
|
||||
function like_widget_help() {
|
||||
return "Search first item wich contains <em>KEY</em> and print like/dislike count";
|
||||
}
|
||||
|
||||
function like_widget_args(){
|
||||
return Array("KEY");
|
||||
}
|
||||
|
||||
function like_widget_content(&$a, $conf){
|
||||
$args = explode(",",$_GET['a']);
|
||||
|
||||
if ($args[0]!=""){
|
||||
return " #TODO like/dislike count for item with <em>" .$args[0]. "</em> # ";
|
||||
} else {
|
||||
return " #TODO# ";
|
||||
}
|
||||
}
|
||||
64
addon/widgets/widgets.js
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
/**
|
||||
* @author Fabio Comuni
|
||||
*/
|
||||
|
||||
var f9a_widget_$widget_id = {
|
||||
entrypoint : "$entrypoint",
|
||||
key : "$key",
|
||||
widgetid: "$widget_id",
|
||||
argstr: "$args",
|
||||
xmlhttp : null,
|
||||
|
||||
getXHRObj : function(){
|
||||
if (window.XMLHttpRequest) {
|
||||
// code for IE7+, Firefox, Chrome, Opera, Safari
|
||||
this.xmlhttp = new XMLHttpRequest();
|
||||
} else {
|
||||
// code for IE6, IE5
|
||||
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
},
|
||||
|
||||
dorequest : function(args, cb) {
|
||||
if (args===null) args = new Array();
|
||||
args['k']=this.key;
|
||||
args['s']=window.location;
|
||||
args['a']=this.argstr;
|
||||
var urlencodedargs = new Array();
|
||||
for(k in args){ urlencodedargs.push( encodeURIComponent(k)+"="+encodeURIComponent(args[k]) ); }
|
||||
|
||||
var url = this.entrypoint + "?"+ urlencodedargs.join("&");
|
||||
|
||||
this.xmlhttp.open("GET", url ,true);
|
||||
this.xmlhttp.send();
|
||||
this.xmlhttp.obj = this;
|
||||
this.xmlhttp.onreadystatechange=function(){
|
||||
if (this.readyState==4){
|
||||
if (this.status==200) {
|
||||
cb(this.obj, this.responseText);
|
||||
} else {
|
||||
document.getElementById(this.obj.widgetid).innerHTML="Error loading widget.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
requestcb: function(obj, responseText) {
|
||||
document.getElementById(obj.widgetid).innerHTML=responseText;
|
||||
},
|
||||
|
||||
load : function (){
|
||||
this.getXHRObj();
|
||||
this.dorequest(null, this.requestcb);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
(function() {
|
||||
f9a_widget_$widget_id.load();
|
||||
})();
|
||||
|
||||
document.writeln("<div id='$widget_id' class='f9k_widget'>");
|
||||
document.writeln("<img id='$widget_id_ld' src='$loader'>");
|
||||
document.writeln("</div>");
|
||||
168
addon/widgets/widgets.php
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
<?php
|
||||
/**
|
||||
* widgets from friendika
|
||||
*
|
||||
* allow to embed info from friendika into another site
|
||||
*/
|
||||
|
||||
|
||||
function widgets_install() {
|
||||
// we need some hooks, for the configuration and for sending tweets
|
||||
register_hook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings');
|
||||
register_hook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post');
|
||||
|
||||
logger("installed widgets");
|
||||
}
|
||||
|
||||
function widgets_settings_post(){
|
||||
|
||||
if (isset($_POST['widgets-submit'])){
|
||||
del_pconfig(local_user(), 'widgets', 'key');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function widgets_settings(&$a,&$o) {
|
||||
if(! local_user())
|
||||
return;
|
||||
|
||||
|
||||
$key = get_pconfig(local_user(), 'widgets', 'key' );
|
||||
if ($key=='') { $key = mt_rand(); set_pconfig(local_user(), 'widgets', 'key', $key); }
|
||||
|
||||
$o .='<h3 class="settings-heading">Widgets</h3>';
|
||||
|
||||
|
||||
$o.='
|
||||
<div id="settings-username-wrapper">
|
||||
'. t('Widgets key: ') .'<strong>'.$key.'</strong>
|
||||
</div>
|
||||
<div id="settings-username-end"></div>
|
||||
<div class="settings-submit-wrapper">
|
||||
<input type="submit" value="'.t('Generate new key').'" class="settings-submit" name="widgets-submit">
|
||||
</div>';
|
||||
|
||||
|
||||
$o.='<h4>Widgets:</h4>';
|
||||
$o .= '<ul>';
|
||||
$d = dir(dirname(__file__));
|
||||
while(false !== ($f = $d->read())) {
|
||||
if(substr($f,0,7)=="widget_") {
|
||||
preg_match("|widget_([^.]+).php|", $f, $m);
|
||||
$w=$m[1];
|
||||
require_once($f);
|
||||
$o.='<li><a href="'.$a->get_baseurl().'/widgets/'.$w.'/?k='.$key.'&p=1">'. call_user_func($w."_widget_name") .'</a></li>';
|
||||
}
|
||||
}
|
||||
|
||||
$o .= '</ul>';
|
||||
|
||||
}
|
||||
|
||||
function widgets_module() {
|
||||
return;
|
||||
}
|
||||
|
||||
function _abs_url($s){
|
||||
$a = get_app();
|
||||
return preg_replace("|href=(['\"])([^h][^t][^t][^p])|", "href=\$1".$a->get_baseurl()."/\$2", $s);
|
||||
}
|
||||
|
||||
|
||||
function widgets_content(&$a) {
|
||||
|
||||
if (!isset($_GET['k'])) {
|
||||
if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();}
|
||||
return;
|
||||
}
|
||||
|
||||
$r = q("SELECT * FROM pconfig WHERE uid IN (SELECT uid FROM pconfig WHERE v='%s')AND cat='widgets'",
|
||||
dbesc($_GET['k'])
|
||||
);
|
||||
if (!count($r)){
|
||||
if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();}
|
||||
return;
|
||||
}
|
||||
$conf = array();
|
||||
$conf['uid'] = $r[0]['uid'];
|
||||
foreach($r as $e) { $conf[$e['k']]=$e['v']; }
|
||||
|
||||
$o = "";
|
||||
|
||||
$widgetfile =dirname(__file__)."/widget_".$a->argv[1].".php";
|
||||
if (file_exists($widgetfile)){
|
||||
require_once($widgetfile);
|
||||
} else {
|
||||
if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//echo "<pre>"; var_dump($a->argv); die();
|
||||
if ($a->argv[2]=="cb"){
|
||||
/*if (!local_user()){
|
||||
if (!isset($_GET['s']))
|
||||
{header('HTTP/1.0 400 Bad Request'); killme();}
|
||||
|
||||
if (substr($_GET['s'],0,strlen($conf['site'])) !== $conf['site'])
|
||||
{header('HTTP/1.0 400 Bad Request'); killme();}
|
||||
} */
|
||||
$o .= call_user_func($a->argv[1].'_widget_content',$a, $conf);
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
if (isset($_GET['p']) && local_user()==$conf['uid'] ) {
|
||||
$o .= "<style>.f9k_widget { float: left;border:1px solid black; }</style>";
|
||||
$o .= "<h1>Preview Widget</h1>";
|
||||
$o .= '<a href="'.$a->get_baseurl().'/settings/addon">'. t("Plugin Settings") .'</a>';
|
||||
|
||||
$o .= "<h4>".call_user_func($a->argv[1].'_widget_name')."</h4>";
|
||||
$o .= call_user_func($a->argv[1].'_widget_help');
|
||||
$o .= "<br style='clear:left'/><br/>";
|
||||
$o .= "<script>";
|
||||
} else {
|
||||
header("content-type: application/x-javascript");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$script = file_get_contents(dirname(__file__)."/widgets.js");
|
||||
$o .= replace_macros($script, array(
|
||||
'$entrypoint' => $a->get_baseurl()."/widgets/".$a->argv[1]."/cb/",
|
||||
'$key' => $conf['key'],
|
||||
'$widget_id' => 'f9k_'.$a->argv[1]."_".time(),
|
||||
'$loader' => $a->get_baseurl()."/images/rotator.gif",
|
||||
'$args' => (isset($_GET['a'])?$_GET['a']:''),
|
||||
));
|
||||
|
||||
|
||||
if (isset($_GET['p'])) {
|
||||
$jsargs = implode("</em>,<em>", call_user_func($a->argv[1].'_widget_args'));
|
||||
if ($jsargs!='') $jsargs = "&a=<em>".$jsargs."</em>";
|
||||
|
||||
$o .= "</script>
|
||||
<br style='clear:left'/><br/>
|
||||
<h4>Copy and paste this code</h4>
|
||||
<code>"
|
||||
|
||||
.htmlspecialchars('<script src="'.$a->get_baseurl().'/widgets/'.$a->argv[1].'?k='.$conf['key'])
|
||||
.$jsargs
|
||||
.htmlspecialchars('"></script>')
|
||||
."</code>";
|
||||
return $o;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
echo $o;
|
||||
killme();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
?>
|
||||
475
boot.php
|
|
@ -1,15 +1,27 @@
|
|||
<?php
|
||||
|
||||
set_time_limit(0);
|
||||
ini_set('pcre.backtrack_limit', 250000);
|
||||
|
||||
define ( 'FRIENDIKA_VERSION', '2.1.915' );
|
||||
define ( 'DFRN_PROTOCOL_VERSION', '2.1' );
|
||||
define ( 'DB_UPDATE_VERSION', 1040 );
|
||||
|
||||
define ( 'FRIENDIKA_VERSION', '2.2.987' );
|
||||
define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
|
||||
define ( 'DB_UPDATE_VERSION', 1054 );
|
||||
|
||||
define ( 'EOL', "<br />\r\n" );
|
||||
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
||||
define ( 'DOWN_ARROW', '⇩' );
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Image storage quality. Lower numbers save space at cost of image detail.
|
||||
* For ease of upgrade, please do not change here. Change jpeg quality with
|
||||
* set_config('system','jpeg_quality',n) in .htconfig.php
|
||||
* where n is netween 1 and 100, and with very poor results below about 50
|
||||
*
|
||||
*/
|
||||
|
||||
define ( 'JPEG_QUALITY', 100 );
|
||||
|
||||
/**
|
||||
* SSL redirection policies
|
||||
|
|
@ -73,6 +85,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
|
||||
*/
|
||||
|
|
@ -159,6 +183,11 @@ if (get_magic_quotes_gpc()) {
|
|||
unset($process);
|
||||
}
|
||||
|
||||
/*
|
||||
* translation system
|
||||
*/
|
||||
require_once("include/pgettext.php");
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -184,6 +213,8 @@ class App {
|
|||
public $user;
|
||||
public $cid;
|
||||
public $contact;
|
||||
public $contacts;
|
||||
public $page_contact;
|
||||
public $content;
|
||||
public $data;
|
||||
public $error = false;
|
||||
|
|
@ -259,7 +290,7 @@ class App {
|
|||
$this->argv = explode('/',$this->cmd);
|
||||
$this->argc = count($this->argv);
|
||||
if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) {
|
||||
$this->module = $this->argv[0];
|
||||
$this->module = str_replace(".", "_", $this->argv[0]);
|
||||
}
|
||||
else {
|
||||
$this->module = 'home';
|
||||
|
|
@ -272,7 +303,7 @@ class App {
|
|||
|
||||
if($this->cmd === '.well-known/host-meta') {
|
||||
require_once('include/hostxrd.php');
|
||||
hostxrd($this->hostname);
|
||||
hostxrd($this->get_baseurl());
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
|
|
@ -347,10 +378,12 @@ class App {
|
|||
|
||||
function init_pagehead() {
|
||||
$this->page['title'] = $this->config['sitename'];
|
||||
$tpl = load_view_file("view/head.tpl");
|
||||
$tpl = file_get_contents('view/head.tpl');
|
||||
$this->page['htmlhead'] = replace_macros($tpl,array(
|
||||
'$baseurl' => $this->get_baseurl() . '/',
|
||||
'$generator' => 'Friendika' . ' ' . FRIENDIKA_VERSION
|
||||
'$baseurl' => $this->get_baseurl(),
|
||||
'$generator' => 'Friendika' . ' ' . FRIENDIKA_VERSION,
|
||||
'$delitem' => t('Delete this item?'),
|
||||
'$comment' => t('Comment')
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -430,15 +463,18 @@ function check_config(&$a) {
|
|||
|
||||
load_config('system');
|
||||
|
||||
if(! x($_SERVER,'SERVER_NAME'))
|
||||
return;
|
||||
|
||||
$build = get_config('system','build');
|
||||
if(! x($build))
|
||||
$build = set_config('system','build',DB_UPDATE_VERSION);
|
||||
|
||||
$url = get_config('system','url');
|
||||
if(! x($url))
|
||||
|
||||
// if the url isn't set or the stored url is radically different
|
||||
// than the currently visited url, store the current value accordingly.
|
||||
// "Radically different" ignores common variations such as http vs https
|
||||
// and www.example.com vs example.com.
|
||||
|
||||
if((! x($url)) || (! link_compare($url,$a->get_baseurl())))
|
||||
$url = set_config('system','url',$a->get_baseurl());
|
||||
|
||||
if($build != DB_UPDATE_VERSION) {
|
||||
|
|
@ -585,44 +621,17 @@ function reload_plugins() {
|
|||
// For instance if 'test' => "foo" and 'testing' => "bar", testing could become either bar or fooing,
|
||||
// depending on the order in which they were declared in the array.
|
||||
|
||||
require_once("include/template_processor.php");
|
||||
|
||||
if(! function_exists('replace_macros')) {
|
||||
function replace_macros($s,$r) {
|
||||
global $t;
|
||||
|
||||
return $t->replace($s,$r);
|
||||
|
||||
$search = array();
|
||||
$replace = array();
|
||||
|
||||
if(is_array($r) && count($r)) {
|
||||
foreach ($r as $k => $v ) {
|
||||
$search[] = $k;
|
||||
$replace[] = $v;
|
||||
}
|
||||
}
|
||||
return str_replace($search,$replace,$s);
|
||||
}}
|
||||
|
||||
|
||||
// load string translation table for alternate language
|
||||
|
||||
if(! function_exists('load_translation_table')) {
|
||||
function load_translation_table($lang) {
|
||||
global $a;
|
||||
|
||||
if(file_exists("view/$lang/strings.php"))
|
||||
include("view/$lang/strings.php");
|
||||
}}
|
||||
|
||||
// translate string if translation exists
|
||||
|
||||
if(! function_exists('t')) {
|
||||
function t($s) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
if(x($a->strings,$s))
|
||||
return $a->strings[$s];
|
||||
return $s;
|
||||
}}
|
||||
|
||||
// curl wrapper. If binary flag is true, return binary
|
||||
// results.
|
||||
|
||||
|
|
@ -819,7 +828,7 @@ function escape_tags($string) {
|
|||
if(! function_exists('login')) {
|
||||
function login($register = false) {
|
||||
$o = "";
|
||||
$register_tpl = (($register) ? load_view_file("view/register-link.tpl") : "");
|
||||
$register_tpl = (($register) ? get_markup_template("register-link.tpl") : "");
|
||||
|
||||
$register_html = replace_macros($register_tpl,array(
|
||||
'$title' => t('Create a New Account'),
|
||||
|
|
@ -843,14 +852,16 @@ function login($register = false) {
|
|||
$lostlink = t('Password Reset');
|
||||
|
||||
if(local_user()) {
|
||||
$tpl = load_view_file("view/logout.tpl");
|
||||
$tpl = get_markup_template("logout.tpl");
|
||||
}
|
||||
else {
|
||||
$tpl = load_view_file("view/login.tpl");
|
||||
$tpl = get_markup_template("login.tpl");
|
||||
|
||||
}
|
||||
|
||||
$o = replace_macros($tpl,array(
|
||||
|
||||
$o = '<script type="text/javascript"> $(document).ready(function() { $("#login-name").focus();} );</script>';
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$logout' => t('Logout'),
|
||||
'$register_html' => $register_html,
|
||||
'$classname' => $classname,
|
||||
|
|
@ -1085,6 +1096,7 @@ function paginate(&$a) {
|
|||
$stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string);
|
||||
$stripped = str_replace('q=','',$stripped);
|
||||
$stripped = trim($stripped,'/');
|
||||
$pagenum = $a->pager['page'];
|
||||
$url = $a->get_baseurl() . '/' . $stripped;
|
||||
|
||||
|
||||
|
|
@ -1097,7 +1109,7 @@ function paginate(&$a) {
|
|||
|
||||
$numpages = $a->pager['total'] / $a->pager['itemspage'];
|
||||
|
||||
$numstart = 1;
|
||||
$numstart = 1;
|
||||
$numstop = $numpages;
|
||||
|
||||
if($numpages > 14) {
|
||||
|
|
@ -1221,6 +1233,7 @@ function set_config($family,$key,$value) {
|
|||
global $a;
|
||||
|
||||
if(get_config($family,$key,true) === false) {
|
||||
$a->config[$family][$key] = $value;
|
||||
$ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",
|
||||
dbesc($family),
|
||||
dbesc($key),
|
||||
|
|
@ -1315,6 +1328,7 @@ function set_pconfig($uid,$family,$key,$value) {
|
|||
global $a;
|
||||
|
||||
if(get_pconfig($uid,$family,$key,true) === false) {
|
||||
$a->config[$uid][$family][$key] = $value;
|
||||
$ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ",
|
||||
intval($uid),
|
||||
dbesc($family),
|
||||
|
|
@ -1492,7 +1506,9 @@ function lrdd($uri) {
|
|||
return array();
|
||||
|
||||
logger('lrdd: host_meta: ' . $xml, LOGGER_DATA);
|
||||
$h = simplexml_load_string($xml);
|
||||
|
||||
$h = parse_xml_string($xml);
|
||||
|
||||
$arr = convert_xml_element_to_array($h);
|
||||
|
||||
if(isset($arr['xrd']['property'])) {
|
||||
|
|
@ -1564,16 +1580,19 @@ function lrdd($uri) {
|
|||
$headers = $a->get_curl_headers();
|
||||
logger('lrdd: headers=' . $headers, LOGGER_DEBUG);
|
||||
|
||||
require_once('library/HTML5/Parser.php');
|
||||
$dom = @HTML5_Parser::parse($html);
|
||||
// don't try and parse raw xml as html
|
||||
if(! strstr($html,'<?xml')) {
|
||||
require_once('library/HTML5/Parser.php');
|
||||
$dom = @HTML5_Parser::parse($html);
|
||||
|
||||
if($dom) {
|
||||
$items = $dom->getElementsByTagName('link');
|
||||
foreach($items as $item) {
|
||||
$x = $item->getAttribute('rel');
|
||||
if($x == "lrdd") {
|
||||
$pagelink = $item->getAttribute('href');
|
||||
break;
|
||||
if($dom) {
|
||||
$items = $dom->getElementsByTagName('link');
|
||||
foreach($items as $item) {
|
||||
$x = $item->getAttribute('rel');
|
||||
if($x == "lrdd") {
|
||||
$pagelink = $item->getAttribute('href');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1620,9 +1639,15 @@ function lrdd($uri) {
|
|||
if(! function_exists('fetch_lrdd_template')) {
|
||||
function fetch_lrdd_template($host) {
|
||||
$tpl = '';
|
||||
$url = 'http://' . $host . '/.well-known/host-meta' ;
|
||||
$links = fetch_xrd_links($url);
|
||||
logger('template: ' . print_r($links,true));
|
||||
|
||||
$url1 = 'https://' . $host . '/.well-known/host-meta' ;
|
||||
$url2 = 'http://' . $host . '/.well-known/host-meta' ;
|
||||
$links = fetch_xrd_links($url1);
|
||||
logger('template (https): ' . print_r($links,true));
|
||||
if(! count($links)) {
|
||||
$links = fetch_xrd_links($url2);
|
||||
logger('template (http): ' . print_r($links,true));
|
||||
}
|
||||
if(count($links)) {
|
||||
foreach($links as $link)
|
||||
if($link['@attributes']['rel'] && $link['@attributes']['rel'] === 'lrdd')
|
||||
|
|
@ -1646,7 +1671,7 @@ function fetch_xrd_links($url) {
|
|||
return array();
|
||||
|
||||
logger('fetch_xrd_links: ' . $xml, LOGGER_DATA);
|
||||
$h = simplexml_load_string($xml);
|
||||
$h = parse_xml_string($xml);
|
||||
$arr = convert_xml_element_to_array($h);
|
||||
|
||||
$links = array();
|
||||
|
|
@ -1834,51 +1859,62 @@ function allowed_email($email) {
|
|||
return $found;
|
||||
}}
|
||||
|
||||
// Format the like/dislike text for a profile item
|
||||
// $cnt = number of people who like/dislike the item
|
||||
// $arr = array of pre-linked names of likers/dislikers
|
||||
// $type = one of 'like, 'dislike'
|
||||
// $id = item id
|
||||
// returns formatted text
|
||||
|
||||
if(! function_exists('format_like')) {
|
||||
function format_like($cnt,$arr,$type,$id) {
|
||||
$o = '';
|
||||
if($cnt == 1)
|
||||
$o .= $arr[0] . (($type === 'like') ? t(' likes this.') : t(' doesn\'t like this.')) . EOL ;
|
||||
else {
|
||||
$o .= '<span class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');" >'
|
||||
. $cnt . ' ' . t('people') . '</span> ' . (($type === 'like') ? t('like this.') : t('don\'t like this.')) . EOL ;
|
||||
$total = count($arr);
|
||||
if($total >= MAX_LIKERS)
|
||||
$arr = array_slice($arr, 0, MAX_LIKERS - 1);
|
||||
if($total < MAX_LIKERS)
|
||||
$arr[count($arr)-1] = t('and') . ' ' . $arr[count($arr)-1];
|
||||
$str = implode(', ', $arr);
|
||||
if($total >= MAX_LIKERS)
|
||||
$str .= t(', and ') . $total - MAX_LIKERS . t(' other people');
|
||||
$str .= (($type === 'like') ? t(' like this.') : t(' don\'t like this.'));
|
||||
$o .= "\t" . '<div id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>';
|
||||
}
|
||||
return $o;
|
||||
}}
|
||||
|
||||
|
||||
// wrapper to load a view template, checking for alternate
|
||||
// languages before falling back to the default
|
||||
|
||||
// obsolete, deprecated.
|
||||
|
||||
if(! function_exists('load_view_file')) {
|
||||
function load_view_file($s) {
|
||||
global $lang, $a;
|
||||
if(! isset($lang))
|
||||
$lang = 'en';
|
||||
$b = basename($s);
|
||||
$d = dirname($s);
|
||||
$lang = get_config('system','language');
|
||||
if($lang === false)
|
||||
$lang = 'en';
|
||||
if(file_exists("$d/$lang/$b"))
|
||||
return file_get_contents("$d/$lang/$b");
|
||||
|
||||
$theme = current_theme();
|
||||
|
||||
if(file_exists("$d/theme/$theme/$b"))
|
||||
return file_get_contents("$d/theme/$theme/$b");
|
||||
|
||||
return file_get_contents($s);
|
||||
}}
|
||||
|
||||
if(! function_exists('get_intltext_template')) {
|
||||
function get_intltext_template($s) {
|
||||
global $lang;
|
||||
|
||||
if(! isset($lang))
|
||||
$lang = 'en';
|
||||
|
||||
if(file_exists("view/$lang/$s"))
|
||||
return file_get_contents("view/$lang/$s");
|
||||
elseif(file_exists("view/en/$s"))
|
||||
return file_get_contents("view/en/$s");
|
||||
else
|
||||
return file_get_contents("view/$s");
|
||||
}}
|
||||
|
||||
if(! function_exists('get_markup_template')) {
|
||||
function get_markup_template($s) {
|
||||
|
||||
$theme = current_theme();
|
||||
|
||||
if(file_exists("view/theme/$theme/$s"))
|
||||
return file_get_contents("view/theme/$theme/$s");
|
||||
else
|
||||
return file_get_contents("view/$s");
|
||||
|
||||
}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// for html,xml parsing - let's say you've got
|
||||
// an attribute foobar="class1 class2 class3"
|
||||
// and you want to find out if it contains 'class3'.
|
||||
|
|
@ -1959,29 +1995,6 @@ return str_replace ("%","=",rawurlencode($s));
|
|||
}}
|
||||
|
||||
|
||||
if(! function_exists('like_puller')) {
|
||||
function like_puller($a,$item,&$arr,$mode) {
|
||||
|
||||
$url = '';
|
||||
$sparkle = '';
|
||||
$verb = (($mode === 'like') ? ACTIVITY_LIKE : ACTIVITY_DISLIKE);
|
||||
|
||||
if((activity_match($item['verb'],$verb)) && ($item['id'] != $item['parent'])) {
|
||||
$url = $item['author-link'];
|
||||
if((local_user()) && (local_user() == $item['uid']) && ($item['network'] === 'dfrn') && (! $item['self']) && (link_compare($item['author-link'],$item['url']))) {
|
||||
$url = $a->get_baseurl() . '/redir/' . $item['contact-id'];
|
||||
$sparkle = ' class="sparkle" ';
|
||||
}
|
||||
if(! ((isset($arr[$item['parent'] . '-l'])) && (is_array($arr[$item['parent'] . '-l']))))
|
||||
$arr[$item['parent'] . '-l'] = array();
|
||||
if(! isset($arr[$item['parent']]))
|
||||
$arr[$item['parent']] = 1;
|
||||
else
|
||||
$arr[$item['parent']] ++;
|
||||
$arr[$item['parent'] . '-l'][] = '<a href="'. $url . '"'. $sparkle .'>' . $item['author-name'] . '</a>';
|
||||
}
|
||||
return;
|
||||
}}
|
||||
|
||||
if(! function_exists('get_mentions')) {
|
||||
function get_mentions($item) {
|
||||
|
|
@ -2026,20 +2039,9 @@ function contact_block() {
|
|||
intval($shown)
|
||||
);
|
||||
if(count($r)) {
|
||||
$o .= '<h4 class="contact-h4">' . $total . ' ' . t('Contacts') . '</h4><div id="contact-block">';
|
||||
$o .= '<h4 class="contact-h4">' . sprintf( tt('%d Contact','%d Contacts', $total),$total) . '</h4><div id="contact-block">';
|
||||
foreach($r as $rr) {
|
||||
$redirect_url = $a->get_baseurl() . '/redir/' . $rr['id'];
|
||||
if(local_user() && ($rr['uid'] == local_user())
|
||||
&& ($rr['network'] === 'dfrn')) {
|
||||
$url = $redirect_url;
|
||||
$sparkle = ' sparkle';
|
||||
}
|
||||
else {
|
||||
$url = $rr['url'];
|
||||
$sparkle = '';
|
||||
}
|
||||
|
||||
$o .= '<div class="contact-block-div"><a class="contact-block-link' . $sparkle . '" href="' . $url . '" ><img class="contact-block-img' . $sparkle . '" src="' . $rr['micro'] . '" title="' . $rr['name'] . ' [' . $rr['url'] . ']" alt="' . $rr['name'] . '" /></a></div>' . "\r\n";
|
||||
$o .= micropro($rr,true,'mpfriend');
|
||||
}
|
||||
$o .= '</div><div id="contact-block-end"></div>';
|
||||
$o .= '<div id="viewcontacts"><a id="viewcontacts-link" href="viewcontacts/' . $a->profile['nickname'] . '">' . t('View Contacts') . '</a></div>';
|
||||
|
|
@ -2053,6 +2055,44 @@ function contact_block() {
|
|||
|
||||
}}
|
||||
|
||||
if(! function_exists('micropro')) {
|
||||
function micropro($contact, $redirect = false, $class = '', $textmode = false) {
|
||||
|
||||
if($class)
|
||||
$class = ' ' . $class;
|
||||
|
||||
$url = $contact['url'];
|
||||
$sparkle = '';
|
||||
|
||||
if($redirect) {
|
||||
$a = get_app();
|
||||
$redirect_url = $a->get_baseurl() . '/redir/' . $contact['id'];
|
||||
if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === 'dfrn')) {
|
||||
$url = $redirect_url;
|
||||
$sparkle = ' sparkle';
|
||||
}
|
||||
}
|
||||
$click = ((x($contact,'click')) ? ' onclick="' . $contact['click'] . '" ' : '');
|
||||
if($click)
|
||||
$url = '';
|
||||
if($textmode) {
|
||||
return '<div class="contact-block-textdiv' . $class . '"><a class="contact-block-link' . $class . $sparkle
|
||||
. (($click) ? ' fakelink' : '') . '" '
|
||||
. (($url) ? ' href="' . $url . '"' : '') . $click
|
||||
. '" title="' . $contact['name'] . ' [' . $contact['url'] . ']" alt="' . $contact['name']
|
||||
. '" >'. $contact['name'] . '</a></div>' . "\r\n";
|
||||
}
|
||||
else {
|
||||
return '<div class="contact-block-div' . $class . '"><a class="contact-block-link' . $class . $sparkle
|
||||
. (($click) ? ' fakelink' : '') . '" '
|
||||
. (($url) ? ' href="' . $url . '"' : '') . $click . ' ><img class="contact-block-img' . $class . $sparkle . '" src="'
|
||||
. $contact['micro'] . '" title="' . $contact['name'] . ' [' . $contact['url'] . ']" alt="' . $contact['name']
|
||||
. '" /></a></div>' . "\r\n";
|
||||
}
|
||||
}}
|
||||
|
||||
|
||||
|
||||
if(! function_exists('search')) {
|
||||
function search($s) {
|
||||
$a = get_app();
|
||||
|
|
@ -2144,7 +2184,7 @@ function smilies($s) {
|
|||
$a = get_app();
|
||||
|
||||
return str_replace(
|
||||
array( '<3', '</3', '<\\3', ':-)', ';-)', ':-(', ':(', ':-P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'),
|
||||
array( '<3', '</3', '<\\3', ':-)', ';-)', ':-(', ':(', ':-P', ':P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'),
|
||||
array(
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-heart.gif" alt="<3" />',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-brokenheart.gif" alt="</3" />',
|
||||
|
|
@ -2154,6 +2194,7 @@ function smilies($s) {
|
|||
'<img src="' . $a->get_baseurl() . '/images/smiley-frown.gif" alt=":-(" />',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-frown.gif" alt=":(" />',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-P" />',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-tongue-out.gif" alt=":P" />',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-\"" />',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-x" />',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-X" />',
|
||||
|
|
@ -2271,8 +2312,15 @@ function profile_sidebar($profile) {
|
|||
|
||||
$photo = '<div id="profile-photo-wrapper"><img class="photo" src="' . $profile['photo'] . '" alt="' . $profile['name'] . '" /></div>';
|
||||
|
||||
// don't show connect link to yourself
|
||||
|
||||
$connect = (($profile['uid'] != local_user()) ? '<li><a id="dfrn-request-link" href="dfrn_request/' . $profile['nickname'] . '">' . t('Connect') . '</a></li>' : '');
|
||||
|
||||
|
||||
// don't show connect link to authenticated visitors either
|
||||
|
||||
if((remote_user()) && ($_SESSION['visitor_visiting'] == $profile['uid']))
|
||||
$connect = '';
|
||||
|
||||
if((x($profile,'address') == 1)
|
||||
|| (x($profile,'locality') == 1)
|
||||
|| (x($profile,'region') == 1)
|
||||
|
|
@ -2297,11 +2345,11 @@ function profile_sidebar($profile) {
|
|||
|
||||
$pubkey = ((x($profile,'pubkey') == 1) ? '<div class="key" style="display:none;">' . $profile['pubkey'] . '</div>' : '');
|
||||
|
||||
$marital = ((x($profile,'marital') == 1) ? '<div class="marital"><span class="marital-label"><span class="heart">♥</span> ' . t('Status:') . ' </span><span class="marital-text">' . $profile['marital'] . '</span></div></div><div class="profile-clear"></div>' : '');
|
||||
$marital = ((x($profile,'marital') == 1) ? '<div class="marital"><span class="marital-label"><span class="heart">♥</span> ' . t('Status:') . ' </span><span class="marital-text">' . $profile['marital'] . '</span></div><div class="profile-clear"></div>' : '');
|
||||
|
||||
$homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div></div><div class="profile-clear"></div>' : '');
|
||||
$homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div><div class="profile-clear"></div>' : '');
|
||||
|
||||
$tpl = load_view_file('view/profile_vcard.tpl');
|
||||
$tpl = get_markup_template('profile_vcard.tpl');
|
||||
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$fullname' => $fullname,
|
||||
|
|
@ -2409,9 +2457,7 @@ function get_birthdays() {
|
|||
if(! local_user())
|
||||
return $o;
|
||||
|
||||
$bd_format = get_config('system','birthday_format');
|
||||
if(! $bd_format)
|
||||
$bd_format = 'g A l F d' ; // 8 AM Friday January 18
|
||||
$bd_format = t('g A l F d') ; // 8 AM Friday January 18
|
||||
|
||||
$r = q("SELECT `event`.*, `event`.`id` AS `eid`, `contact`.* FROM `event`
|
||||
LEFT JOIN `contact` ON `contact`.`id` = `event`.`cid`
|
||||
|
|
@ -2423,25 +2469,39 @@ function get_birthdays() {
|
|||
);
|
||||
|
||||
if($r && count($r)) {
|
||||
$o .= '<div id="birthday-wrapper"><div id="birthday-title">' . t('Birthdays this week:') . '</div>';
|
||||
$o .= '<div id="birthday-adjust">' . t("\x28Adjusted for local time\x29") . '</div>';
|
||||
$o .= '<div id="birthday-title-end"></div>';
|
||||
$total = 0;
|
||||
foreach($r as $rr)
|
||||
if(strlen($rr['name']))
|
||||
$total ++;
|
||||
|
||||
foreach($r as $rr) {
|
||||
$now = strtotime('now');
|
||||
$today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false);
|
||||
if($total) {
|
||||
$o .= '<div id="birthday-notice" class="birthday-notice fakelink" onclick=openClose(\'birthday-wrapper\'); >' . t('Birthday Reminders') . ' ' . '(' . $total . ')' . '</div>';
|
||||
$o .= '<div id="birthday-wrapper" style="display: none;" ><div id="birthday-title">' . t('Birthdays this week:') . '</div>';
|
||||
$o .= '<div id="birthday-adjust">' . t("\x28Adjusted for local time\x29") . '</div>';
|
||||
$o .= '<div id="birthday-title-end"></div>';
|
||||
|
||||
$o .= '<div class="birthday-list" id="birthday-' . $rr['eid'] . '"><a class="sparkle" href="'
|
||||
. $a->get_baseurl() . '/redir/' . $rr['cid'] . '">' . $rr['name'] . '</a> '
|
||||
. day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '')
|
||||
. '</div>' ;
|
||||
foreach($r as $rr) {
|
||||
if(! strlen($rr['name']))
|
||||
continue;
|
||||
$now = strtotime('now');
|
||||
$today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false);
|
||||
|
||||
$o .= '<div class="birthday-list" id="birthday-' . $rr['eid'] . '"><a class="sparkle" href="'
|
||||
. $a->get_baseurl() . '/redir/' . $rr['cid'] . '">' . $rr['name'] . '</a> '
|
||||
. day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '')
|
||||
. '</div>' ;
|
||||
}
|
||||
$o .= '</div></div>';
|
||||
}
|
||||
|
||||
$o .= '</div>';
|
||||
}
|
||||
return $o;
|
||||
}}
|
||||
|
||||
return $o;
|
||||
|
||||
if(! function_exists('normalise_link')) {
|
||||
function normalise_link($url) {
|
||||
$ret = str_replace(array('https:','//www.'), array('http:','//'), $url);
|
||||
return(rtrim($ret,'/'));
|
||||
}}
|
||||
|
||||
/**
|
||||
|
|
@ -2457,9 +2517,7 @@ function get_birthdays() {
|
|||
|
||||
if(! function_exists('link_compare')) {
|
||||
function link_compare($a,$b) {
|
||||
$a1 = str_replace(array('https:','//www.'), array('http:','//'), $a);
|
||||
$b1 = str_replace(array('https:','//www.'), array('http:','//'), $b);
|
||||
if(strcasecmp($a1,$b1) === 0)
|
||||
if(strcasecmp(normalise_link($a),normalise_link($b)) === 0)
|
||||
return true;
|
||||
return false;
|
||||
}}
|
||||
|
|
@ -2512,34 +2570,38 @@ function proc_run($cmd){
|
|||
proc_close(proc_open($cmdline." &",array(),$foo));
|
||||
}}
|
||||
|
||||
/*
|
||||
* Return full URL to theme which is currently in effect.
|
||||
* Provide a sane default if nothing is chosen or the specified theme does not exist.
|
||||
*/
|
||||
|
||||
if(! function_exists('current_theme_url')) {
|
||||
function current_theme_url() {
|
||||
|
||||
if(! function_exists('current_theme')) {
|
||||
function current_theme(){
|
||||
$app_base_themes = array('duepuntozero', 'loozah');
|
||||
|
||||
|
||||
$a = get_app();
|
||||
|
||||
|
||||
$system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
|
||||
$theme_name = ((x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
|
||||
|
||||
$theme_name = ((is_array($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
|
||||
|
||||
if($theme_name && file_exists('view/theme/' . $theme_name . '/style.css'))
|
||||
return($a->get_baseurl() . '/view/theme/' . $theme_name . '/style.css');
|
||||
|
||||
return($theme_name);
|
||||
|
||||
foreach($app_base_themes as $t) {
|
||||
if(file_exists('view/theme/' . $t . '/style.css'))
|
||||
return($a->get_baseurl() . '/view/theme/' . $t . '/style.css');
|
||||
}
|
||||
|
||||
return($t);
|
||||
}
|
||||
|
||||
$fallback = glob('view/theme/*/style.css');
|
||||
if(count($fallback))
|
||||
return($a->get_baseurl() . $fallback[0]);
|
||||
return (str_replace('view/theme/','', str_replace("/style.css","",$fallback[0])));
|
||||
|
||||
|
||||
}}
|
||||
|
||||
/*
|
||||
* Return full URL to theme which is currently in effect.
|
||||
* Provide a sane default if nothing is chosen or the specified theme does not exist.
|
||||
*/
|
||||
if(! function_exists('current_theme_url')) {
|
||||
function current_theme_url() {
|
||||
global $a;
|
||||
$t = current_theme();
|
||||
return($a->get_baseurl() . '/view/theme/' . $t . '/style.css');
|
||||
}}
|
||||
|
||||
if(! function_exists('feed_birthday')) {
|
||||
|
|
@ -2630,7 +2692,7 @@ if(! function_exists('get_plink')) {
|
|||
function get_plink($item) {
|
||||
$a = get_app();
|
||||
$plink = (((x($item,'plink')) && (! $item['private'])) ? '<div class="wall-item-links-wrapper"><a href="'
|
||||
. $item['plink'] . '" title="' . t('link to source') . '" target="external-link" ><img src="' . $a->get_baseurl() . '/images/remote-link.gif" alt="' . t('link to source') . '" /></a></div>' : '');
|
||||
. $item['plink'] . '" title="' . t('link to source') . '" target="external-link" class="icon remote-link"></a></div>' : '');
|
||||
return $plink;
|
||||
}}
|
||||
|
||||
|
|
@ -2639,29 +2701,46 @@ function unamp($s) {
|
|||
return str_replace('&', '&', $s);
|
||||
}}
|
||||
|
||||
if(! function_exists('extract_item_authors')) {
|
||||
function extract_item_authors($arr,$uid) {
|
||||
|
||||
if((! $uid) || (! is_array($arr)) || (! count($arr)))
|
||||
return array();
|
||||
$urls = array();
|
||||
foreach($arr as $rr) {
|
||||
if(! in_array("'" . dbesc($rr['author-link']) . "'",$urls))
|
||||
$urls[] = "'" . dbesc($rr['author-link']) . "'";
|
||||
}
|
||||
|
||||
// pre-quoted, don't put quotes on %s
|
||||
if(count($urls)) {
|
||||
$r = q("SELECT `id`,`url` FROM `contact` WHERE `uid` = %d AND `url` IN ( %s ) AND `network` = 'dfrn' AND `self` = 0 AND `blocked` = 0 ",
|
||||
intval($uid),
|
||||
implode(',',$urls)
|
||||
);
|
||||
if(count($r)) {
|
||||
$ret = array();
|
||||
foreach($r as $rr)
|
||||
$ret[$rr['url']] = $rr['id'];
|
||||
return $ret;
|
||||
if(! function_exists('lang_selector')) {
|
||||
function lang_selector() {
|
||||
global $lang;
|
||||
$o .= '<div id="language-selector" style="display: none;" >';
|
||||
$o .= '<form action="" method="post" ><select name="system_language" onchange="this.form.submit();" >';
|
||||
$langs = glob('view/*/strings.php');
|
||||
if(is_array($langs) && count($langs)) {
|
||||
if(! in_array('view/en/strings.php',$langs))
|
||||
$langs[] = 'view/en/';
|
||||
foreach($langs as $l) {
|
||||
$ll = substr($l,5);
|
||||
$ll = substr($ll,0,strrpos($ll,'/'));
|
||||
$selected = (($ll === $lang) ? ' selected="selected" ' : '');
|
||||
$o .= '<option value="' . $ll . '"' . $selected . '>' . $ll . '</option>';
|
||||
}
|
||||
}
|
||||
return array();
|
||||
$o .= '</select></form></div>';
|
||||
return $o;
|
||||
}}
|
||||
|
||||
|
||||
if(! function_exists('parse_xml_string')) {
|
||||
function parse_xml_string($s) {
|
||||
if(! strstr($s,'<?xml'))
|
||||
return false;
|
||||
$s2 = substr($s,strpos($s,'<?xml'));
|
||||
libxml_use_internal_errors(true);
|
||||
$x = @simplexml_load_string($s2);
|
||||
if(count(libxml_get_errors()))
|
||||
foreach(libxml_get_errors() as $err)
|
||||
logger('libxml: parse: ' . $err->code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA);
|
||||
libxml_clear_errors();
|
||||
return $x;
|
||||
}}
|
||||
|
||||
if(! function_exists('is_site_admin')) {
|
||||
function is_site_admin() {
|
||||
$a = get_app();
|
||||
if(local_user() && x($a->user,'email') && x($a->config,'admin_email') && ($a->user['email'] === $a->config['admin_email']))
|
||||
return true;
|
||||
return false;
|
||||
}}
|
||||
61
database.sql
|
|
@ -64,6 +64,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
|
|||
`issued-id` char(255) NOT NULL,
|
||||
`dfrn-id` char(255) NOT NULL,
|
||||
`url` char(255) NOT NULL,
|
||||
`addr` char(255) NOT NULL,
|
||||
`alias` char(255) NOT NULL,
|
||||
`pubkey` text NOT NULL,
|
||||
`prvkey` text NOT NULL,
|
||||
|
|
@ -85,6 +86,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
|
|||
`priority` tinyint(3) NOT NULL,
|
||||
`blocked` tinyint(1) NOT NULL DEFAULT '1',
|
||||
`readonly` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`writable` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`pending` tinyint(1) NOT NULL DEFAULT '1',
|
||||
`rating` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`reason` text NOT NULL,
|
||||
|
|
@ -164,6 +166,7 @@ CREATE TABLE IF NOT EXISTS `item` (
|
|||
`gravity` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`parent` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`parent-uri` char(255) NOT NULL,
|
||||
`extid` char(255) NOT NULL,
|
||||
`thr-parent` char(255) NOT NULL,
|
||||
`created` datetime NOT NULL,
|
||||
`edited` datetime NOT NULL,
|
||||
|
|
@ -184,6 +187,7 @@ CREATE TABLE IF NOT EXISTS `item` (
|
|||
`plink` char(255) NOT NULL,
|
||||
`resource-id` char(255) NOT NULL,
|
||||
`tag` mediumtext NOT NULL,
|
||||
`attach` mediumtext NOT NULL,
|
||||
`inform` mediumtext NOT NULL,
|
||||
`location` char(255) NOT NULL,
|
||||
`coord` char(255) NOT NULL,
|
||||
|
|
@ -192,6 +196,7 @@ CREATE TABLE IF NOT EXISTS `item` (
|
|||
`deny_cid` mediumtext NOT NULL,
|
||||
`deny_gid` mediumtext NOT NULL,
|
||||
`private` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`pubmail` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`visible` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`unseen` tinyint(1) NOT NULL DEFAULT '1',
|
||||
`deleted` tinyint(1) NOT NULL DEFAULT '0',
|
||||
|
|
@ -204,6 +209,7 @@ CREATE TABLE IF NOT EXISTS `item` (
|
|||
KEY `wall` (`wall`),
|
||||
KEY `parent` (`parent`),
|
||||
KEY `parent-uri` (`parent-uri`),
|
||||
KEY `extid` (`extid`),
|
||||
KEY `created` (`created`),
|
||||
KEY `edited` (`edited`),
|
||||
KEY `visible` (`visible`),
|
||||
|
|
@ -297,7 +303,8 @@ CREATE TABLE IF NOT EXISTS `profile` (
|
|||
`sexual` char(255) NOT NULL,
|
||||
`politic` char(255) NOT NULL,
|
||||
`religion` char(255) NOT NULL,
|
||||
`keywords` text NOT NULL,
|
||||
`pub_keywords` text NOT NULL,
|
||||
`prv_keywords` text NOT NULL,
|
||||
`about` text NOT NULL,
|
||||
`summary` char(255) NOT NULL,
|
||||
`music` text NOT NULL,
|
||||
|
|
@ -314,7 +321,9 @@ CREATE TABLE IF NOT EXISTS `profile` (
|
|||
`thumb` char(255) NOT NULL,
|
||||
`publish` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`net-publish` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
PRIMARY KEY (`id`),
|
||||
FULLTEXT KEY `pub_keywords` (`pub_keywords`),
|
||||
FULLTEXT KEY `prv_keywords` (`prv_keywords`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
|
@ -363,6 +372,7 @@ CREATE TABLE IF NOT EXISTS `user` (
|
|||
`email` char(255) NOT NULL,
|
||||
`openid` char(255) NOT NULL,
|
||||
`timezone` char(128) NOT NULL,
|
||||
`language` char(32) NOT NULL DEFAULT 'en',
|
||||
`register_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`login_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`default-location` char(255) NOT NULL,
|
||||
|
|
@ -374,10 +384,12 @@ CREATE TABLE IF NOT EXISTS `user` (
|
|||
`sprvkey` text NOT NULL,
|
||||
`verified` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`blocked` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`blockwall` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`notify-flags` int(11) unsigned NOT NULL DEFAULT '65535',
|
||||
`page-flags` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`pwdreset` char(255) NOT NULL,
|
||||
`maxreq` int(11) NOT NULL DEFAULT '10',
|
||||
`expire` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`allow_cid` mediumtext NOT NULL,
|
||||
`allow_gid` mediumtext NOT NULL,
|
||||
`deny_cid` mediumtext NOT NULL,
|
||||
|
|
@ -479,3 +491,48 @@ CREATE TABLE IF NOT EXISTS `cache` (
|
|||
`v` TEXT NOT NULL,
|
||||
`updated` DATETIME NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `fcontact` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`url` CHAR( 255 ) NOT NULL ,
|
||||
`name` CHAR( 255 ) NOT NULL ,
|
||||
`photo` CHAR( 255 ) NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `ffinder` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`uid` INT UNSIGNED NOT NULL ,
|
||||
`cid` INT UNSIGNED NOT NULL ,
|
||||
`fid` INT UNSIGNED NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `mailacct` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`uid` INT NOT NULL,
|
||||
`server` CHAR( 255 ) NOT NULL ,
|
||||
`port` INT NOT NULL,
|
||||
`ssltype` CHAR( 16 ) NOT NULL,
|
||||
`mailbox` CHAR( 255 ) NOT NULL,
|
||||
`user` CHAR( 255 ) NOT NULL ,
|
||||
`pass` TEXT NOT NULL ,
|
||||
`reply_to` CHAR( 255 ) NOT NULL ,
|
||||
`pubmail` TINYINT(1) NOT NULL DEFAULT '0',
|
||||
`last_check` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `attach` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`uid` INT NOT NULL ,
|
||||
`filetype` CHAR( 64 ) NOT NULL ,
|
||||
`filesize` INT NOT NULL ,
|
||||
`data` LONGBLOB NOT NULL ,
|
||||
`created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`edited` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`allow_cid` MEDIUMTEXT NOT NULL ,
|
||||
`allow_gid` MEDIUMTEXT NOT NULL ,
|
||||
`deny_cid` MEDIUMTEXT NOT NULL ,
|
||||
`deny_gid` MEDIUMTEXT NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
|
|
|
|||
66
doc/Account-Basics.md
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
Account Basics
|
||||
==============
|
||||
|
||||
* [Home](help)
|
||||
|
||||
|
||||
**Registration**
|
||||
|
||||
Not all Friendika sites allow open registration. If registration is allowed, you will see a "Register" link immediately below the login prompts on the site home page. Following this link will take you to the site Registration page.
|
||||
|
||||
*OpenID*
|
||||
|
||||
The first field on the Registration page is for an OpenID address. If you do not have an OpenID address or do not wish to use OpenID, leave this field blank. If you have an OpenID account elsewhere and wish to use it, enter the address into this field and click 'Register'. Friendika will attempt to extract as much information as possible from your OpenID provider and return to this page with those items already filled in.
|
||||
|
||||
*Your Full Name*
|
||||
|
||||
Please provide your full name as you would like it to be displayed on this system.
|
||||
|
||||
*Email Address*
|
||||
|
||||
Please provide a valid email address. Your email address is **never** published. We need this to send you account information and your login details. You may also occasionally receive notifications of incoming messages or items requiring your attention, but you have the ability to completely disable these once from your Settings page once you have logged in.
|
||||
|
||||
*Nickname*
|
||||
|
||||
A nickname is used to generate web addresses for many of your personal pages, and is also treated like an email address when establishing communications with others. Due to the way that the nickname is used, it has some limitations. It must contain only US-ASCII text characters and numbers, and must also start with a text character. It also must be unique on this system. This is used in many places to identify your account, and once set - cannot be changed.
|
||||
|
||||
|
||||
|
||||
*Directory Publishing*
|
||||
|
||||
The Registration form also allows you to choose whether or not to list your account in the online directory. This is like a "phone book" and you may choose to be unlisted. We recommend that you select 'Yes' so that other people (friends, family, etc.) will be able to find you. If you choose 'No', you will essentially be invisible and have few opportunities for interaction. Whichever you choose, this can be changed any time from your Settings page after you login.
|
||||
|
||||
|
||||
*Register*
|
||||
|
||||
Once you have provided the necessary details, click the 'Register' button. An email will be sent to you providing your account login details. Some sites may require administrator approval before the registration is processed, and you will be alerted if this is the case. Please watch your email (including spam folders) for your registration approval.
|
||||
|
||||
|
||||
|
||||
|
||||
**Login Page**
|
||||
|
||||
On the 'Login' page, please enter your login information that was provided during registration. You may use either your nickname or email address as a Login Name.
|
||||
|
||||
If you use your account to manage multiple '[Pages](help/Pages)' and these all have the same email address, please enter the nickname for the account you wish to manage.
|
||||
|
||||
*If* your account has been OpenID enabled, you may use your OpenID address as a login name and leave the password blank. You will be redirected to your OpenID provider to complete your authorisation.
|
||||
|
||||
Otherwise, enter your password. This will have been initially provided in your registration email message. Your password is case-sensitive, so please check your 'Caps Lock' key if you are having difficulty logging in.
|
||||
|
||||
|
||||
**Changing Your Password**
|
||||
|
||||
After your first login, please visit the 'Settings' page from the top menu bar and change your password to something that you will remember.
|
||||
|
||||
|
||||
|
||||
**See Also**
|
||||
|
||||
* [Profiles](help/Profiles)
|
||||
|
||||
* [Groups and Privacy](help/Groups-and-Privacy)
|
||||
|
||||
* [Remove Account](help/Remove-Account)
|
||||
|
||||
|
||||
30
doc/Bugs-and-Issues.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
Bugs and Issues
|
||||
===============
|
||||
|
||||
* [Home](help)
|
||||
|
||||
|
||||
Please report any bugs/issues you encounter using our bug tracker at [[http://bugs.friendika.com]]
|
||||
|
||||
Try to provide as much information as you can about the bug (including the full text of any error messages or notices), and if possible your Friendika version.
|
||||
|
||||
Your Friendika version may be found in newer releases by visiting http://YOURFRIENDIKASITE/friendika
|
||||
|
||||
For older versions, view the HTML source of your profile page. The Friendika version is in the HTML header, 5-10 lines from the top of the page.
|
||||
|
||||
For really old versions which don't have a version number in the HTML header - please upgrade. Your bug was probably fixed a long time ago.
|
||||
|
||||
**Bug Sponsorship**
|
||||
|
||||
The bug/issue database allows you to sponsor issues. This provides an incentive for developers to work on your issue. This isn't necessary - we don't like bugs and will try to fix them. This has more importance for future development projects and feature requests.
|
||||
|
||||
Bug sponsorship works on the honour system. If you agree to pay $10 to fix a bug, when the fix has been checked in and verified you should send a paypal payment to the developer assigned to the bug. Don't ever think you can get away with not paying a developer for work performed. Some of these guys could hack into your credit card account if you make them mad.
|
||||
|
||||
At the present time, one has to be approved as a "developer" to be able to assign themselves to a sponsored bug. This requires the developer to have some history fixing Friendika bugs. This is for everybody's assurance that the bug fix will work well with Friendika. If you wish to become approved as a developer, work on and check in some non-sponsored issues or your own projects and we will move you up the ladder.
|
||||
|
||||
If you truly feel you have the solution to a sponsored bug but aren't an approved developer, you risk a sponsored developer assigning the bug to themselves before you check it in, but if they haven't done so - include a short note with your pull request. Assuming that it meets our code standards, we'll see that you get credit.
|
||||
|
||||
If you sponsor a project at greater than a $50 level, you may be requested by the developer for payment up front before work has begun (typically half). Again this is on the honour system - and is mostly to avoid payment issues and disagreements later. You should also expect to see some progress updates or demonstrations if the work takes more than a week or two. If the work is not completed within a reasonable time (as decided by those involved), you are entitled to get your money back.
|
||||
|
||||
Friendika is not involved in these transactions. It is purely a personal agreement between sponsors and developers. If there are any issues, the parties will need to work it out between themselves. We're just providing some guidelines to help avoid potential problems.
|
||||
|
||||
63
doc/Connectors.md
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
Connectors
|
||||
==========
|
||||
|
||||
* [Home](help)
|
||||
|
||||
Connectors allow you to connect with external social networks and services. Connectors are only required for posting to existing accounts on Facebook, Twitter, and StatusNet. There is also a connector for accessing your email INBOX.
|
||||
|
||||
If the following network connectors are installed on your system, select the following links to visit the appropriate settings page and configure them for your account:
|
||||
|
||||
* [Facebook](/settings/addon)
|
||||
* [Twitter](/settings/addon)
|
||||
* [StatusNet](/settings/addon)
|
||||
* [Email](/settings)
|
||||
|
||||
Instructions For Connecting To People On Specific Services
|
||||
==========================================================
|
||||
|
||||
**Friendika**
|
||||
|
||||
|
||||
You may connect by providing your Identity Address on the 'Connect' page of any Friendika member. You may also put their Identity Address into the Connect box on your [Contacts](contacts) page.
|
||||
|
||||
**Identi.ca/StatusNet/GNU-Social**
|
||||
|
||||
These are described as the "federated social web" or OStatus contacts.
|
||||
|
||||
Please note that there are **no** privacy provisions on the OStatus network. Any message which is delivered to **any** OStatus member is visible to anybody in the world and will negate any privacy settings that you have in effect. These messages will also turn up in public searches.
|
||||
|
||||
To connect with an OStatus member insert their profile URL or Identity address into the Connect box on your [Contacts](contacts) page.
|
||||
|
||||
The StatusNet connector may be used if you wish posts to appear on an OStatus site using an existing OStatus account.
|
||||
|
||||
It is not necessary to do this, as you may 'follow' OStatus members from Friendika and they may follow you (by placing their own Identity Address into your 'Connect' page).
|
||||
|
||||
**Blogger, Wordpress, RSS feeds, arbitrary web pages**
|
||||
|
||||
Put the URL into the Connect box on your [Contacts](contacts) page. You will not be able to reply to these contacts.
|
||||
|
||||
This will allow you to _connect_ with millions of pages on the internet. All that we require to do this is that the page use a discoverable feed using either the RSS or Atom syndication format, and which provides an author name and a site image in a form which we can extract.
|
||||
|
||||
|
||||
**Twitter**
|
||||
|
||||
To follow a Twitter member, put the URL of the Twitter member's main page into the Connect box on your [Contacts](contacts) page. To reply, you must have the Twitter connector installed, and reply using your own status editor. Begin the message with @twitterperson replacing with the Twitter username.
|
||||
|
||||
**Diaspora**
|
||||
|
||||
To follow a Diaspora member, put either the URL or the pod address (Identity Address) of the Diaspora member into the Connect box on your [Contacts](contacts) page. It is not currently possible to reply to Diaspora members. This will be provided in a future release (once the Diaspora communication protocols stabilise and are published).
|
||||
|
||||
**Email**
|
||||
|
||||
Configure the email connector from your [Settings](settings) page. Once this has been done, you may enter an email addres to connect with using the Connect box on your [Contacts](contacts) page. They must be the sender of a message which is currently in your INBOX for the connect to succeed. You may include email contacts in private conversations.
|
||||
|
||||
**Facebook**
|
||||
|
||||
The Facebook connector is a plugin/addon which allows you to interact with friends on Facebook from within Friendika. If enabled, your Facebook friend list will be imported, and you will see and be able to respond to Facebook posts. Facebook members may also be added to private conversation groups. You will not be able to connect with individual Facebook accounts - but will have your entire friend list imported and updated if new friends are added.
|
||||
|
||||
Assuming the Facebook plugin/addon has been installed on your system, it can be enabled by going to your [Plugin Settings](settings/addon) page, and then select "Facebook Connector Settings" on that page. This will only appear if the Facebook plugin/addon has been installed. Follow the instruction to install or remove the Facebook connector.
|
||||
|
||||
You may also choose whether your public postings are posted to Facebook by default. You may toggle this setting at any time from the Permissions settings of the status post editor (click the lock icon). This setting has no effect on private conversations - which will always be delivered to Facebook friends who are included in the permissions.
|
||||
|
||||
(Note: At this time, Facebook contacts will not be able to view any private photos. This will be resolved in a future release. Facebook contacts may however see any public photos you have uploaded.)
|
||||
|
||||
22
doc/Developers.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
Friendika Developer Guide
|
||||
|
||||
Here is how you can join us.
|
||||
|
||||
First, get yourself a working git package on the system where you will be
|
||||
doing development.
|
||||
|
||||
Create your own github account.
|
||||
|
||||
You may fork/clone the Friendika repository from [https://github.com/friendika/friendika.git](https://github.com/friendika/friendika.git).
|
||||
|
||||
Follow the instructions provided here: [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/)
|
||||
to create and use your own tracking fork on github
|
||||
|
||||
Then go to your github page and create a "Pull request" when you are ready
|
||||
to notify us to merge your work.
|
||||
|
||||
**Important**
|
||||
|
||||
Please pull in any changes from the project repository and merge them with your work **before** issuing a pull request. We reserve the right to reject any patch which results in a large number of merge conflicts. This is especially true in the case of language translations - where we may not be able to understand the subtle differences between conflicting versions.
|
||||
|
||||
Also - **test your changes**. Don't assume that a simple fix won't break something else. If possible get an experienced Friendika developer to review the code.
|
||||
36
doc/Groups-and-Privacy.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
Groups and Privacy
|
||||
==================
|
||||
|
||||
* [Home](help)
|
||||
|
||||
|
||||
Groups are merely collections of friends. But Friendika uses these to unlock some very powerful features.
|
||||
|
||||
To create a group, visit your Friendika "Contacts" page and select "Create a new group". Give the group a name.
|
||||
|
||||
This brings you to a page where you can select the group members.
|
||||
|
||||
You will have two boxes on this page. The top box is the roster of current group members. Below that is another box containing all of your friends who are *not* members of the group.
|
||||
|
||||
If you click on a photo of a person who isn't in the group, they will be put into the group. If you click on a photo of a person who is in the group, they will be removed from it.
|
||||
|
||||
Once you have created a group, you may use it in any access control list. This is the little lock icon beneath the status update box on your home page. If you click this you can select who can see and who can *not* see the post you are about to make. These can be individual people or groups.
|
||||
|
||||
On your "Network" page you will find posts and conversation from everybody in your network. You may select an individual group on this page to show conversations pertaining only to members of that group.
|
||||
|
||||
But wait, there's more...
|
||||
|
||||
If you look carefully when visiting a group from your Network page, the lock icon under the status update box has an exclamation mark next to it. This is meant to draw attention to that lock. Click the lock. You will see that since you are only viewing a certain group of people, your status updates while on that screen default to only being seen by that same group of people. This is how you keep your future employers from seeing what you write to your drinking buddies. You can over-ride this setting, but this makes it easy to separate your conversations into different friend circles.
|
||||
|
||||
These private conversations work best when your friends are Freindika members. We know who else can see the conversations - nobody, *unless* your friends cut and paste the messages and send them to others.
|
||||
|
||||
This is a trust issue you need to be aware of. No software in the world can prevent your friends from leaking your confidential and trusted communications. Only a wise choice of friends.
|
||||
|
||||
But it isn't as clear cut when dealing with status.net, identi.ca and other network providers. You are encouraged to be **very** cautious when other network members are in a group because it's entirely possible for your private messages to end up in a public newsfeed. If you look at the Contact Edit page for any person, we will tell you whether or not they are members of an insecure network where you should exercise caution.
|
||||
|
||||
On your "Settings" page, you may create a set of default permissions which apply to every post that you create.
|
||||
|
||||
Once you have created a post, you can not change the permissions assigned. Within seconds it has been delivered to lots of people - and perhaps everybody it was addressed to. If you mistakenly created a message and wish you could take it back, the best you can do is to delete it. We will send out a delete notification to everybody who received the message - and this should wipe out the message with the same speed it was initially propagated. In most cases it will be completely wiped from the Internet - in under a minute. Again, this applies to Friendika networks. Once a message spreads to other networks, it may not be removed quickly and in some cases it may not be removed at all.
|
||||
|
||||
In case you haven't yet figured this out, we are encouraging you to encourage your friends to use Friendika - because all these privacy features work much better within a privacy-aware network. Many of the other social networks Friendika can connect to have no privacy controls.
|
||||
|
||||
36
doc/Home.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
Friendika Documentation and Resources
|
||||
=====================================
|
||||
|
||||
|
||||
**Contents**
|
||||
|
||||
* [Account Basics](help/Account-Basics)
|
||||
* [Profiles](help/Profiles)
|
||||
* [Connectors](help/Connectors)
|
||||
* [Making Friends](help/Making-Friends)
|
||||
* [Groups and Privacy](help/Groups-and-Privacy)
|
||||
* [Tags and Mentions](help/Tags-and-Mentions)
|
||||
* [Pages](help/Pages)
|
||||
* [Remove Account](help/Remove-Account)
|
||||
* [Bugs and Issues](help/Bugs-and-Issues)
|
||||
|
||||
**Technical Documentation**
|
||||
|
||||
* [Install](help/Install)
|
||||
* [Settings](help/Settings)
|
||||
* [Plugins](help/Plugins)
|
||||
* [Installing Connectors (Facebook/Twitter/StatusNet)](help/Installing-Connectors)
|
||||
* [Message Flow](help/Message-Flow)
|
||||
* [Developers](help/Developers)
|
||||
|
||||
|
||||
**External Resources**
|
||||
|
||||
* [Main Website](http://friendika.com)
|
||||
* [Forums](http://groups.google.com/group/friendika)
|
||||
* [Developer Forums](http://groups.google.com/group/friendika-dev)
|
||||
|
||||
**About**
|
||||
|
||||
* [Site/Version Info](friendika)
|
||||
|
||||
97
doc/Install.md
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
Friendika Installation
|
||||
|
||||
We've tried very hard to ensure that Friendika will run on commodity hosting platforms - such as those used to host Wordpress blogs and Drupal websites. But be aware that Friendika is more than a simple web application. It is a complex communications system which more closely resembles an email server than a web server. For reliability and performance, messages are delivered in the background and are queued for later delivery when sites are down. This kind of functionality requires a bit more of the host system than the typical blog. Not every PHP/MySQL hosting provider will be able to support Friendika. Many will. But **please** review the requirements and confirm these with your hosting provider prior to installation.
|
||||
|
||||
Also if you encounter installation issues, please let us know via the forums at http://groups.google.com/group/friendika or file an issue at http://bugs.friendika.com . Please be as clear as you can about your operating environment and provide as much detail as possible about any error messages you may see, so that we can prevent it from happening in the future. Due to the large variety of operating systems and PHP platforms in existence we may have only limited ability to debug your PHP installation or acquire any missing modules - but we will do our best to solve any general code issues.
|
||||
|
||||
Before you begin: Choose a domain name or subdomain name for your server. Put some thought into this - because changing it after installation is currently not-supported. Things will break, and some of your friends may have difficulty communicating with you. We plan to address this limitation in a future release.
|
||||
|
||||
|
||||
1. Requirements
|
||||
- Apache with mod-rewrite enabled and "Options All" so you can use a
|
||||
local .htaccess file
|
||||
|
||||
- PHP 5.2+. The later the better. You'll need 5.3 for encryption of key exchange conversations. On a Windows environment, 5.2+ might not work as the function dns_get_record() is only available with version 5.3.
|
||||
- PHP *command line* access with register_argc_argv set to true in the
|
||||
php.ini file
|
||||
- curl, gd, mysql, and openssl extensions
|
||||
- some form of email server or email gateway such that PHP mail() works
|
||||
- mcrypt (optional; used for server-to-server message encryption)
|
||||
|
||||
- Mysql 5.x
|
||||
|
||||
- ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks
|
||||
(Windows) [Note: other options are presented in Section 7 of this document]
|
||||
|
||||
- Installation into a top-level domain or sub-domain (without a
|
||||
directory/path component in the URL) is preferred. Directory paths will
|
||||
not be as convenient to use and have not been thoroughly tested.
|
||||
|
||||
|
||||
[Dreamhost.com offers all of the necessary hosting features at a
|
||||
reasonable price. If your hosting provider doesn't allow Unix shell access,
|
||||
you might have trouble getting everything to work.]
|
||||
|
||||
2. Unpack the Friendika files into the root of your web server document area.
|
||||
|
||||
- If you are able to do so, we recommend using git to clone the source repository rather than to use a packaged tar or zip file. This makes the software much easier to update. The Linux command to clone the repository into a directory "mywebsite" would be
|
||||
|
||||
`git clone http://github.com/friendika/friendika.git mywebsite`
|
||||
|
||||
and then you can pick up the latest changes at any time with
|
||||
|
||||
`git pull`
|
||||
|
||||
|
||||
|
||||
- If you copy the directory tree to your webserver, make sure
|
||||
that you also copy .htaccess - as "dot" files are often hidden
|
||||
and aren't normally copied.
|
||||
|
||||
|
||||
3. Create an empty database and note the access details (hostname, username, password, database name).
|
||||
|
||||
4. Visit your website with a web browser and follow the instructions. Please note any error messages and correct these before continuing.
|
||||
|
||||
5. *If* the automated installation fails for any reason, check the following:
|
||||
|
||||
- ".htconfig.php" exists ... If not, edit htconfig.php and change system settings. Rename
|
||||
to .htconfig.php
|
||||
- Database is populated. ... If not, import the contents of "database.sql" with phpmyadmin
|
||||
or mysql command line
|
||||
|
||||
6. At this point visit your website again, and register your personal account.
|
||||
Registration errors should all be recoverable automatically.
|
||||
If you get any *critical* failure at this point, it generally indicates the
|
||||
database was not installed correctly. You might wish to move/rename
|
||||
.htconfig.php to another name and empty (called 'dropping') the database
|
||||
tables, so that you can start fresh.
|
||||
|
||||
7. Set up a cron job or scheduled task to run the poller once every 5-10
|
||||
minutes in order to perform background processing. Example:
|
||||
|
||||
`cd /base/directory; /path/to/php include/poller.php`
|
||||
|
||||
Change "/base/directory", and "/path/to/php" as appropriate for your situation.
|
||||
|
||||
If you are using a Linux server, run "crontab -e" and add a line like the
|
||||
one shown, substituting for your unique paths and settings:
|
||||
|
||||
`*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php include/poller.php`
|
||||
|
||||
You can generally find the location of PHP by executing "which php". If you
|
||||
have troubles with this section please contact your hosting provider for
|
||||
assistance. Friendika will not work correctly if you cannot perform this step.
|
||||
|
||||
Alternative: You may be able to use the 'poormancron' plugin to perform this step
|
||||
if you are using a recent Friendika release. To do this, edit the file ".htconfig.php"
|
||||
and look for a line describing your plugins. On a fresh installation, it will look like
|
||||
|
||||
`$a->config['system']['addon'] = 'js_upload';`
|
||||
|
||||
This indicates the "js_upload" addon module is enabled. You may add additional
|
||||
addons/plugins using this same line in the configuration file. Change it to read
|
||||
|
||||
`$a->config['system']['addon'] = 'js_upload,poormancron';`
|
||||
|
||||
and save your changes.
|
||||
154
doc/Installing-Connectors.md
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
Installing Connectors (Facebook/Twitter/StatusNet)
|
||||
==================================================
|
||||
|
||||
* [Home](help)
|
||||
|
||||
|
||||
Friendika uses plugins to provide connectivity to some networks, such as Facebook and Twitter.
|
||||
|
||||
There is also a plugin to post through to an existing account on a Status.Net service. You do not require this to communicate with Status.Net members from Friendika - only if you wish to post to an existing account.
|
||||
|
||||
All three of these plugins require an account on the target network. In addition you (or typically the server administrator) will need to obtain an API key to provide authenticated access to your Friendika server.
|
||||
|
||||
**Site Configuration**
|
||||
|
||||
Plugins must be installed by the site administrator before they can be use. This is accomplished through the site
|
||||
configuration file ".htconfig.php".
|
||||
|
||||
The configuration directive looks like:
|
||||
|
||||
```
|
||||
$a->config['system']['addon'] = ' ... list of plugins separated by commas ... ';
|
||||
```
|
||||
|
||||
Example:
|
||||
To install all of the connector addons in addition to the default Javascript photo uploader this line would look like:
|
||||
|
||||
```
|
||||
$a->config['system']['addon'] = 'js_upload,facebook,twitter,statusnet';
|
||||
```
|
||||
|
||||
You may also add other plugins/addons as your needs require.
|
||||
|
||||
|
||||
Each of the connectors also requires an "API key" from the service you wish to connect with. This is also installed in the
|
||||
configuration file. The method for obtaining these keys varies greatly - but almost always requires an existing account on the target service. Once installed, these API keys can usually be shared by all site members.
|
||||
|
||||
|
||||
The details of configuring each service follows (much of this information comes directly from the plugin source files):
|
||||
|
||||
**Twitter Plugin for Friendika**
|
||||
|
||||
* Author: Tobias Diekershoff
|
||||
* tobias.diekershoff@gmx.net
|
||||
|
||||
* License:3-clause BSD license (same as Friendika)
|
||||
|
||||
Configuration:
|
||||
To use this plugin you need a OAuth Consumer key pair (key & secret)
|
||||
you can get it from Twitter at https://twitter.com/apps
|
||||
|
||||
Register your Friendika site as "Client" application with "Read & Write" access.
|
||||
We do not need "Twitter as login". When you've registered the app you get the
|
||||
OAuth Consumer key and secret pair for your application/site.
|
||||
|
||||
Add this key pair to your global .htconfig.php
|
||||
|
||||
```
|
||||
$a->config['twitter']['consumerkey'] = 'your consumer_key here';
|
||||
$a->config['twitter']['consumersecret'] = 'your consumer_secret here';
|
||||
```
|
||||
|
||||
After this, your user can configure their Twitter account settings
|
||||
from "Settings -> Plugin Settings".
|
||||
|
||||
Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin
|
||||
|
||||
|
||||
**StatusNet Plugin for Friendika**
|
||||
|
||||
* Author: Tobias Diekershoff
|
||||
* tobias.diekershoff@gmx.net
|
||||
|
||||
* License:3-clause BSD license (same as Friendika)
|
||||
|
||||
Configuration
|
||||
|
||||
When the addon is activated the user has to aquire the following in order to connect to the StatusNet account of choice.
|
||||
|
||||
* The base URL for the StatusNet API, for identi.ca this is https://identi.ca/api/
|
||||
* OAuth Consumer key & secret
|
||||
|
||||
To get the OAuth Consumer key pair the user has to
|
||||
|
||||
(a) ask her Friendika admin if a pair already exists or
|
||||
(b) has to register the Friendika server as a client application on the StatusNet server.
|
||||
|
||||
This can be done from the account settings under "Settings -> Connections -> Register an OAuth client application -> Register new application".
|
||||
|
||||
During the registration of the OAuth client remember the following:
|
||||
|
||||
* Application names must be unique on the StatusNet site, so we recommend a Name of 'friendika-nnnn', replace 'nnnn' with a random number or your website name.
|
||||
* there is no callback url
|
||||
* register a desktop client
|
||||
* with read & write access
|
||||
* the Source URL should be the URL of your Friendika server
|
||||
|
||||
After the required credentials for the application are stored in the configuration you have to actually connect your Friendika account with StatusNet. This is done from the Settings -> Plugin Settings page. Follow the Sign in with StatusNet button, allow access and then copy the security code into the box provided. Friendika will then try to acquire the final OAuth credentials from the API.
|
||||
|
||||
If successful the addon settings will allow you to select to post your public messages to your StatusNet account (have a look behind the little lock symbol beneath the status "editor" on your Home or Network pages).
|
||||
|
||||
Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/StatusNet_Plugin
|
||||
|
||||
|
||||
|
||||
**Installing the Friendika/Facebook connector**
|
||||
|
||||
* register an API key for your site from developer.facebook.com
|
||||
|
||||
This requires a Facebook account, and may require additional authentication in the form of credit card or mobile phone verification.
|
||||
|
||||
a. We'd be very happy if you include "Friendika" in the application name
|
||||
to increase name recognition. The Friendika icons are also present
|
||||
in the images directory and may be uploaded as a Facebook app icon.
|
||||
Use images/friendika-16.jpg for the Icon and images/friendika-128.jpg for the Logo.
|
||||
|
||||
b. The url should be your site URL with a trailing slash.
|
||||
You may use http://portal.friendika.com/privacy as the privacy policy
|
||||
URL unless your site has different requirements, and
|
||||
http://portal.friendika.com as the Terms of Service URL unless
|
||||
you have different requirements. (Friendika is a software application
|
||||
and does not require Terms of Service, though your installation of it might).
|
||||
|
||||
c. Set the following values in your .htconfig.php file
|
||||
|
||||
```
|
||||
$a->config['facebook']['appid'] = 'xxxxxxxxxxx';
|
||||
$a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx';
|
||||
```
|
||||
|
||||
Replace with the settings Facebook gives you.
|
||||
|
||||
Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
|
||||
and click 'Install Facebook Connector'.
|
||||
|
||||
This will ask you to login to Facebook and grant permission to the
|
||||
plugin to do its stuff. Allow it to do so.
|
||||
|
||||
You're done. To turn it off visit the Plugin Settings page again and
|
||||
'Remove Facebook posting'.
|
||||
|
||||
Videos and embeds will not be posted if there is no other content. Links
|
||||
and images will be converted to a format suitable for the Facebook API and
|
||||
long posts truncated - with a link to view the full post.
|
||||
|
||||
Facebook contacts will also not be able to view "private" photos, as they are not able to
|
||||
authenticate to your site to establish identity. We will address this
|
||||
in a future release.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
50
doc/Making-Friends.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
Making Friends
|
||||
==============
|
||||
|
||||
* [Home](help)
|
||||
|
||||
Friendship in Friendika can take on a great many different meanings. But let's keep it simple, you want to be friends with somebody. How do you do it?
|
||||
|
||||
The first thing you can do is look at the Directory for somebody you would like to connect with. Visit their profile. Just beneath their profile picture will be the word 'Connect' (we're assuming this is an English language profile).
|
||||
|
||||
Click that. It will take you to a "Connect" form.
|
||||
|
||||
This is going to ask you for your Identity Address. This is necessary so that this person's website can find yours.
|
||||
|
||||
What do you put in the box?
|
||||
|
||||
If your Friendika site is called "demo.friendika.com" and your username/nickname on that site is "bob", you would put in "bob@demo.friendika.com".
|
||||
|
||||
Notice this looks just like an email address. It was meant to be that way. It's easy for people to remember.
|
||||
|
||||
You *could* also put in the URL of your "home" page, such as "http://demo.friendika.com/profile/bob", but the email-style address is certainly easier.
|
||||
|
||||
When you've submitted the connection page, it will take you back to your own site where you must then login (if necessary) and verify the connection request on *your* site. Once you've done this, the two websites can communicate with each other to complete the process (after your new friend has approved the request).
|
||||
|
||||
If you already know somebody's Identity Address, you can enter it in the "connect" box on your "Contacts" page. This will take you through a similar process.
|
||||
|
||||
**Alternate Networks**
|
||||
|
||||
You can also use your Identity Address or other people's Identity Addresses to become friends across networks. The list of possible networks is growing all the time. If you know (for instance) "bob" on identi.ca (a Status.Net site) you could put bob@identi.ca into your Contact page and become friends across networks. (Or you can put in the URL to Bob's identi.ca page if you wish). You can also be "partial" friends with somebody on Google Buzz by putting in their gmail address. Google Buzz does not yet support all the protocols we need for direct messaging, but you should be able to follow status updates from within Friendika. You can do the same for Twitter accounts and Diaspora accounts. In fact you can "follow" most anybody or any website that produces a syndication feed (RSS/Atom,etc.). If we can find an information stream and a name to attach to the contact, we'll try to connect with them.
|
||||
|
||||
If you have supplied your mailbox connection information on your Settings page, you can enter the email address of anybody that has sent you a message recently and have their email messages show up in your social stream. You can also reply to them from within Friendika.
|
||||
|
||||
People can also become friends with you from other networks. If a friend of yours has an identi.ca account, they can become friends with you by putting your Friendika Identity Address into their identi.ca subscription dialog box.
|
||||
|
||||
If this happens you will receive a notification. You will need to approve this before the friendship is complete.
|
||||
|
||||
Some networks allow people to send you messages without being friends and without your approval. Friendika does not allow this by default, as it would open a gateway for spam. So when you've approved a friend request from one of these networks, look at your contact page for that person (this will be displayed as soon as you approve the relationship). They might be marked as an "Ignored" contact.
|
||||
|
||||
This means they can see some of your posts (your public posts), but they aren't permitted to send you anything. You can "Un-ignore" them if you desire to allow them to contact you directly and to have their status updates appear in your Network feed.
|
||||
|
||||
When you receive a friendship notification from another Friendika member, you will have the option of allowing them as a "fan" or as a "friend". If they are a fan, they can see what you have to say, including private communications that you send to them, but not vice versa. As a friend, you can both communicate with each other.
|
||||
|
||||
Once you have become friends, if you find the person constantly sends you spam or worthless information, you can "Ignore" them - without breaking off the friendship or even alerting them to the fact that you aren't interested in anything they are saying. In many ways they are like a "fan" - but they don't know this. They think they are a friend.
|
||||
|
||||
You can also "block" a person. This completely blocks communications with that person. They may still be able to see your public posts, as can anybody in the world, but they cannot communicate with you directly in any way. They will know or be able to discover that they have been blocked but there's nothing they can do about it.
|
||||
|
||||
You can also delete a friend no matter what the friendship status - which complete removes everything relating to that person from your website.
|
||||
|
||||
|
||||
|
||||
|
||||
54
doc/Message-Flow.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
Friendika Message Flow
|
||||
|
||||
This page attempts to document some of the details of how messages get from one person to another in the Friendika network. There are multiple paths, using multiple protocols and message formats.
|
||||
|
||||
Those attempting to understand these message flows should become familiar with (at the minimum) the DFRN protocol document (http://dfrn.org/dfrn.pdf) and the message passing elements of the OStatus stack (salmon and Pubsubhubbub).
|
||||
|
||||
|
||||
Most message passing involves the file include/items.php, which has functions for several feed-related import/export activities.
|
||||
|
||||
When a message is posted, all immediate deliveries to all networks are made using include/notifier.php, which chooses how (and to whom) to deliver the message. This file also invokes the local side of all deliveries including DFRN-notify.
|
||||
|
||||
mod/dfrn_notify.php handles the remote side of DFRN-notify.
|
||||
|
||||
Local feeds are generated by mod/dfrn_poll.php - which also handles the remote side of DFRN-poll protocol.
|
||||
|
||||
Salmon notifications arrive via mod/salmon.php.
|
||||
|
||||
Push (pubsubhubbub) feeds arrive via mod/pubsub.php
|
||||
|
||||
DFRN-poll feed imports arrive via include/poller.php as a scheduled task, this implements the local side of the DFRN-poll protocol.
|
||||
|
||||
|
||||
|
||||
|
||||
Scenario #1. Bob posts a public status message
|
||||
|
||||
This is a public message with no conversation members so no private transport is used. There are two paths it can take - as a bbcode path to DFRN clients, and converted to HTML with the server's PuSH (pubsubhubbub) hubs notified. When a PuSH hub is operational, dfrn-poll clients prefer to receive their information through the PuSH channel. They will fall back on a daily poll in case the hub has delivery issues (this is quite common when using the default Google reference hub). If there is no specified hub or hubs, DFRN clients will poll at a configurable (per-contact) rate at up to 5-minute intervals. Feeds retrieved via dfrn-poll are bbcode and may also contain private conversations which the poller has permissions to see.
|
||||
|
||||
Scenario #2. Jack replies to Bob's public message. Jack is on the Friendika/DFRN network.
|
||||
|
||||
Jack uses dfrn-notify to send a direct reply to Bob. Bob then creates a feed of the conversation and sends it to everybody involved in the conversation using dfrn-notify. PuSH hubs are notified that new content is available. The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
|
||||
|
||||
Scenario #3. Mary replies to Bob's public message. Mary is on the Friendika/DFRN network.
|
||||
|
||||
Mary uses dfrn-notify to send a direct reply to Bob. Bob then creates a feed of the conversation and sends it to everybody involved in the conversation (excluding himself, the conversation is now sent to both Jack and Mary). Messages are sent using dfrn-notify. Push hubs are also notified that new content is available. The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
|
||||
|
||||
Scenario #4. William replies to Bob's public message. William is on the OStatus network.
|
||||
|
||||
William uses salmon to notify Bob of the reply. Content is html embedded in salmon magic envelope. Bob then creates a feed of the conversation and sends it to all Friendika participants involved in the conversation using dfrn-notify (excluding himself, the conversation is sent to both Jack and Mary). Push hubs are notified that new content is available. The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
|
||||
|
||||
Scenario #5. Bob posts a private message to Mary and Jack.
|
||||
|
||||
Message is delivered immediately to Mary and Jack using dfrn_notify. Public hubs are not notified. Requeueing is attempted in case of timeout. Replies follow the same flow as the public replies except that hubs are not notified and message is never made available in the public feed. The entire conversation is also made available to Mary and Jack (and nobody else) through their dfrn-poll personalised feed.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
28
doc/Pages.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
Pages
|
||||
=====
|
||||
|
||||
* [Home](help)
|
||||
|
||||
|
||||
Friendika also lets you create group and/or celebrity pages.
|
||||
|
||||
Every page in Friendika has a nickname and these must all be unique. This applies to all pages, whether they are normal profiles or group pages.
|
||||
|
||||
Therefore the first thing you need to do to create a new page is to register a new account for the page. Please note that the site administrator can restrict and/or regulate the registration of new accounts.
|
||||
|
||||
If you create a second account on a system and use the same email address or OpenID account, you will no longer be able to use the email address (or OpenID) to login to the account. You should login using the account nickname instead.
|
||||
|
||||
On the new account, visit the 'Settings' page. Towards the end of the page are "Advanced Page Settings". Typically you would use "Normal Account" for a normal personal account. This is the default selection. Group pages provide the ability for people to become friends/fans of the page without requiring approval.
|
||||
|
||||
The exact setting you would use depends on how you wish to interact with people who join the page. The "Soapbox" setting let's the page owner control all communications. Everything you post will go out to the page members, but there will be no opportunity for interaction. This setting would typically be used for announcements or corporate communications.
|
||||
|
||||
The most common setting is the "Community Account". This creates a group page where all members can freely interact.
|
||||
|
||||
The "Automatic Friend Account" is typically used for personal profile pages where you wish to automatically approve any friendship/connection requests.
|
||||
|
||||
**Managing Multiple Pages**
|
||||
|
||||
We recommend that you create group pages with the same email address and password as your normal account. If you do this, you will find a new "Manage" tab on the menu bar which lets you toggle identities easily and manage your pages. You are not required to do this, but the alternative is to logout and log back into the other account to manage alternate pages - and this could get cumbersome if you manage several different pages/identities.
|
||||
|
||||
|
||||
|
||||
289
doc/Plugins.md
Normal file
|
|
@ -0,0 +1,289 @@
|
|||
**Friendika Addon/Plugin development**
|
||||
|
||||
This is an early specification and hook details may be subject to change.
|
||||
|
||||
Please see the sample addon 'randplace' for a working example of using some of these features. The facebook addon provides an example of integrating both "addon" and "module" functionality. Addons work by intercepting event hooks - which must be registered. Modules work by intercepting specific page requests (by URL path).
|
||||
|
||||
You must register all addons/plugins with the system in the .htconfig.php file.
|
||||
|
||||
$a->config['system']['addon'] = 'plugin1name, plugin2name, another_name';
|
||||
|
||||
Plugin names cannot contain spaces and are used as filenames. Each addon must contain both an install and an uninstall function based on the addon/plugin name. For instance "plugin1name_install()". These two functions take no arguments and are usually responsible for registering (and unregistering) event hooks that your plugin will require. The install and uninstall functions will also be called (i.e. re-installed) if the plugin changes after installation - therefore your uninstall should not destroy data and install should consider that data may already exist. Future extensions may provide for "setup" amd "remove".
|
||||
|
||||
|
||||
|
||||
Register your plugin hooks during installation.
|
||||
|
||||
register_hook($hookname, $file, $function);
|
||||
|
||||
$hookname is a string and corresponds to a known Friendika hook.
|
||||
|
||||
$file is a pathname relative to the top-level Friendika directory. This *should* be 'addon/plugin_name/plugin_name.php' in most cases.
|
||||
|
||||
$function is a string and is the name of the function which will be executed when the hook is called.
|
||||
|
||||
|
||||
Your hook callback functions will be called with at least one and possibly two arguments
|
||||
|
||||
|
||||
function myhook_function(&$a, &$b) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
If you wish to make changes to the calling data, you must declare them as
|
||||
reference variables (with '&') during function declaration.
|
||||
|
||||
$a is the Friendika 'App' class - which contains a wealth of information
|
||||
about the current state of Friendika, such as which module has been called,
|
||||
configuration info, the page contents at the point the hook was invoked, profile
|
||||
and user information, etc. It is recommeded you call this '$a' to match its usage
|
||||
elsewhere.
|
||||
|
||||
$b can be called anything you like. This is information which is specific to the hook
|
||||
currently being processed, and generally contains information that is being immediately
|
||||
processed or acted on that you can use, display, or alter. Remember to declare it with
|
||||
'&' if you wish to alter it.
|
||||
|
||||
**Modules**
|
||||
|
||||
Plugins/addons may also act as "modules" and intercept all page requests for a given URL path. In order for a plugin to act as a module it needs to define a function "plugin_name_module()" which takes no arguments and need not do anything.
|
||||
|
||||
If this function exists, you will now receive all page requests for "http://my.web.site/plugin_name" - with any number of URL components as additional arguments. These are parsed into an array $a->argv, with a corresponding $a->argc indicating the number of URL components. So http://my.web.site/plugin/arg1/arg2 would look for a module named "plugin" and pass its module functions the $a App structure (which is available to many components). This will include:
|
||||
$a->argc = 3
|
||||
$a->argv = array(0 => 'plugin', 1 => 'arg1', 2 => 'arg2');
|
||||
|
||||
Your module functions will often contain the function plugin_name_content(&$a), which defines and returns the page body content. They may also contain plugin_name_post(&$a) which is called before the _content function and typically handles the results of POST forms. You may also have plugin_name_init(&$a) which is called very early on and often does module initialisation.
|
||||
|
||||
|
||||
|
||||
**Current hooks:**
|
||||
|
||||
**'authenticate'** - called when a user attempts to login.
|
||||
$b is an array
|
||||
'username' => the supplied username
|
||||
'password' => the supplied password
|
||||
'authenticated' => set this to non-zero to authenticate the user.
|
||||
'user_record' => successful authentication must also return a valid user record from the database
|
||||
|
||||
**'logged_in'** - called after a user has successfully logged in.
|
||||
$b contains the $a->user array
|
||||
|
||||
|
||||
**'display_item'** - called when formatting a post for display.
|
||||
$b is an array
|
||||
'item' => The item (array) details pulled from the database
|
||||
'output' => the (string) HTML representation of this item prior to adding it to the page
|
||||
|
||||
**'post_local'** - called when a status post or comment is entered on the local system
|
||||
$b is the item array of the information to be stored in the database
|
||||
{Please note: body contents are bbcode - not HTML)
|
||||
|
||||
**'post_local_end'** - called when a local status post or comment has been stored on the local system
|
||||
$b is the item array of the information which has just been stored in the database
|
||||
{Please note: body contents are bbcode - not HTML)
|
||||
|
||||
**'post_remote'** - called when receiving a post from another source. This may also be used to post local activity or system generated messages.
|
||||
$b is the item array of information to be stored in the database and the item
|
||||
body is bbcode.
|
||||
|
||||
**'settings_form'** - called when generating the HTML for the user Settings page
|
||||
$b is the (string) HTML of the settings page before the final '</form>' tag.
|
||||
|
||||
**'settings_post'** - called when the Settings pages are submitted.
|
||||
$b is the $_POST array
|
||||
|
||||
**'plugin_settings'** - called when generating the HTML for the addon settings page
|
||||
$b is the (string) HTML of the addon settings page before the final '</form>' tag.
|
||||
|
||||
**'plugin_settings_post'** - called when the Addon Settings pages are submitted.
|
||||
$b is the $_POST array
|
||||
|
||||
**'profile_post'** - called when posting a profile page.
|
||||
$b is the $_POST array
|
||||
|
||||
**'profile_edit'** - called prior to output of profile edit page
|
||||
$b is array
|
||||
'profile' => profile (array) record from the database
|
||||
'entry' => the (string) HTML of the generated entry
|
||||
|
||||
|
||||
**'profile_advanced'** - called when the HTML is generated for the 'Advanced profile', corresponding to the 'Profile' tab within a person's profile page.
|
||||
$b is the (string) HTML representation of the generated profile
|
||||
(The profile array details are in $a->profile)
|
||||
|
||||
**'directory_item'** - called from the Directory page when formatting an item for display
|
||||
$b is an array
|
||||
'contact' => contact (array) record for the person from the database
|
||||
'entry' => the (string) HTML of the generated entry
|
||||
|
||||
**'profile_sidebar_enter'** - called prior to generating the sidebar "short" profile for a page
|
||||
$b is (array) the person's profile array
|
||||
|
||||
**'profile_sidebar'** - called when generating the sidebar "short" profile for a page
|
||||
$b is an array
|
||||
'profile' => profile (array) record for the person from the database
|
||||
'entry' => the (string) HTML of the generated entry
|
||||
|
||||
**'contact_block_end'** - called when formatting the block of contacts/friends on a profile sidebar has completed
|
||||
$b is an array
|
||||
'contacts' => array of contacts
|
||||
'output' => the (string) generated HTML of the contact block
|
||||
|
||||
**'bbcode'** - called during conversion of bbcode to html
|
||||
$b is (string) converted text
|
||||
|
||||
**'html2bbcode'** - called during conversion of html to bbcode (e.g. remote message posting)
|
||||
$b is (string) converted text
|
||||
|
||||
**'page_header'** - called after building the page navigation section
|
||||
$b is (string) HTML of nav region
|
||||
|
||||
**'personal_xrd'** - called prior to output of personal XRD file.
|
||||
$b is an array
|
||||
'user' => the user record for the person
|
||||
'xml' => the complete XML to be output
|
||||
|
||||
**'home_content'** - called prior to output home page content, shown to unlogged users
|
||||
$b is (string) HTML of section region
|
||||
|
||||
**'contact_edit'** - called when editing contact details on an individual from the Contacts page
|
||||
$b is (array)
|
||||
'contact' => contact record (array) of target contact
|
||||
'output' => the (string) generated HTML of the contact edit page
|
||||
|
||||
**'contact_edit_post'** - called when posting the contact edit page
|
||||
$b is the $_POST array
|
||||
|
||||
**'init_1'** - called just after DB has been opened and before session start
|
||||
$b is not used or passed
|
||||
|
||||
|
||||
**'page_end'** - called after HTML content functions have completed
|
||||
$b is (string) HTML of content div
|
||||
|
||||
|
||||
*** = subject to change
|
||||
|
||||
Not yet documented (you may view these within the source code):
|
||||
|
||||
**'atom_feed'** ***
|
||||
|
||||
**'atom_feed_end'** ***
|
||||
|
||||
**'parse_atom'** ***
|
||||
|
||||
**'atom_author'** ***
|
||||
|
||||
**'atom_entry'** ***
|
||||
|
||||
A complete list of all hook callbacks with file locations (generated 22-Feb-2011): Please see the source for details of any hooks not documented above.
|
||||
|
||||
boot.php: call_hooks('contact_block_end', $arr);
|
||||
|
||||
boot.php: call_hooks('profile_sidebar_enter', $profile);
|
||||
|
||||
boot.php: call_hooks('profile_sidebar', $arr);
|
||||
|
||||
boot.php: call_hooks("proc_run", $args);
|
||||
|
||||
include/nav.php: call_hooks('page_header', $a->page['nav']);
|
||||
|
||||
include/auth.php: call_hooks('authenticate', $addon_auth);
|
||||
|
||||
include/auth.php: call_hooks('logged_in', $a->user);
|
||||
|
||||
include/bbcode.php: call_hooks('bbcode',$Text);
|
||||
|
||||
include/acl_selectors.php: call_hooks($a->module . '_pre_' . $selname, $arr);
|
||||
|
||||
include/acl_selectors.php: call_hooks($a->module . '_post_' . $selname, $o);
|
||||
|
||||
include/acl_selectors.php: call_hooks($a->module . '_pre_' . $selname, $arr);
|
||||
|
||||
include/acl_selectors.php: call_hooks($a->module . '_post_' . $selname, $o);
|
||||
|
||||
include/items.php: call_hooks('atom_feed', $atom);
|
||||
|
||||
include/items.php: call_hooks('atom_feed_end', $atom);
|
||||
|
||||
include/items.php: call_hooks('atom_feed_end', $atom);
|
||||
|
||||
include/items.php: call_hooks('parse_atom', $arr);
|
||||
|
||||
include/items.php: call_hooks('post_remote',$arr);
|
||||
|
||||
include/items.php: call_hooks('atom_author', $o);
|
||||
|
||||
include/items.php: call_hooks('atom_entry', $o);
|
||||
|
||||
include/html2bbcode.php: call_hooks('html2bbcode', $text);
|
||||
|
||||
index.php: call_hooks('init_1');
|
||||
|
||||
index.php:call_hooks('app_menu', $arr);
|
||||
|
||||
index.php:call_hooks('page_end', $a->page['content']);
|
||||
|
||||
mod/photos.php: call_hooks('photo_post_init', $_POST);
|
||||
|
||||
mod/photos.php: call_hooks('photo_post_file',$ret);
|
||||
|
||||
mod/photos.php: call_hooks('photo_post_end',intval($item_id));
|
||||
|
||||
mod/photos.php: call_hooks('photo_upload_form',$ret);
|
||||
|
||||
mod/parse_url.php: call_hooks('parse_link', $arr);
|
||||
|
||||
mod/home.php: call_hooks("home_content",$o);
|
||||
|
||||
mod/contacts.php: call_hooks('contact_edit_post', $_POST);
|
||||
|
||||
mod/contacts.php: call_hooks('contact_edit', $arr);
|
||||
|
||||
mod/settings.php: call_hooks('plugin_settings_post', $_POST);
|
||||
|
||||
mod/settings.php: call_hooks('settings_post', $_POST);
|
||||
|
||||
mod/settings.php: call_hooks('plugin_settings', $o);
|
||||
|
||||
mod/settings.php: call_hooks('settings_form',$o);
|
||||
|
||||
mod/network.php: call_hooks('jot_tool', $jotplugins);
|
||||
|
||||
mod/network.php: call_hooks('jot_networks', $jotnets);
|
||||
|
||||
mod/network.php: call_hooks('display_item', $arr);
|
||||
|
||||
mod/xrd.php: call_hooks('personal_xrd', $arr);
|
||||
|
||||
mod/item.php: call_hooks('post_local_start', $_POST);
|
||||
|
||||
mod/item.php: call_hooks('post_local',$datarray);
|
||||
|
||||
mod/item.php: call_hooks('post_local_end', $datarray);
|
||||
|
||||
mod/profile.php: call_hooks('profile_advanced',$o);
|
||||
|
||||
mod/profile.php: call_hooks('jot_tool', $jotplugins);
|
||||
|
||||
mod/profile.php: call_hooks('jot_networks', $jotnets);
|
||||
|
||||
mod/profile.php: call_hooks('display_item', $arr);
|
||||
|
||||
mod/display.php: call_hooks('display_item', $arr);
|
||||
|
||||
mod/profiles.php: call_hooks('profile_post', $_POST);
|
||||
|
||||
mod/profiles.php: call_hooks('profile_edit', $arr);
|
||||
|
||||
mod/cb.php: call_hooks('cb_init');
|
||||
|
||||
mod/cb.php: call_hooks('cb_post', $_POST);
|
||||
|
||||
mod/cb.php: call_hooks('cb_afterpost');
|
||||
|
||||
mod/cb.php: call_hooks('cb_content', $o);
|
||||
|
||||
mod/directory.php: call_hooks('directory_item', $arr);
|
||||
51
doc/Profiles.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
Profiles
|
||||
========
|
||||
|
||||
* [Home](help)
|
||||
|
||||
Friendika has unlimited profiles. You may use different profiles to show different "sides of yourself" to different audiences.
|
||||
|
||||
You always have a profile known as your "default" or "public" profile. This profile is always available to the general public and cannot be hidden (there may be rare exceptions on privately run or disconnected sites). You may, and probably should restrict the information you make available on your public profile.
|
||||
|
||||
That said, if you want other friends to be able to find you, it helps to have the following information in your public profile...
|
||||
|
||||
* Your real name
|
||||
* A photo of **you**
|
||||
* Your location on the planet, at least to a country level.
|
||||
|
||||
Without this basic information, you could get very lonely here. Most people (even your best friends) will not try and connect with somebody that has a fake name or doesn't contain a real photo.
|
||||
|
||||
In addition, if you'd like to meet people that share some general interests with you, please take a moment and add some "Public Keywords" to your profile. Such as "music, linux, photography" or whatever. You can add as many keywords as you like.
|
||||
|
||||
|
||||
Your default or public profile is also shown to contacts on other networks, since they do not have the ability to view your private profiles. Only members of the Friendika network can see alternate/private profiles.
|
||||
|
||||
|
||||
To create an alternate profile, select "Profiles" from the menu of your Friendika site. You may edit an existing profile, change the profile photo, or create a new profile. You may also create a "clone" of an existing profile if you only wish to change a few items but don't wish to enter all the information again.
|
||||
|
||||
To assign a profile to specific persons, select the person from your "Contacts" page and click the pencil "Edit" icon. You will find a dropdown box listing the various profiles available. If this box is not selectable, the person is not in a supported network and cannot be assigned a specific profile.
|
||||
|
||||
Once a profile has been selected, when the person views your profile from one of the "magic profile links" on their site, they will see the private profile you have assigned. If they are not logged into their site or view your profile from elsewhere, they will see your public profile.
|
||||
|
||||
A magic profile link is indicated by a special cursor when hovering over a contact's name or photo. Currently this cursor is a hand next to a small padlock. These magic cursors indicate that by following the link, you are able to access special areas of the other person's pages which are only available to friends and may not be available to the general public.
|
||||
|
||||
You may also discover that (assuming you have the proper permissions) you may be able to post directly on the other person's profile (often called a "wall-to-wall" post). You may also be able to comment directly on posts from while visiting the other person's profile page.
|
||||
|
||||
There are two settings which allow you to publish your profile to a directory and ensure that it can be found by others. You can change these through settings on the "Settings" page. One setting allows you to publish your profile in the site directory of this Friendika server. Another option (this may have been disabled by the site creator) allows you to publish your profile in the "Global Directory". This is a mega directory which contains people from many other Friendika installations world-wide.
|
||||
|
||||
If you do not wish to be visible to any of these sites, you may leave your profile unpublished.
|
||||
|
||||
Although you may have multiple profiles, you only have one profile photo. This is intentional. In early tests we experimented with different photos for each profile and found it was very confusing for people. They might see a different picture depending on what website they visited or what conversation they were in, and often alerted them to the fact that other people might be able to see different profiles of you than they could see.
|
||||
|
||||
(But you can use the rich-text information boxes within a profile such as "Tell us about yourself" and link other photos onto the page.)
|
||||
|
||||
**Keywords and Directory Search**
|
||||
|
||||
On the site Directory page, you may search for people with published profiles who are on this site. The search is typically for your nickname or part of your full name. However this search will also match against other profile fields - such as gender, location, "about", work, and education. You may also include "Keywords" in your default profile - which may be used to search for common interests with other members. You have two sets of keywords available - public and private. Private keywords are *not* visible to anybody. You could use these keywords to locate people who share membership in secret societies, or that share a love of fishing (for example) - without making this information visible on your public profile. Public keywords are used in the friend suggestion tool and although they aren't readily visible, they may be seen by viewing the HTML of your profile page.
|
||||
|
||||
Directory searches are also able to use "boolean" logic so that you can search for "+lesbian +Florida" and find those who's sexual preference (or keywords) contain the world "lesbian" and that live in Florida. See the section on "Topical Tags" on the [[Tags-and-Mentions]] page for more information on performing boolean searches.
|
||||
|
||||
On your Contacts page is a link to "Find People with Shared Interests" (unless your site administrator has disabled the global directory). This will combine both your public and private keywords, and find people in the global directory who have matching and/or similar keywords. (Your private keywords are not identified or stored on the global directory). The more keywords you provide, the more relevant the search results that are returned. These are sorted by relevance. You may discover that you are the first person on the list - because you are very likely the most relevant match for your keywords in the directory.
|
||||
|
||||
|
||||
|
||||
13
doc/Remove-Account.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Remove Account
|
||||
==============
|
||||
|
||||
* [Home](help)
|
||||
|
||||
We don't like to see people leave Friendika, but if you need to remove your account, you should visit the URL
|
||||
|
||||
http://friendika-site/removeme
|
||||
|
||||
with your web browser. You will need to be logged in at the time. (Replace "friendika-site" with the hostname of your Friendika server)
|
||||
|
||||
You will be asked for your password to confirm the request. If this matches your stored password, your account will immediately be removed. Unlike some social networks we do **not** hold onto it for a grace period in case you change your mind. Your user details, your conversations, your photos, your friends - everything; will be removed immediately and you will be logged out.
|
||||
|
||||
237
doc/Settings.md
Normal file
|
|
@ -0,0 +1,237 @@
|
|||
Here are some of the built-in features which don't have an exposed interface or are otherwise undocumented. Configuration settings are stored in the file ".htconfig.php". Edit this file with a text editor to make the desired changes. Several system settings are already documented in that file and will not be covered here.
|
||||
|
||||
**Hot Keys**
|
||||
|
||||
Friendika traps the following keyboard events:
|
||||
|
||||
* [Pause] - Pauses "Ajax" update activity. This is the process that provides updates without reloading the page. You may wish to pause it to reduce network usage and/or as a debugging aid for javascript developers. A pause indicator will appear at the lower right hand corner of the page. Hit the [pause] key once again to resume.
|
||||
|
||||
* [F8] - Displays a language selector
|
||||
|
||||
|
||||
**Birthday Notifications**
|
||||
|
||||
Birthday events are published on your Home page for any friends having a birthday in the coming 6 days. In order for your birthday to be discoverable by all of your friends, you must set your birthday (at least the month and day) in your default profile. You are not required to provide the year.
|
||||
|
||||
**Configuration settings**
|
||||
|
||||
|
||||
**Language**
|
||||
|
||||
System Setting
|
||||
|
||||
Please see util/README for information on creating language translations.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['language'] = 'name';
|
||||
```
|
||||
|
||||
|
||||
**System Theme**
|
||||
|
||||
System Setting
|
||||
|
||||
Choose a named theme to be the default system theme (which may be over-ridden by user profiles). Default theme is "default".
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['theme'] = 'theme-name';
|
||||
```
|
||||
|
||||
|
||||
**Verify SSL Certitificates**
|
||||
|
||||
Security setting
|
||||
|
||||
By default Friendika allows SSL communication between websites that have "self-signed" SSL certificates. For the widest compatibility with browsers and other networks we do not recommend using self-signed certificates, but we will not prevent you from using them. SSL encrypts all the data transmitted between sites (and to your browser) and this allows you to have completely encrypted communications, and also protect your login session from hijacking. Self-signed certificates can be generated for free, without paying top-dollar for a website SSL certificate - however these aren't looked upon favourably in the security community because they can be subject to so-called "man-in-the-middle" attacks. If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['verifyssl'] = true;
|
||||
```
|
||||
|
||||
|
||||
**Allowed Friend Domains**
|
||||
|
||||
Corporate/Edu enhancement
|
||||
|
||||
Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. (Wildcard support on Windows platforms requires PHP5.3). By default, any (valid) domain may establish friendships with this site.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['allowed_sites'] = "sitea.com, *siteb.com";
|
||||
```
|
||||
|
||||
|
||||
**Allowed Email Domains**
|
||||
|
||||
Corporate/Edu enhancement
|
||||
|
||||
Comma separated list of domains which are allowed in email addresses for registrations to this site. This can lockout those who are not part of this organisation from registering here. Wildcards are accepted. (Wildcard support on Windows platforms requires PHP5.3). By default, any (valid) email address is allowed in registrations.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['allowed_email'] = "sitea.com, *siteb.com";
|
||||
```
|
||||
|
||||
**Block Public**
|
||||
|
||||
Corporate/Edu enhancement
|
||||
|
||||
Set to true to block public access to all otherwise public personal pages on this site unless you are currently logged in. This blocks the viewing of profiles, friends, photos, the site directory and search pages to unauthorised persons. A side effect is that entries from this site will not appear in the global directory. We recommend specifically disabling that also (setting is described elsewhere on this page). Note: this is specifically for sites that desire to be "standalone" and do not wish to be connected to any other Friendika sites. Unauthorised persons will also not be able to request friendship with site members. Default is false. Available in version 2.2 or greater.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['block_public'] = true;
|
||||
```
|
||||
|
||||
|
||||
**Force Publish**
|
||||
|
||||
Corporate/Edu enhancement
|
||||
|
||||
By default, each user can choose on their Settings page whether or not to have their profile published in the site directory. This setting forces all
|
||||
profiles on this site to be listed in the site directory and there is no option provided to the user to change it. Default is false.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['publish_all'] = true;
|
||||
```
|
||||
|
||||
|
||||
**Global Directory**
|
||||
|
||||
Corporate/Edu enhancement
|
||||
|
||||
This configures the URL to update the global directory, and is supplied in the default configuration. The undocumented part is that if this is not set, the global directory is completely unavailable to the application. This allows a private community to be completely isolated from the global mistpark network.
|
||||
|
||||
```
|
||||
$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
|
||||
```
|
||||
|
||||
|
||||
**Proxy Configuration Settings**
|
||||
|
||||
If your site uses a proxy to connect to the internet, you may use these settings to communicate with the outside world (the outside world still needs to be able to see your website, or this will not be very useful).
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['proxy'] = "http://proxyserver.domain:port";
|
||||
$a->config['system']['proxyuser'] = "username:password";
|
||||
```
|
||||
|
||||
|
||||
**Network Timeout**
|
||||
|
||||
How long to wait on a network communication before timing out. Value is in seconds. Default is 60 seconds. Set to 0 for unlimited (not recommended).
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['curl_timeout'] = 60;
|
||||
```
|
||||
|
||||
|
||||
**Banner/Logo**
|
||||
|
||||
Set the content for the site banner. Default is the Friendika logo and name. You may wish to provide HTML/CSS to style and/or position this content, as it may not be themed by default.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['banner'] = '<span id="logo-text">My Great Website</span>';
|
||||
```
|
||||
|
||||
|
||||
**Maximum Image Size**
|
||||
|
||||
Maximum size in bytes of uploaded images. Default is 0, which means no limits.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['maximagesize'] = 1000000;
|
||||
```
|
||||
|
||||
|
||||
**UTF-8 Regular Expressions**
|
||||
|
||||
During registrations, full names are checked using UTF-8 regular expressions. This requires PHP to have been compiled with a special setting to allow UTF-8 expressions. If you are completely unable to register accounts, set no_utf to true. Default is false (meaning UTF8 regular expressions are supported and working).
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['no_utf'] = true;
|
||||
```
|
||||
|
||||
|
||||
**Check Full Names**
|
||||
|
||||
You may find a lot of spammers trying to register on your site. During testing we discovered that since these registrations were automatic, the "Full Name" field was often set to just an account name with no space between first and last name. If you would like to support people with only one name as their full name, you may change this setting to true. Default is false.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['no_regfullname'] = true;
|
||||
```
|
||||
|
||||
|
||||
**Gravatars**
|
||||
|
||||
During registration, we will try to automatically find a user photo for you on the web using the gravatar service. You may turn this off by setting 'no_gravatar' to true. Default is false.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['no_gravatar'] = true;
|
||||
```
|
||||
|
||||
|
||||
**OpenID**
|
||||
|
||||
By default, OpenID may be used for both registration and logins. If you do not wish to make OpenID facilities available on your system (at all), set 'no_openid' to true. Default is false.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['no_openid'] = true;
|
||||
```
|
||||
|
||||
|
||||
**Multiple Registrations**
|
||||
|
||||
The ability to create "Pages" requires a person to register more than once. Your site configuration can block registration (or require approval to register). By default logged in users can register additional accounts for use as pages. These will still require approval if REGISTER_APPROVE is selected. You may prohibit logged in users from creating additional accounts by setting 'block_extended_register' to true. Default is false.
|
||||
|
||||
Config:
|
||||
```
|
||||
$a->config['system']['block_extended_register'] = true;
|
||||
```
|
||||
|
||||
|
||||
**Developer Settings**
|
||||
|
||||
Most useful when debugging protocol exchanges and tracking down other communications issues.
|
||||
|
||||
Config:
|
||||
|
||||
```
|
||||
$a->config['system']['debugging'] = true;
|
||||
$a->config['system']['logfile'] = 'logfile.out';
|
||||
$a->config['system']['loglevel'] = LOGGER_DEBUG;
|
||||
```
|
||||
Turns on detailed debugging logs which will be stored in 'logfile.out' (which must be writeable by the webserver). LOGGER_DEBUG will show a good deal of information about system activity but will not include detailed data. You may also select LOGGER_ALL but due to the volume of information we recommend only enabling this when you are tracking down a specific problem. Other log levels are possible but are not being used at the present time.
|
||||
|
||||
|
||||
**PHP error logging**
|
||||
|
||||
Use the following settings to redirect PHP errors to a file.
|
||||
|
||||
Config:
|
||||
|
||||
```
|
||||
error_reporting(E_ERROR | E_WARNING | E_PARSE );
|
||||
ini_set('error_log','php.out');
|
||||
ini_set('log_errors','1');
|
||||
ini_set('display_errors', '0');
|
||||
```
|
||||
|
||||
This will put all PHP errors in the file php.out (which must be writeable by the webserver). Undeclared variables are occasionally referenced in the program and therefore we do not recommend using E_NOTICE or E_ALL. The vast majority of issues reported at these levels are completely harmless. Please report to the developers any errors you encounter in the logs using the recommended settings above. They generally indicate issues which need to be resolved.
|
||||
|
||||
If you encounter a blank (white) page when using the application, view the PHP logs - as this almost always indicates an error has occurred.
|
||||
|
||||
|
||||
|
||||
7
doc/Sites-running-Friendika-you-can-join.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
Here is a list of Friendika installations free for everybody to join:
|
||||
|
||||
* [friendika.com](http://demo.friendika.com)
|
||||
* [friendika.net](http://www.friendika.net)
|
||||
* [aphasi.cc](https://friendika.aphasi.cc)
|
||||
* [openmindspace.org](http://friendika.openmindspace.org)
|
||||
* [dfrn.net](http://dfrn.net/)
|
||||
37
doc/Tags-and-Mentions.md
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
Tags and Mentions
|
||||
=================
|
||||
|
||||
|
||||
* [Home](help)
|
||||
|
||||
|
||||
Like many other modern social networks, Friendika uses a special notation inside messages to indicate "tags" or contextual links to other entities.
|
||||
|
||||
**Mentions**
|
||||
|
||||
People are tagged by preceding their name with the @ character.
|
||||
|
||||
The following are various ways of indicating a person:
|
||||
|
||||
* @mike - indicates a known contact in your social circle whose nickname is "mike"
|
||||
* @mike_macgirvin - indicates a known contact in your social circle whose full name is "Mike Macgirvin". Note that spaces cannot be used inside tags.
|
||||
* @mike@macgirvin.com - indicates the Identity Address of a person on a different network, or one that is *not* in your social circle. This can only be an email-style locator, not a web URL.
|
||||
|
||||
Unless their system blocks unsolicited "mentions", the person tagged will likely receive a "Mention" post/activity or become a direct participant in the conversation in the case of public posts. Please note that Friendika often blocks incoming "mentions" from other networks and especially from people with no relationship to you. This is a spam prevention measure.
|
||||
|
||||
Friendika makes no distinction between people and groups for the purpose of tagging. (Some other networks use !group to indicate a group.)
|
||||
|
||||
**Topical Tags**
|
||||
|
||||
Topical tags are indicated by preceding the tag name with the # character. This will create a link in the post to a generalised site search for the term provided. For example, #cars will provide a search link for all posts mentioning 'cars' on your site. Topical tags are generally a minimum of three characters in length. Shorter search terms are not likely to yield any search results, although this depends on the database configuration. The same rules apply as with names that spaces within tags are represented by the underscore character. It is therefore not possible to create a tag whose target contains an underscore.
|
||||
|
||||
Tag searches may also use "boolean" logic.
|
||||
|
||||
* \#bike - creates a search for "bike"
|
||||
* \#bike_red - creates a search for posts that contain either the word "bike" OR the word "red".
|
||||
* \#+bike_+red - creates a search for posts that contain both the word "bike" AND the word "red"
|
||||
* \#+bike_-blue - creates a search for posts that contain the word "bike" but do *not* contain the word "blue"
|
||||
|
||||
|
||||
|
||||
|
||||
18
doc/developer
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
Friendika Developer Guide
|
||||
|
||||
Here is how you can join us.
|
||||
|
||||
First, get yourself a working git package on the system where you will be
|
||||
doing development.
|
||||
|
||||
Create your own github account.
|
||||
|
||||
Follow the instructions provided here: [[http://help.github.com/fork-a-repo/]]
|
||||
to create and use your own tracking fork on github
|
||||
|
||||
Then go to your github page and create a "Pull request" when you are ready
|
||||
to notify us to merge your work.
|
||||
|
||||
**Important**
|
||||
|
||||
Please pull in any changes from the project repository and merge them with your work **before** issuing a pull request. We reserve the right to reject any patch which results in a large number of merge conflicts. This is especially true in the case of language translations - where we may not be able to understand the subtle differences between conflicting versions.
|
||||
|
|
@ -38,7 +38,7 @@ $a->config['admin_email'] = '';
|
|||
|
||||
// Maximum size of an imported message, 0 is unlimited
|
||||
|
||||
$a->config['max_import_size'] = 10000;
|
||||
$a->config['max_import_size'] = 200000;
|
||||
|
||||
// maximum size of uploaded photos
|
||||
|
||||
|
|
|
|||
BIN
images/article.gif
Normal file
|
After Width: | Height: | Size: 1 KiB |
BIN
images/audio.gif
Normal file
|
After Width: | Height: | Size: 559 B |
BIN
images/friendika-1600.png
Normal file
|
After Width: | Height: | Size: 280 KiB |
BIN
images/icons.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
images/pencil.gif
Normal file
|
After Width: | Height: | Size: 553 B |
BIN
images/recycle.gif
Normal file
|
After Width: | Height: | Size: 612 B |
|
Before Width: | Height: | Size: 357 B After Width: | Height: | Size: 237 B |
BIN
images/share.gif
Normal file
|
After Width: | Height: | Size: 155 B |
BIN
images/spencil.gif
Normal file
|
After Width: | Height: | Size: 497 B |
BIN
images/tools.png
Normal file
|
After Width: | Height: | Size: 490 B |
BIN
images/video.gif
Normal file
|
After Width: | Height: | Size: 257 B |
|
|
@ -14,11 +14,13 @@ function user_remove($uid) {
|
|||
q("DELETE FROM `group` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `group_member` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `intro` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `event` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `item` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `mail` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `photo` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `profile` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `profile_check` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `pconfig` WHERE `uid` = %d", intval($uid));
|
||||
q("DELETE FROM `user` WHERE `uid` = %d", intval($uid));
|
||||
if($uid == local_user()) {
|
||||
unset($_SESSION['authenticated']);
|
||||
|
|
@ -41,6 +43,9 @@ function contact_remove($id) {
|
|||
q("DELETE FROM `mail` WHERE `contact-id` = %d ",
|
||||
intval($id)
|
||||
);
|
||||
q("DELETE FROM `event` WHERE `cid` = %d ",
|
||||
intval($id)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -162,12 +162,20 @@ class Photo {
|
|||
}
|
||||
|
||||
public function saveImage($path) {
|
||||
imagejpeg($this->image,$path,100);
|
||||
$quality = get_config('system','jpeg_quality');
|
||||
if((! $quality) || ($quality > 100))
|
||||
$quality = JPEG_QUALITY;
|
||||
imagejpeg($this->image,$path,$quality);
|
||||
}
|
||||
|
||||
public function imageString() {
|
||||
ob_start();
|
||||
imagejpeg($this->image,NULL,100);
|
||||
|
||||
$quality = get_config('system','jpeg_quality');
|
||||
if((! $quality) || ($quality > 100))
|
||||
$quality = JPEG_QUALITY;
|
||||
|
||||
imagejpeg($this->image,NULL,$quality);
|
||||
$s = ob_get_contents();
|
||||
ob_end_clean();
|
||||
return $s;
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ function scrape_feed($url) {
|
|||
}
|
||||
if(stristr($line,'application/rss+xml') || stristr($s,'<rss')) {
|
||||
$ret['feed_rss'] = $url;
|
||||
return ret;
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -227,17 +227,287 @@ function scrape_feed($url) {
|
|||
if(! $dom)
|
||||
return $ret;
|
||||
|
||||
$items = $dom->getElementsByTagName('link');
|
||||
|
||||
// get Atom link elements
|
||||
$items = $dom->getElementsByTagName('img');
|
||||
|
||||
foreach($items as $item) {
|
||||
$x = $item->getAttribute('rel');
|
||||
if(($x === 'alternate') && ($item->getAttribute('type') === 'application/atom+xml'))
|
||||
$ret['feed_atom'] = $item->getAttribute('href');
|
||||
if(($x === 'alternate') && ($item->getAttribute('type') === 'application/rss+xml'))
|
||||
$ret['feed_rss'] = $item->getAttribute('href');
|
||||
// get img elements (twitter)
|
||||
|
||||
if($items) {
|
||||
foreach($items as $item) {
|
||||
$x = $item->getAttribute('id');
|
||||
if($x === 'profile-image') {
|
||||
$ret['photo'] = $item->getAttribute('src');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$head = $dom->getElementsByTagName('base');
|
||||
if($head) {
|
||||
foreach($head as $head0) {
|
||||
$basename = $head0->getAttribute('href');
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(! $basename)
|
||||
$basename = substr($url,0,strrpos($url,'/')) . '/';
|
||||
|
||||
$items = $dom->getElementsByTagName('link');
|
||||
|
||||
// get Atom/RSS link elements, take the first one of either.
|
||||
|
||||
if($items) {
|
||||
foreach($items as $item) {
|
||||
$x = $item->getAttribute('rel');
|
||||
if(($x === 'alternate') && ($item->getAttribute('type') === 'application/atom+xml')) {
|
||||
if(! x($ret,'feed_atom'))
|
||||
$ret['feed_atom'] = $item->getAttribute('href');
|
||||
}
|
||||
if(($x === 'alternate') && ($item->getAttribute('type') === 'application/rss+xml')) {
|
||||
if(! x($ret,'feed_rss'))
|
||||
$ret['feed_rss'] = $item->getAttribute('href');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Drupal and perhaps others only provide relative URL's. Turn them into absolute.
|
||||
|
||||
if(x($ret,'feed_atom') && (! strstr($ret['feed_atom'],'://')))
|
||||
$ret['feed_atom'] = $basename . $ret['feed_atom'];
|
||||
if(x($ret,'feed_rss') && (! strstr($ret['feed_rss'],'://')))
|
||||
$ret['feed_rss'] = $basename . $ret['feed_rss'];
|
||||
|
||||
return $ret;
|
||||
}}
|
||||
}}
|
||||
|
||||
|
||||
function probe_url($url) {
|
||||
require_once('include/email.php');
|
||||
|
||||
$result = array();
|
||||
|
||||
if(! $url)
|
||||
return $result;
|
||||
|
||||
$diaspora = false;
|
||||
$email_conversant = false;
|
||||
|
||||
if($url) {
|
||||
$links = lrdd($url);
|
||||
|
||||
if(count($links)) {
|
||||
logger('probe_url: found lrdd links: ' . print_r($links,true), LOGGER_DATA);
|
||||
foreach($links as $link) {
|
||||
if($link['@attributes']['rel'] === NAMESPACE_DFRN)
|
||||
$dfrn = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === 'salmon')
|
||||
$notify = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === NAMESPACE_FEED)
|
||||
$poll = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard')
|
||||
$hcard = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page')
|
||||
$profile = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === 'http://joindiaspora.com/seed_location')
|
||||
$diaspora = true;
|
||||
}
|
||||
|
||||
// Status.Net can have more than one profile URL. We need to match the profile URL
|
||||
// to a contact on incoming messages to prevent spam, and we won't know which one
|
||||
// to match. So in case of two, one of them is stored as an alias. Only store URL's
|
||||
// and not webfinger user@host aliases. If they've got more than two non-email style
|
||||
// aliases, let's hope we're lucky and get one that matches the feed author-uri because
|
||||
// otherwise we're screwed.
|
||||
|
||||
foreach($links as $link) {
|
||||
if($link['@attributes']['rel'] === 'alias') {
|
||||
if(strpos($link['@attributes']['href'],'@') === false) {
|
||||
if(isset($profile)) {
|
||||
if($link['@attributes']['href'] !== $profile)
|
||||
$alias = unamp($link['@attributes']['href']);
|
||||
}
|
||||
else
|
||||
$profile = unamp($link['@attributes']['href']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
// Check email
|
||||
|
||||
$orig_url = $url;
|
||||
if((strpos($orig_url,'@')) && validate_email($orig_url)) {
|
||||
$x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
intval(local_user())
|
||||
);
|
||||
$r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1",
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($x) && count($r)) {
|
||||
$mailbox = construct_mailbox_name($r[0]);
|
||||
$password = '';
|
||||
openssl_private_decrypt(hex2bin($r[0]['pass']),$password,$x[0]['prvkey']);
|
||||
$mbox = email_connect($mailbox,$r[0]['user'],$password);
|
||||
unset($password);
|
||||
}
|
||||
if($mbox) {
|
||||
$msgs = email_poll($mbox,$orig_url);
|
||||
if(count($msgs)) {
|
||||
$addr = $orig_url;
|
||||
$network = NETWORK_MAIL;
|
||||
$name = substr($url,0,strpos($url,'@'));
|
||||
$profile = 'http://' . substr($url,strpos($url,'@')+1);
|
||||
// fix nick character range
|
||||
$vcard = array('fn' => $name, 'nick' => $name, 'photo' => gravatar_img($url));
|
||||
$notify = 'smtp ' . random_string();
|
||||
$poll = 'email ' . random_string();
|
||||
$priority = 0;
|
||||
$x = email_msg_meta($mbox,$msgs[0]);
|
||||
if(stristr($x->from,$orig_url))
|
||||
$adr = imap_rfc822_parse_adrlist($x->from,'');
|
||||
elseif(stristr($x->to,$orig_url))
|
||||
$adr = imap_rfc822_parse_adrlist($x->to,'');
|
||||
if(isset($adr) && strlen($adr[0]->personal))
|
||||
$vcard['fn'] = notags($adr[0]->personal);
|
||||
}
|
||||
imap_close($mbox);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(strlen($dfrn)) {
|
||||
$ret = scrape_dfrn($dfrn);
|
||||
if(is_array($ret) && x($ret,'dfrn-request')) {
|
||||
$network = NETWORK_DFRN;
|
||||
$request = $ret['dfrn-request'];
|
||||
$confirm = $ret['dfrn-confirm'];
|
||||
$notify = $ret['dfrn-notify'];
|
||||
$poll = $ret['dfrn-poll'];
|
||||
}
|
||||
}
|
||||
|
||||
if($network !== NETWORK_DFRN && $network !== NETWORK_MAIL) {
|
||||
$network = NETWORK_OSTATUS;
|
||||
$priority = 0;
|
||||
|
||||
if($hcard) {
|
||||
$vcard = scrape_vcard($hcard);
|
||||
|
||||
// Google doesn't use absolute url in profile photos
|
||||
|
||||
if((x($vcard,'photo')) && substr($vcard['photo'],0,1) == '/') {
|
||||
$h = @parse_url($hcard);
|
||||
if($h)
|
||||
$vcard['photo'] = $h['scheme'] . '://' . $h['host'] . $vcard['photo'];
|
||||
}
|
||||
|
||||
logger('probe_url: scrape_vcard: ' . print_r($vcard,true), LOGGER_DATA);
|
||||
}
|
||||
|
||||
if(! $profile) {
|
||||
if($diaspora)
|
||||
$profile = $hcard;
|
||||
else
|
||||
$profile = $url;
|
||||
}
|
||||
|
||||
if(! x($vcard,'fn'))
|
||||
if(x($vcard,'nick'))
|
||||
$vcard['fn'] = $vcard['nick'];
|
||||
|
||||
if((! isset($vcard)) && (! $poll)) {
|
||||
|
||||
$ret = scrape_feed($url);
|
||||
logger('probe_url: scrape_feed returns: ' . print_r($ret,true), LOGGER_DATA);
|
||||
if(count($ret) && ($ret['feed_atom'] || $ret['feed_rss'])) {
|
||||
$poll = ((x($ret,'feed_atom')) ? unamp($ret['feed_atom']) : unamp($ret['feed_rss']));
|
||||
$vcard = array();
|
||||
if(x($ret,'photo'))
|
||||
$vcard['photo'] = $ret['photo'];
|
||||
require_once('simplepie/simplepie.inc');
|
||||
$feed = new SimplePie();
|
||||
$xml = fetch_url($poll);
|
||||
|
||||
$feed->set_raw_data($xml);
|
||||
|
||||
$feed->init();
|
||||
|
||||
if(! x($vcard,'photo'))
|
||||
$vcard['photo'] = $feed->get_image_url();
|
||||
$author = $feed->get_author();
|
||||
if($author) {
|
||||
$vcard['fn'] = unxmlify(trim($author->get_name()));
|
||||
if(! $vcard['fn'])
|
||||
$vcard['fn'] = trim(unxmlify($author->get_email()));
|
||||
if(strpos($vcard['fn'],'@') !== false)
|
||||
$vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
|
||||
$vcard['nick'] = strtolower(notags(unxmlify($vcard['fn'])));
|
||||
if(strpos($vcard['nick'],' '))
|
||||
$vcard['nick'] = trim(substr($vcard['nick'],0,strpos($vcard['nick'],' ')));
|
||||
$email = unxmlify($author->get_email());
|
||||
}
|
||||
else {
|
||||
$item = $feed->get_item(0);
|
||||
if($item) {
|
||||
$author = $item->get_author();
|
||||
if($author) {
|
||||
$vcard['fn'] = trim(unxmlify($author->get_name()));
|
||||
if(! $vcard['fn'])
|
||||
$vcard['fn'] = trim(unxmlify($author->get_email()));
|
||||
if(strpos($vcard['fn'],'@') !== false)
|
||||
$vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
|
||||
$vcard['nick'] = strtolower(unxmlify($vcard['fn']));
|
||||
if(strpos($vcard['nick'],' '))
|
||||
$vcard['nick'] = trim(substr($vcard['nick'],0,strpos($vcard['nick'],' ')));
|
||||
$email = unxmlify($author->get_email());
|
||||
}
|
||||
if(! $vcard['photo']) {
|
||||
$rawmedia = $item->get_item_tags('http://search.yahoo.com/mrss/','thumbnail');
|
||||
if($rawmedia && $rawmedia[0]['attribs']['']['url'])
|
||||
$vcard['photo'] = unxmlify($rawmedia[0]['attribs']['']['url']);
|
||||
}
|
||||
}
|
||||
}
|
||||
if((! $vcard['photo']) && strlen($email))
|
||||
$vcard['photo'] = gravatar_img($email);
|
||||
if($poll === $profile)
|
||||
$lnk = $feed->get_permalink();
|
||||
if(isset($lnk) && strlen($lnk))
|
||||
$profile = $lnk;
|
||||
if(! (x($vcard,'fn')))
|
||||
$vcard['fn'] = notags($feed->get_title());
|
||||
if(! (x($vcard,'fn')))
|
||||
$vcard['fn'] = notags($feed->get_description());
|
||||
$network = 'feed';
|
||||
$priority = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(! x($vcard,'photo')) {
|
||||
$a = get_app();
|
||||
$vcard['photo'] = $a->get_baseurl() . '/images/default-profile.jpg' ;
|
||||
}
|
||||
$vcard['fn'] = notags($vcard['fn']);
|
||||
$vcard['nick'] = notags($vcard['nick']);
|
||||
|
||||
|
||||
$result['name'] = $vcard['fn'];
|
||||
$result['nick'] = $vcard['nick'];
|
||||
$result['url'] = $profile;
|
||||
$result['addr'] = $addr;
|
||||
$result['notify'] = $notify;
|
||||
$result['poll'] = $poll;
|
||||
$result['request'] = $request;
|
||||
$result['confirm'] = $confirm;
|
||||
$result['photo'] = $vcard['photo'];
|
||||
$result['priority'] = $priority;
|
||||
$result['network'] = $network;
|
||||
$result['alias'] = $alias;
|
||||
|
||||
logger('probe_url: ' . print_r($result,true), LOGGER_DEBUG);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
|
|||
|
||||
$o = '';
|
||||
|
||||
// When used for private messages, we limit correspondence to mutual friends and the selector
|
||||
// When used for private messages, we limit correspondence to mutual DFRN/Friendika friends and the selector
|
||||
// to one recipient. By default our selector allows multiple selects amongst all contacts.
|
||||
|
||||
$sql_extra = '';
|
||||
|
|
@ -57,9 +57,12 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
|
|||
$sql_extra .= sprintf(" AND `rel` = %d ", intval(REL_BUD));
|
||||
}
|
||||
|
||||
if($privmail || $privatenet) {
|
||||
if($privmail) {
|
||||
$sql_extra .= " AND `network` IN ( 'dfrn' ) ";
|
||||
}
|
||||
}
|
||||
elseif($privatenet) {
|
||||
$sql_extra .= " AND `network` IN ( 'dfrn', 'mail', 'face' ) ";
|
||||
}
|
||||
|
||||
if($privmail)
|
||||
$o .= "<select name=\"$selname\" id=\"$selclass\" class=\"$selclass\" size=\"$size\" >\r\n";
|
||||
|
|
@ -80,8 +83,6 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
|
|||
|
||||
call_hooks($a->module . '_pre_' . $selname, $arr);
|
||||
|
||||
|
||||
|
||||
if(count($r)) {
|
||||
foreach($r as $rr) {
|
||||
if((is_array($preselected)) && in_array($rr['id'], $preselected))
|
||||
|
|
@ -129,7 +130,7 @@ function populate_acl($user = null,$celeb = false) {
|
|||
$o = '';
|
||||
$o .= '<div id="acl-wrapper">';
|
||||
$o .= '<div id="acl-permit-outer-wrapper">';
|
||||
$o .= '<div id="acl-permit-text">' . t('Visible To:') . '</div>';
|
||||
$o .= '<div id="acl-permit-text">' . t('Visible To:') . '</div><div id="jot-public">' . t('everybody') . '</div>';
|
||||
$o .= '<div id="acl-permit-text-end"></div>';
|
||||
$o .= '<div id="acl-permit-wrapper">';
|
||||
$o .= '<div id="group_allow_wrapper">';
|
||||
|
|
|
|||
431
include/api.php
Normal file
|
|
@ -0,0 +1,431 @@
|
|||
<?php
|
||||
require_once("bbcode.php");
|
||||
require_once("datetime.php");
|
||||
|
||||
/*
|
||||
* Twitter-Like API
|
||||
*
|
||||
*/
|
||||
|
||||
$API = Array();
|
||||
|
||||
|
||||
|
||||
function api_date($str){
|
||||
//Wed May 23 06:01:13 +0000 2007
|
||||
return datetime_convert('UTC', 'UTC', $str, "D M d h:i:s +0000 Y" );
|
||||
}
|
||||
|
||||
|
||||
function api_register_func($path, $func, $auth=false){
|
||||
global $API;
|
||||
$API[$path] = array('func'=>$func,
|
||||
'auth'=>$auth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple HTTP Login
|
||||
*/
|
||||
function api_login(&$a){
|
||||
if (!isset($_SERVER['PHP_AUTH_USER'])) {
|
||||
header('WWW-Authenticate: Basic realm="Friendika"');
|
||||
header('HTTP/1.0 401 Unauthorized');
|
||||
die('This api require login');
|
||||
}
|
||||
|
||||
$user = $_SERVER['PHP_AUTH_USER'];
|
||||
$encrypted = hash('whirlpool',trim($_SERVER['PHP_AUTH_PW']));
|
||||
|
||||
|
||||
/**
|
||||
* next code from mod/auth.php. needs better solution
|
||||
*/
|
||||
|
||||
// process normal login request
|
||||
|
||||
$r = q("SELECT * FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' )
|
||||
AND `password` = '%s' AND `blocked` = 0 AND `verified` = 1 LIMIT 1",
|
||||
dbesc(trim($user)),
|
||||
dbesc(trim($user)),
|
||||
dbesc($encrypted)
|
||||
);
|
||||
if(count($r)){
|
||||
$record = $r[0];
|
||||
} else {
|
||||
header('WWW-Authenticate: Basic realm="Friendika"');
|
||||
header('HTTP/1.0 401 Unauthorized');
|
||||
die('This api require login');
|
||||
}
|
||||
$_SESSION['uid'] = $record['uid'];
|
||||
$_SESSION['theme'] = $record['theme'];
|
||||
$_SESSION['authenticated'] = 1;
|
||||
$_SESSION['page_flags'] = $record['page-flags'];
|
||||
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $record['nickname'];
|
||||
$_SESSION['addr'] = $_SERVER['REMOTE_ADDR'];
|
||||
|
||||
//notice( t("Welcome back ") . $record['username'] . EOL);
|
||||
$a->user = $record;
|
||||
|
||||
if(strlen($a->user['timezone'])) {
|
||||
date_default_timezone_set($a->user['timezone']);
|
||||
$a->timezone = $a->user['timezone'];
|
||||
}
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %s AND `self` = 1 LIMIT 1",
|
||||
intval($_SESSION['uid']));
|
||||
if(count($r)) {
|
||||
$a->contact = $r[0];
|
||||
$a->cid = $r[0]['id'];
|
||||
$_SESSION['cid'] = $a->cid;
|
||||
}
|
||||
q("UPDATE `user` SET `login_date` = '%s' WHERE `uid` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
intval($_SESSION['uid'])
|
||||
);
|
||||
|
||||
call_hooks('logged_in', $a->user);
|
||||
|
||||
header('X-Account-Management-Status: active; name="' . $a->user['username'] . '"; id="' . $a->user['nickname'] .'"');
|
||||
}
|
||||
|
||||
/**************************
|
||||
* MAIN API ENTRY POINT *
|
||||
**************************/
|
||||
function api_call(&$a){
|
||||
GLOBAL $API;
|
||||
foreach ($API as $p=>$info){
|
||||
if (strpos($a->query_string, $p)===0){
|
||||
#unset($_SERVER['PHP_AUTH_USER']);
|
||||
if ($info['auth']===true && local_user()===false) {
|
||||
api_login($a);
|
||||
}
|
||||
|
||||
$type="json";
|
||||
if (strpos($a->query_string, ".xml")>0) $type="xml";
|
||||
if (strpos($a->query_string, ".json")>0) $type="json";
|
||||
if (strpos($a->query_string, ".rss")>0) $type="rss";
|
||||
if (strpos($a->query_string, ".atom")>0) $type="atom";
|
||||
|
||||
$r = call_user_func($info['func'], $a, $type);
|
||||
if ($r===false) return;
|
||||
|
||||
switch($type){
|
||||
case "xml":
|
||||
$r = mb_convert_encoding($r, "UTF-8",mb_detect_encoding($r));
|
||||
header ("Content-Type: text/xml");
|
||||
return '<?xml version="1.0" encoding="UTF-8"?>'."\n".$r;
|
||||
break;
|
||||
case "json":
|
||||
header ("Content-Type: application/json");
|
||||
return json_encode($r);
|
||||
break;
|
||||
case "rss":
|
||||
header ("Content-Type: application/rss+xml");
|
||||
return '<?xml version="1.0" encoding="UTF-8"?>'."\n".$r;
|
||||
break;
|
||||
case "atom":
|
||||
#header ("Content-Type: application/atom+xml");
|
||||
return '<?xml version="1.0" encoding="UTF-8"?>'."\n".$r;
|
||||
break;
|
||||
|
||||
}
|
||||
//echo "<pre>"; var_dump($r); die();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* RSS extra info
|
||||
*/
|
||||
function api_rss_extra(&$a, $arr, $user_info){
|
||||
if (is_null($user_info)) $user_info = api_get_user($a);
|
||||
$arr['$rss'] = array(
|
||||
'alternate' => $user_info['url'],
|
||||
'self' => $a->get_baseurl(). "/". $a->query_string,
|
||||
'updated' => api_date(null),
|
||||
'language' => $user_info['language'],
|
||||
'logo' => $a->get_baseurl()."/images/friendika-32.png",
|
||||
);
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns user info array.
|
||||
*/
|
||||
function api_get_user(&$a){
|
||||
$user = null;
|
||||
$extra_query = "";
|
||||
if(x($_GET, 'user_id')) {
|
||||
$user = intval($_GET['user_id']);
|
||||
$extra_query = "AND `contact`.`id` = %d ";
|
||||
}
|
||||
if(x($_GET, 'screen_name')) {
|
||||
$user = dbesc($_GET['screen_name']);
|
||||
$extra_query = "AND `contact`.`nick` = '%s' ";
|
||||
}
|
||||
|
||||
if ($user===null){
|
||||
list($user, $null) = explode(".",$a->argv[3]);
|
||||
if(is_numeric($user)){
|
||||
$user = intval($user);
|
||||
$extra_query = "AND `contact`.`id` = %d ";
|
||||
} else {
|
||||
$user = dbesc($user);
|
||||
$extra_query = "AND `contact`.`nick` = '%s' ";
|
||||
}
|
||||
}
|
||||
|
||||
if ($user==='') {
|
||||
if (local_user()===false) {
|
||||
api_login($a); return False;
|
||||
} else {
|
||||
$user = $_SESSION['uid'];
|
||||
$extra_query = "AND `user`.`uid` = %d ";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// user info
|
||||
$uinfo = q("SELECT *, `contact`.`id` as `cid` FROM `user`, `contact`
|
||||
WHERE `user`.`uid`=`contact`.`uid` AND `contact`.`self`=1
|
||||
$extra_query",
|
||||
$user
|
||||
);
|
||||
if (count($uinfo)==0) {
|
||||
return False;
|
||||
}
|
||||
|
||||
// count public wall messages
|
||||
$r = q("SELECT COUNT(`id`) as `count` FROM `item`
|
||||
WHERE `uid` = %d
|
||||
AND `type`='wall'
|
||||
AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`=''",
|
||||
intval($uinfo[0]['uid'])
|
||||
);
|
||||
$countitms = $r[0]['count'];
|
||||
|
||||
// count friends
|
||||
$r = q("SELECT COUNT(`id`) as `count` FROM `contact`
|
||||
WHERE `uid` = %d
|
||||
AND `self`=0 AND `blocked`=0",
|
||||
intval($uinfo[0]['uid'])
|
||||
);
|
||||
$countfriends = $r[0]['count'];
|
||||
|
||||
|
||||
$ret = Array(
|
||||
'id' => $uinfo[0]['cid'],
|
||||
'name' => $uinfo[0]['username'],
|
||||
'screen_name' => $uinfo[0]['nickname'],
|
||||
'location' => $uinfo[0]['default-location'],
|
||||
'profile_image_url' => $uinfo[0]['micro'],
|
||||
'url' => $uinfo[0]['url'],
|
||||
'protected' => false, #
|
||||
'friends_count' => $countfriends,
|
||||
'created_at' => api_date($uinfo[0]['created']),
|
||||
'utc_offset' => 0, #XXX: fix me
|
||||
'time_zone' => $uinfo[0]['timezone'],
|
||||
'geo_enabled' => false,
|
||||
'statuses_count' => $countitms, #XXX: fix me
|
||||
'lang' => 'en', #XXX: fix me
|
||||
'description' => '',
|
||||
'followers_count' => $countfriends, #XXX: fix me
|
||||
'lang' => 'en', #XXX: fix me
|
||||
'favourites_count' => 0,
|
||||
'contributors_enabled' => false,
|
||||
'follow_request_sent' => false,
|
||||
'profile_background_color' => 'cfe8f6',
|
||||
'profile_text_color' => '000000',
|
||||
'profile_link_color' => 'FF8500',
|
||||
'profile_sidebar_fill_color' =>'AD0066',
|
||||
'profile_sidebar_border_color' => 'AD0066',
|
||||
'profile_background_image_url' => '',
|
||||
'profile_background_tile' => false,
|
||||
'profile_use_background_image' => false,
|
||||
'notifications' => false,
|
||||
'verified' => true, #XXX: fix me
|
||||
'followers' => '', #XXX: fix me
|
||||
#'status' => null
|
||||
);
|
||||
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* apply xmlify() to all values of array $val, recursively
|
||||
*/
|
||||
function api_xmlify($val){
|
||||
if (is_bool($val)) return $val?"true":"false";
|
||||
if (is_array($val)) return array_map('api_xmlify', $val);
|
||||
return xmlify($val);
|
||||
}
|
||||
|
||||
/**
|
||||
* load api $templatename for $type and replace $data array
|
||||
*/
|
||||
function api_apply_template($templatename, $type, $data){
|
||||
switch($type){
|
||||
case "rss":
|
||||
case "atom":
|
||||
case "xml":
|
||||
$data = api_xmlify($data);
|
||||
$tpl = get_markup_template("api_".$templatename."_".$type.".tpl");
|
||||
$ret = replace_macros($tpl, $data);
|
||||
break;
|
||||
case "json":
|
||||
$ret = $data;
|
||||
break;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
** TWITTER API
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns an HTTP 200 OK response code and a representation of the requesting user if authentication was successful;
|
||||
* returns a 401 status code and an error message if not.
|
||||
* http://developer.twitter.com/doc/get/account/verify_credentials
|
||||
*/
|
||||
function api_account_verify_credentials(&$a, $type){
|
||||
if (local_user()===false) return false;
|
||||
$user_info = api_get_user($a);
|
||||
|
||||
return api_apply_template("user", $type, array('$user' => $user_info));
|
||||
|
||||
}
|
||||
api_register_func('api/account/verify_credentials','api_account_verify_credentials', true);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns extended information of a given user, specified by ID or screen name as per the required id parameter.
|
||||
* The author's most recent status will be returned inline.
|
||||
* http://developer.twitter.com/doc/get/users/show
|
||||
*/
|
||||
function api_users_show(&$a, $type){
|
||||
$user_info = api_get_user($a);
|
||||
// get last public wall message
|
||||
$lastwall = q("SELECT `item`.*, `i`.`contact-id` as `reply_uid`, `i`.`nick` as `reply_author`
|
||||
FROM `item`, `contact`,
|
||||
(SELECT `item`.`id`, `item`.`contact-id`, `contact`.`nick` FROM `item`,`contact` WHERE `contact`.`id`=`item`.`contact-id`) as `i`
|
||||
WHERE `item`.`contact-id` = %d
|
||||
AND `i`.`id` = `item`.`parent`
|
||||
AND `contact`.`id`=`item`.`contact-id` AND `contact`.`self`=1
|
||||
AND `type`!='activity'
|
||||
AND `item`.`allow_cid`='' AND `item`.`allow_gid`='' AND `item`.`deny_cid`='' AND `item`.`deny_gid`=''
|
||||
ORDER BY `created` DESC
|
||||
LIMIT 1",
|
||||
intval($user_info['id'])
|
||||
);
|
||||
|
||||
if (count($lastwall)>0){
|
||||
$lastwall = $lastwall[0];
|
||||
|
||||
$in_reply_to_status_id = '';
|
||||
$in_reply_to_user_id = '';
|
||||
$in_reply_to_screen_name = '';
|
||||
if ($lastwall['parent']!=$lastwall['id']) {
|
||||
$in_reply_to_status_id=$lastwall['parent'];
|
||||
$in_reply_to_user_id = $lastwall['reply_uid'];
|
||||
$in_reply_to_screen_name = $lastwall['reply_author'];
|
||||
}
|
||||
$user_info['status'] = array(
|
||||
'created_at' => api_date($lastwall['created']),
|
||||
'id' => $lastwall['contact-id'],
|
||||
'text' => strip_tags(bbcode($lastwall['body'])),
|
||||
'source' => 'web',
|
||||
'truncated' => false,
|
||||
'in_reply_to_status_id' => $in_reply_to_status_id,
|
||||
'in_reply_to_user_id' => $in_reply_to_user_id,
|
||||
'favorited' => false,
|
||||
'in_reply_to_screen_name' => $in_reply_to_screen_name,
|
||||
'geo' => '',
|
||||
'coordinates' => $lastwall['coord'],
|
||||
'place' => $lastwall['location'],
|
||||
'contributors' => ''
|
||||
);
|
||||
}
|
||||
return api_apply_template("user", $type, array('$user' => $user_info));
|
||||
|
||||
}
|
||||
api_register_func('api/users/show','api_users_show');
|
||||
|
||||
/**
|
||||
*
|
||||
* http://developer.twitter.com/doc/get/statuses/home_timeline
|
||||
*
|
||||
* TODO: Optional parameters
|
||||
* TODO: Add reply info
|
||||
*/
|
||||
function api_statuses_home_timeline(&$a, $type){
|
||||
if (local_user()===false) return false;
|
||||
|
||||
$user_info = api_get_user($a);
|
||||
|
||||
// get last newtork messages
|
||||
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) ";
|
||||
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
|
||||
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
|
||||
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
|
||||
FROM `item`, `contact`, `user`
|
||||
WHERE `item`.`contact-id` = %d AND `user`.`uid` = `item`.`uid`
|
||||
AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND `contact`.`id` = `item`.`contact-id`
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
$sql_extra
|
||||
ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
|
||||
intval($user_info['id']),
|
||||
0,20
|
||||
);
|
||||
$ret = Array();
|
||||
|
||||
foreach($r as $item) {
|
||||
$status = array(
|
||||
'created_at'=> api_date($item['created']),
|
||||
'id' => $item['id'],
|
||||
'text' => strip_tags(bbcode($item['body'])),
|
||||
'html' => bbcode($item['body']),
|
||||
'source' => 'web',
|
||||
'url' => ($item['plink']!=''?$item['plink']:$item['author-link']),
|
||||
'truncated' => False,
|
||||
'in_reply_to_status_id' => ($item['parent']!=$item['id']?$item['id']:''),
|
||||
'in_reply_to_user_id' => '',
|
||||
'favorited' => false,
|
||||
'in_reply_to_screen_name' => '',
|
||||
'geo' => '',
|
||||
'coordinates' => $item['coord'],
|
||||
'place' => $item['location'],
|
||||
'contributors' => '',
|
||||
'annotations' => '',
|
||||
'entities' => '',
|
||||
'user' => $user_info,
|
||||
'objecttype' => $item['object-type'],
|
||||
'verb' => $item['verb'],
|
||||
'self' => $a->get_baseurl()."/api/statuses/show/".$ite['id'].".".$type,
|
||||
'edit' => $a->get_baseurl()."/api/statuses/show/".$ite['id'].".".$type,
|
||||
);
|
||||
$ret[]=$status;
|
||||
};
|
||||
|
||||
$data = array('$statuses' => $ret);
|
||||
switch($type){
|
||||
case "atom":
|
||||
case "rss":
|
||||
$data = api_rss_extra($a, $data, $user_info);
|
||||
}
|
||||
|
||||
return api_apply_template("timeline", $type, $data);
|
||||
}
|
||||
api_register_func('api/statuses/home_timeline','api_statuses_home_timeline', true);
|
||||
api_register_func('api/statuses/friends_timeline','api_statuses_home_timeline', true);
|
||||
api_register_func('api/statuses/user_timeline','api_statuses_home_timeline', true);
|
||||
# TODO: user_timeline should be profile view
|
||||
|
||||
|
|
@ -28,6 +28,15 @@ if((isset($_SESSION)) && (x($_SESSION,'authenticated')) && ((! (x($_POST,'auth-p
|
|||
goaway($a->get_baseurl());
|
||||
}
|
||||
|
||||
if(x($_SESSION,'visitor_id') && (! x($_SESSION,'uid'))) {
|
||||
$r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
|
||||
intval($_SESSION['visitor_id'])
|
||||
);
|
||||
if(count($r)) {
|
||||
$a->contact = $r[0];
|
||||
}
|
||||
}
|
||||
|
||||
if(x($_SESSION,'uid')) {
|
||||
|
||||
// already logged in user returning
|
||||
|
|
@ -191,9 +200,17 @@ else {
|
|||
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $record['nickname'];
|
||||
$_SESSION['addr'] = $_SERVER['REMOTE_ADDR'];
|
||||
|
||||
notice( t("Welcome back ") . $record['username'] . EOL);
|
||||
$a->user = $record;
|
||||
|
||||
if($a->user['login_date'] === '0000-00-00 00:00:00') {
|
||||
$_SESSION['return_url'] = 'profile_photo/new';
|
||||
$a->module = 'profile_photo';
|
||||
notice( t("Welcome ") . $a->user['username'] . EOL);
|
||||
notice( t('Please upload a profile photo.') . EOL);
|
||||
}
|
||||
else
|
||||
notice( t("Welcome back ") . $a->user['username'] . EOL);
|
||||
|
||||
if(strlen($a->user['timezone'])) {
|
||||
date_default_timezone_set($a->user['timezone']);
|
||||
$a->timezone = $a->user['timezone'];
|
||||
|
|
@ -214,6 +231,8 @@ else {
|
|||
$a->cid = $r[0]['id'];
|
||||
$_SESSION['cid'] = $a->cid;
|
||||
}
|
||||
|
||||
|
||||
q("UPDATE `user` SET `login_date` = '%s' WHERE `uid` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
intval($_SESSION['uid'])
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ require_once("include/oembed.php");
|
|||
// BBcode 2 HTML was written by WAY2WEB.net
|
||||
// extended to work with Mistpark/Friendika - Mike Macgirvin
|
||||
|
||||
function bbcode($Text) {
|
||||
function bbcode($Text,$preserve_nl = false) {
|
||||
|
||||
// Replace any html brackets with HTML Entities to prevent executing HTML or script
|
||||
// Don't use strip_tags here because it breaks [url] search by replacing & with amp
|
||||
|
|
@ -12,7 +12,10 @@ function bbcode($Text) {
|
|||
$Text = str_replace(">", ">", $Text);
|
||||
|
||||
// Convert new line chars to html <br /> tags
|
||||
|
||||
$Text = nl2br($Text);
|
||||
if($preserve_nl)
|
||||
$Text = str_replace(array("\n","\r"), array('',''),$Text);
|
||||
|
||||
// Set up the parameters for a URL search string
|
||||
$URLSearchString = "^\[\]";
|
||||
|
|
@ -22,7 +25,7 @@ function bbcode($Text) {
|
|||
// Perform URL Search
|
||||
|
||||
|
||||
$Text = preg_replace("/([^\]\=]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%\$\!\+]+)/", ' <a href="$2" target="external-link">$2</a>', $Text);
|
||||
$Text = preg_replace("/([^\]\=]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%\$\!\+\,]+)/", ' <a href="$2" target="external-link">$2</a>', $Text);
|
||||
|
||||
$Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/", '<a href="$1" target="external-link">$1</a>', $Text);
|
||||
$Text = preg_replace("(\[url\=([$URLSearchString]*)\](.+?)\[/url\])", '<a href="$1" target="external-link">$2</a>', $Text);
|
||||
|
|
@ -77,7 +80,7 @@ function bbcode($Text) {
|
|||
|
||||
// Images
|
||||
// [img]pathtoimage[/img]
|
||||
$Text = preg_replace("/\[img\](.+?)\[\/img\]/", '<img src="$1">', $Text);
|
||||
$Text = preg_replace("/\[img\](.+?)\[\/img\]/", '<img src="$1" alt="' . t('Image/photo') . '" />', $Text);
|
||||
|
||||
// html5 video and audio
|
||||
|
||||
|
|
@ -90,8 +93,12 @@ function bbcode($Text) {
|
|||
$Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.+?)\[\/img\]/", '<img src="$3" height="$2" width="$1">', $Text);
|
||||
|
||||
// Youtube extensions
|
||||
$Text = preg_replace("/\[youtube\]http:\/\/www.youtube.com\/watch\?v\=(.+?)\[\/youtube\]/",'[youtube]$1[/youtube]',$Text);
|
||||
$Text = preg_replace("/\[youtube\](.+?)\[\/youtube\]/", '<object width="425" height="350" type="application/x-shockwave-flash" data="http://www.youtube.com/v/$1" ><param name="movie" value="http://www.youtube.com/v/$1"></param><!--[if IE]><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" width="425" height="350" /><![endif]--></object>', $Text);
|
||||
$Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.+?)\[\/youtube\]/",'[youtube]$1[/youtube]',$Text);
|
||||
$Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.+?)\[\/youtube\]/",'[youtube]$1[/youtube]',$Text);
|
||||
|
||||
$Text = preg_replace("/\[youtube\](.+?)\[\/youtube\]/", '<iframe width="425" height="349" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>', $Text);
|
||||
|
||||
// $Text = preg_replace("/\[youtube\](.+?)\[\/youtube\]/", '<object width="425" height="350" type="application/x-shockwave-flash" data="http://www.youtube.com/v/$1" ><param name="movie" value="http://www.youtube.com/v/$1"></param><!--[if IE]><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" width="425" height="350" /><![endif]--></object>', $Text);
|
||||
|
||||
// oembed tag
|
||||
$Text = oembed_bbcode2html($Text);
|
||||
|
|
|
|||
755
include/conversation.php
Normal file
|
|
@ -0,0 +1,755 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Render actions localized
|
||||
*/
|
||||
function localize_item(&$item){
|
||||
|
||||
if ($item['verb']=="http://activitystrea.ms/schema/1.0/like" ||
|
||||
$item['verb']=="http://activitystrea.ms/schema/1.0/dislike"){
|
||||
|
||||
$r = q("SELECT * from `item`,`contact` WHERE
|
||||
`item`.`contact-id`=`contact`.`id` AND `item`.`uri`='%s';",
|
||||
dbesc($item['parent-uri']));
|
||||
if(count($r)==0) return;
|
||||
$obj=$r[0];
|
||||
|
||||
$author = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]';
|
||||
$objauthor = '[url=' . $obj['author-link'] . ']' . $obj['author-name'] . '[/url]';
|
||||
|
||||
$post_type = (($obj['resource-id']) ? t('photo') : t('status'));
|
||||
$plink = '[url=' . $obj['plink'] . ']' . $post_type . '[/url]';
|
||||
|
||||
switch($item['verb']){
|
||||
case "http://activitystrea.ms/schema/1.0/like":
|
||||
$bodyverb = t('%1$s likes %2$s\'s %3$s');
|
||||
break;
|
||||
case "http://activitystrea.ms/schema/1.0/dislike":
|
||||
$bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
|
||||
break;
|
||||
}
|
||||
$item['body'] = sprintf($bodyverb, $author, $objauthor, $plink);
|
||||
|
||||
}
|
||||
if ($item['verb']=='http://activitystrea.ms/schema/1.0/make-friend'){
|
||||
|
||||
if ($item['object-type']=="" || $item['object-type']!='http://activitystrea.ms/schema/1.0/person') return;
|
||||
|
||||
$Aname = $item['author-name'];
|
||||
$Alink = $item['author-link'];
|
||||
|
||||
$xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">";
|
||||
|
||||
$obj = parse_xml_string($xmlhead.$item['object']);
|
||||
$links = parse_xml_string($xmlhead."<links>".unxmlify($obj->link)."</links>");
|
||||
|
||||
$Bname = $obj->title;
|
||||
$Blink = ""; $Bphoto = "";
|
||||
foreach ($links->link as $l){
|
||||
$atts = $l->attributes();
|
||||
switch($atts['rel']){
|
||||
case "alternate": $Blink = $atts['href'];
|
||||
case "photo": $Bphoto = $atts['href'];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$A = '[url=' . $Alink . ']' . $Aname . '[/url]';
|
||||
$B = '[url=' . $Blink . ']' . $Bname . '[/url]';
|
||||
if ($Bphoto!="") $Bphoto = '[url=' . $Blink . '][img]' . $Bphoto . '[/img][/url]';
|
||||
|
||||
$item['body'] = sprintf( t('%1$s is now friends with %2$s'), $A, $B)."\n\n\n".$Bphoto;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* "Render" a conversation or list of items for HTML display.
|
||||
* There are two major forms of display:
|
||||
* - Sequential or unthreaded ("New Item View" or search results)
|
||||
* - conversation view
|
||||
* The $mode parameter decides between the various renderings and also
|
||||
* figures out how to determine page owner and other contextual items
|
||||
* that are based on unique features of the calling module.
|
||||
*
|
||||
*/
|
||||
function conversation(&$a, $items, $mode, $update) {
|
||||
|
||||
require_once('bbcode.php');
|
||||
|
||||
$profile_owner = 0;
|
||||
$page_writeable = false;
|
||||
|
||||
if($mode === 'network') {
|
||||
$profile_owner = local_user();
|
||||
$page_writeable = true;
|
||||
}
|
||||
|
||||
if($mode === 'profile') {
|
||||
$profile_owner = $a->profile['profile_uid'];
|
||||
$page_writeable = can_write_wall($a,$profile_owner);
|
||||
}
|
||||
|
||||
if($mode === 'notes') {
|
||||
$profile_owner = $a->profile['profile_uid'];
|
||||
$page_writeable = true;
|
||||
}
|
||||
|
||||
if($mode === 'display') {
|
||||
$profile_owner = $a->profile['uid'];
|
||||
$page_writeable = can_write_wall($a,$profile_owner);
|
||||
}
|
||||
|
||||
if($update)
|
||||
$return_url = $_SESSION['return_url'];
|
||||
else
|
||||
$return_url = $_SESSION['return_url'] = $a->cmd;
|
||||
|
||||
load_contact_links(local_user());
|
||||
|
||||
|
||||
$cmnt_tpl = get_markup_template('comment_item.tpl');
|
||||
$like_tpl = get_markup_template('like.tpl');
|
||||
$noshare_tpl = get_markup_template('like_noshare.tpl');
|
||||
$tpl = get_markup_template('wall_item.tpl');
|
||||
$wallwall = get_markup_template('wallwall_item.tpl');
|
||||
|
||||
$alike = array();
|
||||
$dlike = array();
|
||||
|
||||
if(count($items)) {
|
||||
|
||||
if($mode === 'network-new' || $mode === 'search') {
|
||||
|
||||
// "New Item View" on network page or search page results
|
||||
// - just loop through the items and format them minimally for display
|
||||
|
||||
$tpl = get_markup_template('search_item.tpl');
|
||||
$droptpl = get_markup_template('wall_fake_drop.tpl');
|
||||
|
||||
foreach($items as $item) {
|
||||
|
||||
$comment = '';
|
||||
$owner_url = '';
|
||||
$owner_photo = '';
|
||||
$owner_name = '';
|
||||
$sparkle = '';
|
||||
|
||||
if($mode === 'search') {
|
||||
if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE)))
|
||||
&& ($item['id'] != $item['parent']))
|
||||
continue;
|
||||
$nickname = $item['nickname'];
|
||||
}
|
||||
else
|
||||
$nickname = $a->user['nickname'];
|
||||
|
||||
$profile_name = ((strlen($item['author-name'])) ? $item['author-name'] : $item['name']);
|
||||
|
||||
$sp = false;
|
||||
$profile_link = best_link_url($item,$sp);
|
||||
if($sp)
|
||||
$sparkle = ' sparkle';
|
||||
if($profile_link === 'mailbox')
|
||||
$profile_link = '';
|
||||
|
||||
|
||||
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
|
||||
if(($normalised != 'mailbox') && (x($a->contacts[$normalised])))
|
||||
$profile_avatar = $a->contacts[$normalised]['thumb'];
|
||||
else
|
||||
$profile_avatar = ((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']);
|
||||
|
||||
$location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
|
||||
$coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
|
||||
if($coord) {
|
||||
if($location)
|
||||
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
|
||||
else
|
||||
$location = '<span class="smalltext">' . $coord . '</span>';
|
||||
}
|
||||
|
||||
$drop = '';
|
||||
$dropping = false;
|
||||
|
||||
if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
|
||||
$dropping = true;
|
||||
|
||||
$drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$delete' => t('Delete')));
|
||||
|
||||
//
|
||||
localize_item($item);
|
||||
|
||||
$drop = replace_macros($droptpl,array('$id' => $item['id']));
|
||||
$lock = '<div class="wall-item-lock"></div>';
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$id' => $item['item_id'],
|
||||
'$linktitle' => sprintf( t('View %s\'s profile'), $profile_name),
|
||||
'$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' => '<a href="' . $a->get_baseurl() . '/display/' . $nickname . '/' . $item['id'] . '">' . t('View in context') . '</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($items as $item) {
|
||||
if((intval($item['gravity']) == 6) && ($item['id'] != $item['parent'])) {
|
||||
if(! x($comments,$item['parent']))
|
||||
$comments[$item['parent']] = 1;
|
||||
else
|
||||
$comments[$item['parent']] += 1;
|
||||
}
|
||||
}
|
||||
|
||||
// map all the like/dislike activities for each parent item
|
||||
// Store these in the $alike and $dlike arrays
|
||||
|
||||
foreach($items as $item) {
|
||||
like_puller($a,$item,$alike,'like');
|
||||
like_puller($a,$item,$dlike,'dislike');
|
||||
}
|
||||
|
||||
$comments_collapsed = false;
|
||||
$blowhard = 0;
|
||||
$blowhard_count = 0;
|
||||
|
||||
foreach($items 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;
|
||||
|
||||
$toplevelpost = (($item['id'] == $item['parent']) ? true : false);
|
||||
|
||||
|
||||
// Take care of author collapsing and comment collapsing
|
||||
// If a single author has more than 3 consecutive top-level posts, squash the remaining ones.
|
||||
// If there are more than two comments, squash all but the last 2.
|
||||
|
||||
if($toplevelpost) {
|
||||
|
||||
$item_writeable = (($item['writable'] || $item['self']) ? true : false);
|
||||
|
||||
if($blowhard == $item['cid'] && (! $item['self']) && ($mode != 'profile') && ($mode != 'notes')) {
|
||||
$blowhard_count ++;
|
||||
if($blowhard_count == 3) {
|
||||
$o .= '<div class="icollapse-wrapper fakelink" id="icollapse-wrapper-' . $item['parent']
|
||||
. '" onclick="openClose(' . '\'icollapse-' . $item['parent'] . '\'); $(\'#icollapse-wrapper-' . $item['parent'] . '\').hide();" >'
|
||||
. t('See more posts like this') . '</div>' . '<div class="icollapse" id="icollapse-'
|
||||
. $item['parent'] . '" style="display: none;" >';
|
||||
}
|
||||
}
|
||||
else {
|
||||
$blowhard = $item['cid'];
|
||||
if($blowhard_count >= 3)
|
||||
$o .= '</div>';
|
||||
$blowhard_count = 0;
|
||||
}
|
||||
|
||||
$comments_seen = 0;
|
||||
$comments_collapsed = false;
|
||||
}
|
||||
else
|
||||
$comments_seen ++;
|
||||
|
||||
|
||||
$override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false);
|
||||
$show_comment_box = ((($page_writeable) && ($item_writeable) && ($comments_seen == $comments[$item['parent']])) ? true : false);
|
||||
|
||||
if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) {
|
||||
if(! $comments_collapsed) {
|
||||
$o .= '<div class="ccollapse-wrapper fakelink" id="ccollapse-wrapper-' . $item['parent']
|
||||
. '" onclick="openClose(' . '\'ccollapse-' . $item['parent'] . '\'); $(\'#ccollapse-wrapper-' . $item['parent'] . '\').hide();" >'
|
||||
. sprintf( t('See all %d comments'), $comments[$item['parent']]) . '</div>'
|
||||
. '<div class="ccollapse" id="ccollapse-' . $item['parent'] . '" style="display: none;" >';
|
||||
$comments_collapsed = true;
|
||||
}
|
||||
}
|
||||
if(($comments[$item['parent']] > 2) && ($comments_seen == ($comments[$item['parent']] - 1))) {
|
||||
$o .= '</div>';
|
||||
}
|
||||
|
||||
$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']))))
|
||||
? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,' . $item['id'] . ');" /></div>'
|
||||
: '<div class="wall-item-lock"></div>');
|
||||
|
||||
|
||||
// Top-level wall post not written by the wall owner (wall-to-wall)
|
||||
// First figure out who owns it.
|
||||
|
||||
$osparkle = '';
|
||||
|
||||
if(($toplevelpost) && (! $item['self']) && ($mode !== 'profile')) {
|
||||
|
||||
if($item['type'] === 'wall') {
|
||||
|
||||
// On the network page, I am the owner. On the display page it will be the profile owner.
|
||||
// This will have been stored in $a->page_contact by our calling page.
|
||||
// Put this person on the left of the wall-to-wall notice.
|
||||
|
||||
$owner_url = $a->page_contact['url'];
|
||||
$owner_photo = $a->page_contact['thumb'];
|
||||
$owner_name = $a->page_contact['name'];
|
||||
$template = $wallwall;
|
||||
$commentww = 'ww';
|
||||
}
|
||||
if(($item['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';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$likebuttons = '';
|
||||
|
||||
if($page_writeable) {
|
||||
if($toplevelpost) {
|
||||
$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(($show_comment_box) || (($show_comment_box == false) && ($override_comment_box == false) && ($item['last-child']))) {
|
||||
$comment = replace_macros($cmnt_tpl,array(
|
||||
'$return_path' => '',
|
||||
'$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''),
|
||||
'$type' => (($mode === 'profile') ? 'wall-comment' : 'net-comment'),
|
||||
'$id' => $item['item_id'],
|
||||
'$parent' => $item['parent'],
|
||||
'$profile_uid' => $profile_owner,
|
||||
'$mylink' => $a->contact['url'],
|
||||
'$mytitle' => t('This is you'),
|
||||
'$myphoto' => $a->contact['thumb'],
|
||||
'$comment' => t('Comment'),
|
||||
'$submit' => t('Submit'),
|
||||
'$ww' => (($mode === 'network') ? $commentww : '')
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
$edpost = (((($profile_owner == local_user()) && ($toplevelpost) && (intval($item['wall']) == 1)) || ($mode === 'notes'))
|
||||
? '<a class="editpost" href="' . $a->get_baseurl() . '/editpost/' . $item['id']
|
||||
. '" title="' . t('Edit') . '"><img src="images/pencil.gif" /></a>'
|
||||
: '');
|
||||
$drop = replace_macros(get_markup_template('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']);
|
||||
|
||||
$sp = false;
|
||||
$profile_link = best_link_url($item,$sp);
|
||||
if($sp)
|
||||
$sparkle = ' sparkle';
|
||||
|
||||
if($profile_link === 'mailbox')
|
||||
$profile_link = '';
|
||||
|
||||
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
|
||||
if(($normalised != 'mailbox') && (x($a->contacts[$normalised])))
|
||||
$profile_avatar = $a->contacts[$normalised]['thumb'];
|
||||
else
|
||||
$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$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']) ? '<a target="map" title="' . $item['location']
|
||||
. '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
|
||||
$coord = (($item['coord']) ? '<a target="map" title="' . $item['coord']
|
||||
. '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
|
||||
if($coord) {
|
||||
if($location)
|
||||
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
|
||||
else
|
||||
$location = '<span class="smalltext">' . $coord . '</span>';
|
||||
}
|
||||
|
||||
$indent = (($toplevelpost) ? '' : ' comment');
|
||||
|
||||
if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
|
||||
$indent .= ' shiny';
|
||||
|
||||
//
|
||||
localize_item($item);
|
||||
|
||||
// Build the HTML
|
||||
|
||||
$tmp_item = replace_macros($template,array(
|
||||
'$id' => $item['item_id'],
|
||||
'$linktitle' => sprintf( t('View %s\'s profile'), $profile_name),
|
||||
'$olinktitle' => sprintf( t('View %s\'s profile'), $owner_name),
|
||||
'$to' => t('to'),
|
||||
'$wall' => t('Wall-to-Wall'),
|
||||
'$vwall' => t('via Wall-To-Wall:'),
|
||||
'$profile_url' => $profile_link,
|
||||
'$item_photo_menu' => item_photo_menu($item),
|
||||
'$name' => $profile_name,
|
||||
'$thumb' => $profile_avatar,
|
||||
'$osparkle' => $osparkle,
|
||||
'$sparkle' => $sparkle,
|
||||
'$title' => $item['title'],
|
||||
'$body' => 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'];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// if author collapsing is in force but didn't get closed, close it off now.
|
||||
|
||||
if($blowhard_count >= 3)
|
||||
$o .= '</div>';
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
|
||||
if(! function_exists('load_contact_links')) {
|
||||
function load_contact_links($uid) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$ret = array();
|
||||
|
||||
if(! $uid || x($a->contacts,'empty'))
|
||||
return;
|
||||
|
||||
$r = q("SELECT `id`,`network`,`url`,`thumb` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 ",
|
||||
intval($uid)
|
||||
);
|
||||
if(count($r)) {
|
||||
foreach($r as $rr){
|
||||
$url = normalise_link($rr['url']);
|
||||
$ret[$url] = $rr;
|
||||
}
|
||||
}
|
||||
else
|
||||
$ret['empty'] = true;
|
||||
$a->contacts = $ret;
|
||||
return;
|
||||
}}
|
||||
|
||||
|
||||
function best_link_url($item,&$sparkle) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$best_url = '';
|
||||
$sparkle = false;
|
||||
|
||||
$clean_url = normalise_link($item['author-link']);
|
||||
|
||||
if((local_user()) && (local_user() == $item['uid'])) {
|
||||
if(isset($a->contacts) && x($a->contacts,$clean_url)) {
|
||||
if($a->contacts[$clean_url]['network'] === NETWORK_DFRN) {
|
||||
$best_url = $a->get_baseurl() . '/redir/' . $a->contacts[$clean_url]['id'];
|
||||
$sparkle = true;
|
||||
}
|
||||
else
|
||||
$best_url = $a->contacts[$clean_url]['url'];
|
||||
}
|
||||
}
|
||||
if(! $best_url) {
|
||||
if(strlen($item['author-link']))
|
||||
$best_url = $item['author-link'];
|
||||
else
|
||||
$best_url = $item['url'];
|
||||
}
|
||||
|
||||
return $best_url;
|
||||
}
|
||||
|
||||
|
||||
if(! function_exists('item_photo_menu')){
|
||||
function item_photo_menu($item){
|
||||
$a = get_app();
|
||||
|
||||
if (local_user() && (! count($a->contacts)))
|
||||
load_contact_links(local_user());
|
||||
|
||||
$contact_url="";
|
||||
$pm_url="";
|
||||
$status_link="";
|
||||
$photos_link="";
|
||||
$posts_link="";
|
||||
|
||||
$sparkle = false;
|
||||
$profile_link = best_link_url($item,$sparkle);
|
||||
if($profile_link === 'mailbox')
|
||||
$profile_link = '';
|
||||
|
||||
if($sparkle) {
|
||||
$cid = intval(basename($profile_link));
|
||||
$status_link = $profile_link . "?url=status";
|
||||
$photos_link = $profile_link . "?url=photos";
|
||||
$profile_link = $profile_link . "?url=profile";
|
||||
$pm_url = $a->get_baseurl() . '/message/new/' . $cid;
|
||||
}
|
||||
else {
|
||||
if(local_user() && local_user() == $item['uid'] && link_compare($item['url'],$item['author-link'])) {
|
||||
$cid = $item['contact-id'];
|
||||
}
|
||||
else {
|
||||
$cid = 0;
|
||||
}
|
||||
}
|
||||
if(($cid) && (! $item['self'])) {
|
||||
$contact_url = $a->get_baseurl() . '/contacts/' . $cid;
|
||||
$posts_link = $a->get_baseurl() . '/network/?cid=' . $cid;
|
||||
}
|
||||
|
||||
$menu = Array(
|
||||
t("View status") => $status_link,
|
||||
t("View profile") => $profile_link,
|
||||
t("View photos") => $photos_link,
|
||||
t("View recent") => $posts_link,
|
||||
t("Edit contact") => $contact_url,
|
||||
t("Send PM") => $pm_url,
|
||||
);
|
||||
|
||||
|
||||
$args = array($item, &$menu);
|
||||
|
||||
call_hooks('item_photo_menu', $args);
|
||||
|
||||
$o = "";
|
||||
foreach($menu as $k=>$v){
|
||||
if ($v!="") $o .= "<li><a href='$v'>$k</a></li>\n";
|
||||
}
|
||||
return $o;
|
||||
}}
|
||||
|
||||
if(! function_exists('like_puller')) {
|
||||
function like_puller($a,$item,&$arr,$mode) {
|
||||
|
||||
$url = '';
|
||||
$sparkle = '';
|
||||
$verb = (($mode === 'like') ? ACTIVITY_LIKE : ACTIVITY_DISLIKE);
|
||||
|
||||
if((activity_match($item['verb'],$verb)) && ($item['id'] != $item['parent'])) {
|
||||
$url = $item['author-link'];
|
||||
if((local_user()) && (local_user() == $item['uid']) && ($item['network'] === 'dfrn') && (! $item['self']) && (link_compare($item['author-link'],$item['url']))) {
|
||||
$url = $a->get_baseurl() . '/redir/' . $item['contact-id'];
|
||||
$sparkle = ' class="sparkle" ';
|
||||
}
|
||||
if(! ((isset($arr[$item['parent'] . '-l'])) && (is_array($arr[$item['parent'] . '-l']))))
|
||||
$arr[$item['parent'] . '-l'] = array();
|
||||
if(! isset($arr[$item['parent']]))
|
||||
$arr[$item['parent']] = 1;
|
||||
else
|
||||
$arr[$item['parent']] ++;
|
||||
$arr[$item['parent'] . '-l'][] = '<a href="'. $url . '"'. $sparkle .'>' . $item['author-name'] . '</a>';
|
||||
}
|
||||
return;
|
||||
}}
|
||||
|
||||
// Format the like/dislike text for a profile item
|
||||
// $cnt = number of people who like/dislike the item
|
||||
// $arr = array of pre-linked names of likers/dislikers
|
||||
// $type = one of 'like, 'dislike'
|
||||
// $id = item id
|
||||
// returns formatted text
|
||||
|
||||
if(! function_exists('format_like')) {
|
||||
function format_like($cnt,$arr,$type,$id) {
|
||||
$o = '';
|
||||
if($cnt == 1)
|
||||
$o .= (($type === 'like') ? sprintf( t('%s likes this.'), $arr[0]) : sprintf( t('%s doesn\'t like this.'), $arr[0])) . EOL ;
|
||||
else {
|
||||
$spanatts = 'class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');"';
|
||||
$o .= (($type === 'like') ?
|
||||
sprintf( t('<span %1$s>%2$d people</span> like this.'), $spanatts, $cnt)
|
||||
:
|
||||
sprintf( t('<span %1$s>%2$d people</span> don\'t like this.'), $spanatts, $cnt) );
|
||||
$o .= EOL ;
|
||||
$total = count($arr);
|
||||
if($total >= MAX_LIKERS)
|
||||
$arr = array_slice($arr, 0, MAX_LIKERS - 1);
|
||||
if($total < MAX_LIKERS)
|
||||
$arr[count($arr)-1] = t('and') . ' ' . $arr[count($arr)-1];
|
||||
$str = implode(', ', $arr);
|
||||
if($total >= MAX_LIKERS)
|
||||
$str .= sprintf( t(', and %d other people'), $total - MAX_LIKERS );
|
||||
$str = (($type === 'like') ? sprintf( t('%s like this.'), $str) : sprintf( t('%s don\'t like this.'), $str));
|
||||
$o .= "\t" . '<div id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>';
|
||||
}
|
||||
return $o;
|
||||
}}
|
||||
|
||||
|
||||
function status_editor($a,$x, $notes_cid = 0) {
|
||||
|
||||
$o = '';
|
||||
|
||||
$geotag = (($x['allow_location']) ? get_markup_template('jot_geotag.tpl') : '');
|
||||
|
||||
$tpl = get_markup_template('jot-header.tpl');
|
||||
|
||||
$a->page['htmlhead'] .= replace_macros($tpl, array(
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$geotag' => $geotag,
|
||||
'$nickname' => $x['nickname'],
|
||||
'$ispublic' => t('Visible to <strong>everybody</strong>'),
|
||||
'$linkurl' => t('Please enter a link URL:'),
|
||||
'$utubeurl' => t('Please enter a YouTube link:'),
|
||||
'$vidurl' => t("Please enter a video\x28.ogg\x29 link/URL:"),
|
||||
'$audurl' => t("Please enter an audio\x28.ogg\x29 link/URL:"),
|
||||
'$whereareu' => t('Where are you right now?'),
|
||||
'$title' => t('Enter a title for this item')
|
||||
));
|
||||
|
||||
|
||||
$tpl = get_markup_template("jot.tpl");
|
||||
|
||||
$jotplugins = '';
|
||||
$jotnets = '';
|
||||
|
||||
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
|
||||
|
||||
$mail_enabled = false;
|
||||
$pubmail_enabled = false;
|
||||
|
||||
if(($x['is_owner']) && (! $mail_disabled)) {
|
||||
$r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1",
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r)) {
|
||||
$mail_enabled = true;
|
||||
if(intval($r[0]['pubmail']))
|
||||
$pubmail_enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
if($mail_enabled) {
|
||||
$selected = (($pubmail_enabled) ? ' checked="checked" ' : '');
|
||||
$jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . 'value="1" /> '
|
||||
. t("Post to Email") . '</div>';
|
||||
}
|
||||
|
||||
call_hooks('jot_tool', $jotplugins);
|
||||
call_hooks('jot_networks', $jotnets);
|
||||
|
||||
if($notes_cid)
|
||||
$jotnets .= '<input type="hidden" name="contact_allow[]" value="' . $notes_cid .'" />';
|
||||
|
||||
$tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$return_path' => $a->cmd,
|
||||
'$action' => 'item',
|
||||
'$share' => (($x['button']) ? $x['button'] : t('Share')),
|
||||
'$upload' => t('Upload photo'),
|
||||
'$weblink' => t('Insert web link'),
|
||||
'$youtube' => t('Insert YouTube video'),
|
||||
'$video' => t('Insert Vorbis [.ogg] video'),
|
||||
'$audio' => t('Insert Vorbis [.ogg] audio'),
|
||||
'$setloc' => t('Set your location'),
|
||||
'$noloc' => t('Clear browser location'),
|
||||
'$title' => t('Set title'),
|
||||
'$wait' => t('Please wait'),
|
||||
'$permset' => t('Permission settings'),
|
||||
'$ptyp' => (($notes_cid) ? 'note' : 'wall'),
|
||||
'$content' => '',
|
||||
'$post_id' => '',
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$defloc' => $x['default_location'],
|
||||
'$visitor' => $x['visitor'],
|
||||
'$pvisit' => (($notes_cid) ? 'none' : $x['visitor']),
|
||||
'$emailcc' => t('CC: email addresses'),
|
||||
'$public' => t('Public post'),
|
||||
'$jotnets' => $jotnets,
|
||||
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
|
||||
'$lockstate' => $x['lockstate'],
|
||||
'$acl' => $x['acl'],
|
||||
'$bang' => $x['bang'],
|
||||
'$profile_uid' => $x['profile_uid'],
|
||||
));
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
|
@ -19,6 +19,23 @@ class dba {
|
|||
public $connected = false;
|
||||
|
||||
function __construct($server,$user,$pass,$db,$install = false) {
|
||||
|
||||
$server = trim($server);
|
||||
$user = trim($user);
|
||||
$pass = trim($pass);
|
||||
$db = trim($db);
|
||||
|
||||
if($install) {
|
||||
if(strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1')) {
|
||||
if(! dns_get_record($server, DNS_A + DNS_CNAME + DNS_PTR)) {
|
||||
notice( sprintf( t('Cannot locate DNS info for database server \'%s\''), $server));
|
||||
$this->connected = false;
|
||||
$this->db = null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->db = @new mysqli($server,$user,$pass,$db);
|
||||
if(! mysqli_connect_errno()) {
|
||||
$this->connected = true;
|
||||
|
|
@ -61,7 +78,7 @@ class dba {
|
|||
}
|
||||
else {
|
||||
|
||||
/*
|
||||
/**
|
||||
* If dbfail.out exists, we will write any failed calls directly to it,
|
||||
* regardless of any logging that may or may nor be in effect.
|
||||
* These usually indicate SQL syntax errors that need to be resolved.
|
||||
|
|
|
|||
201
include/email.php
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
<?php
|
||||
|
||||
function email_connect($mailbox,$username,$password) {
|
||||
if(! function_exists('imap_open'))
|
||||
return false;
|
||||
|
||||
$mbox = imap_open($mailbox,$username,$password);
|
||||
|
||||
return $mbox;
|
||||
}
|
||||
|
||||
function email_poll($mbox,$email_addr) {
|
||||
|
||||
if(! ($mbox && $email_addr))
|
||||
return array();;
|
||||
|
||||
$search = imap_search($mbox,'FROM "' . $email_addr . '"', SE_UID);
|
||||
|
||||
$search2 = imap_search($mbox,'TO "' . $email_addr . '"', SE_UID);
|
||||
|
||||
if($search && $search2)
|
||||
$res = array_merge($search,$search2);
|
||||
elseif($search)
|
||||
$res = $search;
|
||||
else
|
||||
$res = $search2;
|
||||
|
||||
return (($res) ? $res : array());
|
||||
}
|
||||
|
||||
|
||||
function construct_mailbox_name($mailacct) {
|
||||
$ret = '{' . $mailacct['server'] . ((intval($mailacct['port'])) ? ':' . $mailacct['port'] : '');
|
||||
$ret .= (($mailacct['ssltype']) ? '/' . $mailacct['ssltype'] . '/novalidate-cert' : '');
|
||||
$ret .= '}' . $mailacct['mailbox'];
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function email_msg_meta($mbox,$uid) {
|
||||
$ret = (($mbox && $uid) ? imap_fetch_overview($mbox,$uid,FT_UID) : array(array()));
|
||||
return ((count($ret)) ? $ret[0] : array());
|
||||
}
|
||||
|
||||
function email_msg_headers($mbox,$uid) {
|
||||
$raw_header = (($mbox && $uid) ? imap_fetchheader($mbox,$uid,FT_UID) : '');
|
||||
$raw_header = str_replace("\r",'',$raw_header);
|
||||
$ret = array();
|
||||
$h = split("\n",$raw_header);
|
||||
if(count($h))
|
||||
foreach($h as $line ) {
|
||||
if (preg_match("/^[a-zA-Z]/", $line)) {
|
||||
$key = substr($line,0,strpos($line,':'));
|
||||
$value = substr($line,strpos($line,':')+1);
|
||||
|
||||
$last_entry = strtolower($key);
|
||||
$ret[$last_entry] = trim($value);
|
||||
}
|
||||
else {
|
||||
$ret[$last_entry] .= ' ' . trim($line);
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function email_get_msg($mbox,$uid) {
|
||||
$ret = array();
|
||||
|
||||
$struc = (($mbox && $uid) ? imap_fetchstructure($mbox,$uid,FT_UID) : null);
|
||||
|
||||
if(! $struc)
|
||||
return $ret;
|
||||
|
||||
if(! $struc->parts) {
|
||||
$ret['body'] = email_get_part($mbox,$uid,$struc,0);
|
||||
}
|
||||
else {
|
||||
foreach($struc->parts as $ptop => $p) {
|
||||
$x = email_get_part($mbox,$uid,$p,$ptop + 1);
|
||||
if($x)
|
||||
$ret['body'] = $x;
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// At the moment - only return plain/text.
|
||||
// Later we'll repackage inline images as data url's and make the HTML safe
|
||||
|
||||
function email_get_part($mbox,$uid,$p,$partno) {
|
||||
// $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple
|
||||
global $htmlmsg,$plainmsg,$charset,$attachments;
|
||||
|
||||
echo $partno;
|
||||
|
||||
// DECODE DATA
|
||||
$data = ($partno)
|
||||
? imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK)
|
||||
: imap_body($mbox,$uid,FT_UID|FT_PEEK);
|
||||
|
||||
// Any part may be encoded, even plain text messages, so check everything.
|
||||
if ($p->encoding==4)
|
||||
$data = quoted_printable_decode($data);
|
||||
elseif ($p->encoding==3)
|
||||
$data = base64_decode($data);
|
||||
|
||||
// PARAMETERS
|
||||
// get all parameters, like charset, filenames of attachments, etc.
|
||||
$params = array();
|
||||
if ($p->parameters)
|
||||
foreach ($p->parameters as $x)
|
||||
$params[strtolower($x->attribute)] = $x->value;
|
||||
if ($p->dparameters)
|
||||
foreach ($p->dparameters as $x)
|
||||
$params[strtolower($x->attribute)] = $x->value;
|
||||
|
||||
// ATTACHMENT
|
||||
// Any part with a filename is an attachment,
|
||||
// so an attached text file (type 0) is not mistaken as the message.
|
||||
|
||||
if ($params['filename'] || $params['name']) {
|
||||
// filename may be given as 'Filename' or 'Name' or both
|
||||
$filename = ($params['filename'])? $params['filename'] : $params['name'];
|
||||
// filename may be encoded, so see imap_mime_header_decode()
|
||||
$attachments[$filename] = $data; // this is a problem if two files have same name
|
||||
}
|
||||
|
||||
// TEXT
|
||||
if ($p->type == 0 && $data) {
|
||||
// Messages may be split in different parts because of inline attachments,
|
||||
// so append parts together with blank row.
|
||||
if (strtolower($p->subtype)=='plain')
|
||||
return (trim($data) ."\n\n");
|
||||
else
|
||||
$data = '';
|
||||
|
||||
// $htmlmsg .= $data ."<br><br>";
|
||||
$charset = $params['charset']; // assume all parts are same charset
|
||||
}
|
||||
|
||||
// EMBEDDED MESSAGE
|
||||
// Many bounce notifications embed the original message as type 2,
|
||||
// but AOL uses type 1 (multipart), which is not handled here.
|
||||
// There are no PHP functions to parse embedded messages,
|
||||
// so this just appends the raw source to the main message.
|
||||
// elseif ($p->type==2 && $data) {
|
||||
// $plainmsg .= $data."\n\n";
|
||||
// }
|
||||
|
||||
// SUBPART RECURSION
|
||||
if ($p->parts) {
|
||||
foreach ($p->parts as $partno0=>$p2) {
|
||||
$x = email_get_part($mbox,$uid,$p2,$partno . '.' . ($partno0+1)); // 1.2, 1.2.1, etc.
|
||||
if($x)
|
||||
return $x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function email_header_encode($in_str, $charset) {
|
||||
$out_str = $in_str;
|
||||
if ($out_str && $charset) {
|
||||
|
||||
// define start delimimter, end delimiter and spacer
|
||||
$end = "?=";
|
||||
$start = "=?" . $charset . "?B?";
|
||||
$spacer = $end . "\r\n " . $start;
|
||||
|
||||
// determine length of encoded text within chunks
|
||||
// and ensure length is even
|
||||
$length = 75 - strlen($start) - strlen($end);
|
||||
|
||||
/*
|
||||
[EDIT BY danbrown AT php DOT net: The following
|
||||
is a bugfix provided by (gardan AT gmx DOT de)
|
||||
on 31-MAR-2005 with the following note:
|
||||
"This means: $length should not be even,
|
||||
but divisible by 4. The reason is that in
|
||||
base64-encoding 3 8-bit-chars are represented
|
||||
by 4 6-bit-chars. These 4 chars must not be
|
||||
split between two encoded words, according
|
||||
to RFC-2047.
|
||||
*/
|
||||
$length = $length - ($length % 4);
|
||||
|
||||
// encode the string and split it into chunks
|
||||
// with spacers after each chunk
|
||||
$out_str = base64_encode($out_str);
|
||||
$out_str = chunk_split($out_str, $length, $spacer);
|
||||
|
||||
// remove trailing spacer and
|
||||
// add start and end delimiters
|
||||
$spacer = preg_quote($spacer);
|
||||
$out_str = preg_replace("/" . $spacer . "$/", "", $out_str);
|
||||
$out_str = $start . $out_str . $end;
|
||||
}
|
||||
return $out_str;
|
||||
}
|
||||
44
include/expire.php
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
require_once("boot.php");
|
||||
|
||||
function expire_run($argv, $argc){
|
||||
global $a, $db;
|
||||
|
||||
if(is_null($a)) {
|
||||
$a = new App;
|
||||
}
|
||||
|
||||
if(is_null($db)) {
|
||||
@include(".htconfig.php");
|
||||
require_once("dba.php");
|
||||
$db = new dba($db_host, $db_user, $db_pass, $db_data);
|
||||
unset($db_host, $db_user, $db_pass, $db_data);
|
||||
};
|
||||
|
||||
require_once('session.php');
|
||||
require_once('datetime.php');
|
||||
require_once('simplepie/simplepie.inc');
|
||||
require_once('include/items.php');
|
||||
require_once('include/Contact.php');
|
||||
|
||||
$a->set_baseurl(get_config('system','url'));
|
||||
|
||||
|
||||
logger('expire: start');
|
||||
|
||||
$r = q("SELECT `uid`,`username`,`expire` FROM `user` WHERE `expire` != 0");
|
||||
if(count($r)) {
|
||||
foreach($r as $rr) {
|
||||
logger('Expire: ' . $rr['username'] . ' interval: ' . $rr['expire'], LOGGER_DEBUG);
|
||||
item_expire($rr['uid'],$rr['expire']);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (array_search(__file__,get_included_files())===0){
|
||||
expire_run($argv,$argc);
|
||||
killme();
|
||||
}
|
||||
41
include/fcontact.php
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
|
||||
|
||||
function fcontact_store($url,$name,$photo) {
|
||||
|
||||
$nurl = str_replace(array('https:','//www.'), array('http:','//'), $url);
|
||||
|
||||
$r = q("SELECT `id` FROM `fcontact` WHERE `url` = '%s' LIMIT 1",
|
||||
dbesc($nurl)
|
||||
);
|
||||
|
||||
if(count($r))
|
||||
return $r[0]['id'];
|
||||
|
||||
$r = q("INSERT INTO `fcontact` ( `url`, `name`, `photo` ) VALUES ( '%s', '%s', '%s' ) ",
|
||||
dbesc($nurl),
|
||||
dbesc($name),
|
||||
dbesc($photo)
|
||||
);
|
||||
|
||||
if($r) {
|
||||
$r = q("SELECT `id` FROM `fcontact` WHERE `url` = '%s' LIMIT 1",
|
||||
dbesc($nurl)
|
||||
);
|
||||
if(count($r))
|
||||
return $r[0]['id'];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
function ffinder_store($uid,$cid,$fid) {
|
||||
$r = q("INSERT INTO `ffinder` ( `uid`, `cid`, `fid` ) VALUES ( %d, %d, %d ) ",
|
||||
intval($uid),
|
||||
intval($cid),
|
||||
intval($fid)
|
||||
);
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
|
@ -108,9 +108,9 @@ function group_get_members($gid) {
|
|||
if(intval($gid)) {
|
||||
$r = q("SELECT `group_member`.`contact-id`, `contact`.* FROM `group_member`
|
||||
LEFT JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id`
|
||||
WHERE `gid` = %d AND `group_member`.`uid` = %d",
|
||||
WHERE `gid` = %d AND `group_member`.`uid` = %d ORDER BY `contact`.`name` ASC ",
|
||||
intval($gid),
|
||||
intval($_SESSION['uid'])
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r))
|
||||
$ret = $r;
|
||||
|
|
@ -118,9 +118,25 @@ function group_get_members($gid) {
|
|||
return $ret;
|
||||
}
|
||||
|
||||
function group_public_members($gid) {
|
||||
$ret = 0;
|
||||
if(intval($gid)) {
|
||||
$r = q("SELECT `contact`.`id` AS `contact-id` FROM `group_member`
|
||||
LEFT JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id`
|
||||
WHERE `gid` = %d AND `group_member`.`uid` = %d
|
||||
AND `contact`.`network` != 'dfrn' AND `contact`.`network` != 'mail' AND `contact`.`network` != 'face' ",
|
||||
intval($gid),
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r))
|
||||
$ret = count($r);
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function group_side($every="contacts",$each="group") {
|
||||
|
||||
function group_side($every="contacts",$each="group",$edit = false) {
|
||||
|
||||
$o = '';
|
||||
|
||||
|
|
@ -150,7 +166,7 @@ EOT;
|
|||
);
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
$o .= " <li class=\"sidebar-group-li\"><a href=\"$each/{$rr['id']}\">{$rr['name']}</a></li>\r\n";
|
||||
$o .= ' <li class="sidebar-group-li">' . (($edit) ? "<a href=\"group/{$rr['id']}\" title=\"" . t('Edit') . "\" ><img src=\"images/spencil.gif\" alt=\"" . t('Edit') . "\"></a> " : "") . "<a href=\"$each/{$rr['id']}\">{$rr['name']}</a></li>\r\n";
|
||||
}
|
||||
$o .= " </ul>\r\n </div>\r\n</div>";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
|
||||
function hostxrd($hostname) {
|
||||
function hostxrd($baseurl) {
|
||||
|
||||
header("Content-type: text/xml");
|
||||
$tpl = file_get_contents('view/xrd_host.tpl');
|
||||
echo str_replace('$domain',$hostname,$tpl);
|
||||
echo str_replace('$domain',$baseurl,$tpl);
|
||||
session_write_close();
|
||||
exit();
|
||||
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0)
|
|||
|
||||
$items = $r;
|
||||
|
||||
$feed_template = load_view_file('view/atom_feed.tpl');
|
||||
$feed_template = get_markup_template('atom_feed.tpl');
|
||||
|
||||
$atom = '';
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ function construct_activity_object($item) {
|
|||
|
||||
if($item['object']) {
|
||||
$o = '<as:object>' . "\r\n";
|
||||
$r = @simplexml_load_string($item['object']);
|
||||
$r = parse_xml_string($item['object']);
|
||||
if($r->type)
|
||||
$o .= '<as:object-type>' . xmlify($r->type) . '</as:object-type>' . "\r\n";
|
||||
if($r->id)
|
||||
|
|
@ -206,7 +206,7 @@ function construct_activity_target($item) {
|
|||
|
||||
if($item['target']) {
|
||||
$o = '<as:target>' . "\r\n";
|
||||
$r = @simplexml_load_string($item['target']);
|
||||
$r = parse_xml_string($item['target']);
|
||||
if($r->type)
|
||||
$o .= '<as:object-type>' . xmlify($r->type) . '</as:object-type>' . "\r\n";
|
||||
if($r->id)
|
||||
|
|
@ -241,8 +241,14 @@ function get_atom_elements($feed,$item) {
|
|||
$res = array();
|
||||
|
||||
$author = $item->get_author();
|
||||
$res['author-name'] = unxmlify($author->get_name());
|
||||
$res['author-link'] = unxmlify($author->get_link());
|
||||
if($author) {
|
||||
$res['author-name'] = unxmlify($author->get_name());
|
||||
$res['author-link'] = unxmlify($author->get_link());
|
||||
}
|
||||
else {
|
||||
$res['author-name'] = unxmlify($feed->get_title());
|
||||
$res['author-link'] = unxmlify($feed->get_permalink());
|
||||
}
|
||||
$res['uri'] = unxmlify($item->get_id());
|
||||
$res['title'] = unxmlify($item->get_title());
|
||||
$res['body'] = unxmlify($item->get_content());
|
||||
|
|
@ -343,12 +349,14 @@ function get_atom_elements($feed,$item) {
|
|||
// the wild, by sanitising it and converting supported tags to bbcode before we rip out any remaining
|
||||
// html.
|
||||
|
||||
|
||||
if((strpos($res['body'],'<') !== false) || (strpos($res['body'],'>') !== false)) {
|
||||
|
||||
$res['body'] = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
|
||||
'[youtube]$1[/youtube]', $res['body']);
|
||||
|
||||
$res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
|
||||
'[youtube]$1[/youtube]', $res['body']);
|
||||
|
||||
$res['body'] = oembed_html2bbcode($res['body']);
|
||||
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
|
|
@ -401,6 +409,17 @@ function get_atom_elements($feed,$item) {
|
|||
$res['edited'] = $item->get_date('c');
|
||||
|
||||
|
||||
// Disallow time travelling posts
|
||||
|
||||
$d1 = strtotime($res['created']);
|
||||
$d2 = strtotime($res['edited']);
|
||||
$d3 = strtotime('now');
|
||||
|
||||
if($d1 > $d3)
|
||||
$res['created'] = datetime_convert();
|
||||
if($d2 > $d3)
|
||||
$res['edited'] = datetime_convert();
|
||||
|
||||
$rawowner = $item->get_item_tags(NAMESPACE_DFRN, 'owner');
|
||||
if($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])
|
||||
$res['owner-name'] = unxmlify($rawowner[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']);
|
||||
|
|
@ -440,7 +459,45 @@ function get_atom_elements($feed,$item) {
|
|||
if((x($res,'verb')) && ($res['verb'] === 'http://ostatus.org/schema/1.0/unfollow'))
|
||||
$res['verb'] = ACTIVITY_UNFOLLOW;
|
||||
|
||||
|
||||
|
||||
$cats = $item->get_categories();
|
||||
if($cats) {
|
||||
$tag_arr = array();
|
||||
foreach($cats as $cat) {
|
||||
$term = $cat->get_term();
|
||||
if(! $term)
|
||||
$term = $cat->get_label();
|
||||
$scheme = $cat->get_scheme();
|
||||
if($scheme && $term && stristr($scheme,'X-DFRN:'))
|
||||
$tag_arr[] = substr($scheme,7,1) . '[url=' . unxmlify(substr($scheme,9)) . ']' . unxmlify($term) . '[/url]';
|
||||
elseif($term)
|
||||
$tag_arr[] = notags(trim($term));
|
||||
}
|
||||
$res['tag'] = implode(',', $tag_arr);
|
||||
}
|
||||
|
||||
$attach = $item->get_enclosures();
|
||||
if($attach) {
|
||||
$att_arr = array();
|
||||
foreach($attach as $att) {
|
||||
$len = intval($att->get_length());
|
||||
$link = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att->get_link()))));
|
||||
$title = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att->get_title()))));
|
||||
$type = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att->get_type()))));
|
||||
if(strpos($type,';'))
|
||||
$type = substr($type,0,strpos($type,';'));
|
||||
if((! $link) || (strpos($link,'http') !== 0))
|
||||
continue;
|
||||
|
||||
if(! $title)
|
||||
$title = ' ';
|
||||
if(! $type)
|
||||
$type = 'application/octet-stream';
|
||||
|
||||
$att_arr[] = '[attach]href="' . $link . '" size="' . $len . '" type="' . $type . '" title="' . $title . '"[/attach]';
|
||||
}
|
||||
$res['attach'] = implode(',', $att_arr);
|
||||
}
|
||||
|
||||
$rawobj = $item->get_item_tags(NAMESPACE_ACTIVITY, 'object');
|
||||
|
||||
|
|
@ -467,6 +524,10 @@ function get_atom_elements($feed,$item) {
|
|||
$body = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
|
||||
'[youtube]$1[/youtube]', $body);
|
||||
|
||||
$res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
|
||||
'[youtube]$1[/youtube]', $res['body']);
|
||||
|
||||
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
$config->set('Cache.DefinitionImpl', null);
|
||||
|
||||
|
|
@ -506,6 +567,9 @@ function get_atom_elements($feed,$item) {
|
|||
$body = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
|
||||
'[youtube]$1[/youtube]', $body);
|
||||
|
||||
$res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
|
||||
'[youtube]$1[/youtube]', $res['body']);
|
||||
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
$config->set('Cache.DefinitionImpl', null);
|
||||
|
||||
|
|
@ -598,6 +662,8 @@ function item_store($arr,$force_parent = false) {
|
|||
$arr['deny_gid'] = ((x($arr,'deny_gid')) ? trim($arr['deny_gid']) : '');
|
||||
$arr['private'] = ((x($arr,'private')) ? intval($arr['private']) : 0 );
|
||||
$arr['body'] = ((x($arr,'body')) ? trim($arr['body']) : '');
|
||||
$arr['tag'] = ((x($arr,'tag')) ? notags(trim($arr['tag'])) : '');
|
||||
$arr['attach'] = ((x($arr,'attach')) ? notags(trim($arr['attach'])) : '');
|
||||
|
||||
if($arr['parent-uri'] === $arr['uri']) {
|
||||
$parent_id = 0;
|
||||
|
|
@ -645,6 +711,7 @@ function item_store($arr,$force_parent = false) {
|
|||
$parent_id = 0;
|
||||
$arr['thr-parent'] = $arr['parent-uri'];
|
||||
$arr['parent-uri'] = $arr['uri'];
|
||||
$arr['gravity'] = 0;
|
||||
}
|
||||
else {
|
||||
logger('item_store: item parent was not found - ignoring item');
|
||||
|
|
@ -702,6 +769,18 @@ function item_store($arr,$force_parent = false) {
|
|||
intval($current_post)
|
||||
);
|
||||
|
||||
/**
|
||||
* If this is now the last-child, force all _other_ children of this parent to *not* be last-child
|
||||
*/
|
||||
|
||||
if($arr['last-child']) {
|
||||
$r = q("UPDATE `item` SET `last-child` = 0 WHERE `parent-uri` = '%s' AND `uid` = %d AND `id` != %d",
|
||||
dbesc($arr['uri']),
|
||||
intval($arr['uid']),
|
||||
intval($current_post)
|
||||
);
|
||||
}
|
||||
|
||||
return $current_post;
|
||||
}
|
||||
|
||||
|
|
@ -739,7 +818,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
|
|||
if(! $rino_enable)
|
||||
$rino = 0;
|
||||
|
||||
$url = $contact['notify'] . '?dfrn_id=' . $idtosend . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . (($rino) ? '&rino=1' : '');
|
||||
$url = $contact['notify'] . '&dfrn_id=' . $idtosend . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . (($rino) ? '&rino=1' : '');
|
||||
|
||||
logger('dfrn_deliver: ' . $url);
|
||||
|
||||
|
|
@ -760,7 +839,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
|
|||
return 3;
|
||||
}
|
||||
|
||||
$res = simplexml_load_string($xml);
|
||||
$res = parse_xml_string($xml);
|
||||
|
||||
if((intval($res->status) != 0) || (! strlen($res->challenge)) || (! strlen($res->dfrn_id)))
|
||||
return (($res->status) ? $res->status : 3);
|
||||
|
|
@ -799,14 +878,14 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
|
|||
if($dissolve)
|
||||
$postvars['dissolve'] = '1';
|
||||
|
||||
if(($contact['rel']) && ($contact['rel'] != REL_FAN) && (! $contact['blocked']) && (! $contact['readonly'])) {
|
||||
$postvars['data'] = $atom;
|
||||
}
|
||||
elseif($owner['page-flags'] == PAGE_COMMUNITY) {
|
||||
|
||||
if((($contact['rel']) && ($contact['rel'] != REL_FAN) && (! $contact['blocked'])) || ($owner['page-flags'] == PAGE_COMMUNITY)) {
|
||||
$postvars['data'] = $atom;
|
||||
$postvars['perm'] = 'rw';
|
||||
}
|
||||
else {
|
||||
$postvars['data'] = str_replace('<dfrn:comment-allow>1','<dfrn:comment-allow>0',$atom);
|
||||
$postvars['perm'] = 'r';
|
||||
}
|
||||
|
||||
if($rino && $rino_allowed && (! $dissolve)) {
|
||||
|
|
@ -848,17 +927,15 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
|
|||
if((! $curl_stat) || (! strlen($xml)))
|
||||
return(-1); // timed out
|
||||
|
||||
|
||||
if(strpos($xml,'<?xml') === false) {
|
||||
logger('dfrn_deliver: phase 2: no valid XML returned');
|
||||
logger('dfrn_deliver: phase 2: returned XML: ' . $xml, LOGGER_DATA);
|
||||
return 3;
|
||||
}
|
||||
|
||||
$res = simplexml_load_string($xml);
|
||||
$res = parse_xml_string($xml);
|
||||
|
||||
return $res->status;
|
||||
|
||||
return $res->status;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -878,7 +955,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
|
|||
*
|
||||
*/
|
||||
|
||||
function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
|
||||
function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_feed = false) {
|
||||
|
||||
require_once('simplepie/simplepie.inc');
|
||||
|
||||
|
|
@ -893,6 +970,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
|
|||
if($feed->error())
|
||||
logger('consume_feed: Error parsing XML: ' . $feed->error());
|
||||
|
||||
$permalink = $feed->get_permalink();
|
||||
|
||||
// Check at the feed level for updated contact name and/or photo
|
||||
|
||||
|
|
@ -1137,6 +1215,13 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
|
|||
$item_id = $item->get_id();
|
||||
$datarray = get_atom_elements($feed,$item);
|
||||
|
||||
if(! x($datarray,'author-name'))
|
||||
$datarray['author-name'] = $contact['name'];
|
||||
if(! x($datarray,'author-link'))
|
||||
$datarray['author-link'] = $contact['url'];
|
||||
if(! x($datarray,'author-avatar'))
|
||||
$datarray['author-avatar'] = $contact['thumb'];
|
||||
|
||||
$r = q("SELECT `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($item_id),
|
||||
intval($importer['uid'])
|
||||
|
|
@ -1207,8 +1292,18 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
|
|||
// Head post of a conversation. Have we seen it? If not, import it.
|
||||
|
||||
$item_id = $item->get_id();
|
||||
|
||||
$datarray = get_atom_elements($feed,$item);
|
||||
|
||||
if(is_array($contact)) {
|
||||
if(! x($datarray,'author-name'))
|
||||
$datarray['author-name'] = $contact['name'];
|
||||
if(! x($datarray,'author-link'))
|
||||
$datarray['author-link'] = $contact['url'];
|
||||
if(! x($datarray,'author-avatar'))
|
||||
$datarray['author-avatar'] = $contact['thumb'];
|
||||
}
|
||||
|
||||
$r = q("SELECT `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($item_id),
|
||||
intval($importer['uid'])
|
||||
|
|
@ -1252,7 +1347,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
|
|||
if(! is_array($contact))
|
||||
return;
|
||||
|
||||
if($contact['network'] === 'stat') {
|
||||
if($contact['network'] === 'stat' || stristr($permalink,'twitter.com')) {
|
||||
if(strlen($datarray['title']))
|
||||
unset($datarray['title']);
|
||||
$datarray['last-child'] = 1;
|
||||
|
|
@ -1299,8 +1394,8 @@ function new_follower($importer,$contact,$datarray,$item) {
|
|||
// create contact record - set to readonly
|
||||
|
||||
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `name`, `nick`, `photo`, `network`, `rel`,
|
||||
`blocked`, `readonly`, `pending` )
|
||||
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, 0, 1, 1 ) ",
|
||||
`blocked`, `readonly`, `pending`, `writable` )
|
||||
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, 0, 1, 1, 1 ) ",
|
||||
intval($importer['uid']),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($url),
|
||||
|
|
@ -1336,7 +1431,7 @@ function new_follower($importer,$contact,$datarray,$item) {
|
|||
$a = get_app();
|
||||
if(count($r)) {
|
||||
if(($r[0]['notify-flags'] & NOTIFY_INTRO) && ($r[0]['page-flags'] == PAGE_NORMAL)) {
|
||||
$email_tpl = load_view_file('view/follow_notify_eml.tpl');
|
||||
$email_tpl = get_intltext_template('follow_notify_eml.tpl');
|
||||
$email = replace_macros($email_tpl, array(
|
||||
'$requestor' => ((strlen($name)) ? $name : t('[Name Withheld]')),
|
||||
'$url' => $url,
|
||||
|
|
@ -1347,7 +1442,9 @@ function new_follower($importer,$contact,$datarray,$item) {
|
|||
$res = mail($r[0]['email'],
|
||||
t("You have a new follower at ") . $a->config['sitename'],
|
||||
$email,
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1426,17 +1523,24 @@ function atom_author($tag,$name,$uri,$h,$w,$photo) {
|
|||
|
||||
function atom_entry($item,$type,$author,$owner,$comment = false) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
if($item['deleted'])
|
||||
return '<at:deleted-entry ref="' . xmlify($item['uri']) . '" when="' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '" />' . "\r\n";
|
||||
|
||||
$a = get_app();
|
||||
|
||||
if($item['allow_cid'] || $item['allow_gid'] || $item['deny_cid'] || $item['deny_gid'])
|
||||
$body = fix_private_photos($item['body'],$owner['uid']);
|
||||
else
|
||||
$body = $item['body'];
|
||||
|
||||
|
||||
$o = "\r\n\r\n<entry>\r\n";
|
||||
|
||||
if(is_array($author))
|
||||
$o .= atom_author('author',$author['name'],$author['url'],80,80,$author['thumb']);
|
||||
else
|
||||
$o .= atom_author('author',$item['name'],$item['url'],80,80,$item['thumb']);
|
||||
$o .= atom_author('author',(($item['author-name']) ? $item['author-name'] : $item['name']),(($item['author-link']) ? $item['author-link'] : $item['url']),80,80,(($item['author-avatar']) ? $item['author-avatar'] : $item['thumb']));
|
||||
if(strlen($item['owner-name']))
|
||||
$o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']);
|
||||
|
||||
|
|
@ -1447,8 +1551,8 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
|
|||
$o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n";
|
||||
$o .= '<published>' . xmlify(datetime_convert('UTC','UTC',$item['created'] . '+00:00',ATOM_TIME)) . '</published>' . "\r\n";
|
||||
$o .= '<updated>' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '</updated>' . "\r\n";
|
||||
$o .= '<dfrn:env>' . base64url_encode($item['body'], true) . '</dfrn:env>' . "\r\n";
|
||||
$o .= '<content type="' . $type . '" >' . xmlify(($type === 'html') ? bbcode($item['body']) : $item['body']) . '</content>' . "\r\n";
|
||||
$o .= '<dfrn:env>' . base64url_encode($body, true) . '</dfrn:env>' . "\r\n";
|
||||
$o .= '<content type="' . $type . '" >' . xmlify(($type === 'html') ? bbcode($body) : $body) . '</content>' . "\r\n";
|
||||
$o .= '<link rel="alternate" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\r\n";
|
||||
if($comment)
|
||||
$o .= '<dfrn:comment-allow>' . intval($item['last-child']) . '</dfrn:comment-allow>' . "\r\n";
|
||||
|
|
@ -1473,6 +1577,15 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
|
|||
if(strlen($actarg))
|
||||
$o .= $actarg;
|
||||
|
||||
$tags = item_getfeedtags($item);
|
||||
if(count($tags)) {
|
||||
foreach($tags as $t) {
|
||||
$o .= '<category scheme="X-DFRN:' . xmlify($t[0]) . ':' . xmlify($t[1]) . '" term="' . xmlify($t[2]) . '" />' . "\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
$o .= item_getfeedattach($item);
|
||||
|
||||
$mentioned = get_mentions($item);
|
||||
if($mentioned)
|
||||
$o .= $mentioned;
|
||||
|
|
@ -1483,4 +1596,125 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
|
|||
|
||||
return $o;
|
||||
}
|
||||
|
||||
function fix_private_photos($s,$uid) {
|
||||
$a = get_app();
|
||||
logger('fix_private_photos');
|
||||
|
||||
if(preg_match("/\[img\](.+?)\[\/img\]/is",$s,$matches)) {
|
||||
$image = $matches[1];
|
||||
logger('fix_private_photos: found photo ' . $image);
|
||||
if(stristr($image ,$a->get_baseurl() . '/photo/')) {
|
||||
$i = basename($image);
|
||||
$i = str_replace('.jpg','',$i);
|
||||
$x = strpos($i,'-');
|
||||
if($x) {
|
||||
$res = substr($i,$x+1);
|
||||
$i = substr($i,0,$x);
|
||||
$r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` = %d AND `uid` = %d",
|
||||
dbesc($i),
|
||||
intval($res),
|
||||
intval($uid)
|
||||
);
|
||||
if(count($r)) {
|
||||
logger('replacing photo');
|
||||
$s = str_replace($image, 'data:image/jpg;base64,' . base64_encode($r[0]['data']), $s);
|
||||
}
|
||||
}
|
||||
logger('fix_private_photos: replaced: ' . $s, LOGGER_DATA);
|
||||
}
|
||||
}
|
||||
return($s);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function item_getfeedtags($item) {
|
||||
$ret = array();
|
||||
$matches = false;
|
||||
$cnt = preg_match_all('|\#\[url\=(.+?)\](.+?)\[\/url\]|',$item['tag'],$matches);
|
||||
if($cnt) {
|
||||
for($x = 0; $x < count($matches); $x ++) {
|
||||
if($matches[1][$x])
|
||||
$ret[] = array('#',$matches[1][$x], $matches[2][$x]);
|
||||
}
|
||||
}
|
||||
$matches = false;
|
||||
$cnt = preg_match_all('|\@\[url\=(.+?)\](.+?)\[\/url\]|',$item['tag'],$matches);
|
||||
if($cnt) {
|
||||
for($x = 0; $x < count($matches); $x ++) {
|
||||
if($matches[1][$x])
|
||||
$ret[] = array('#',$matches[1][$x], $matches[2][$x]);
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function item_getfeedattach($item) {
|
||||
$ret = '';
|
||||
$arr = explode(',',$item['attach']);
|
||||
if(count($arr)) {
|
||||
foreach($arr as $r) {
|
||||
$matches = false;
|
||||
$cnt = preg_match('|\[attach\]href=\"(.+?)\" size=\"(.+?)\" type=\"(.+?)\" title=\"(.+?)\"\[\/attach\]|',$r,$matches);
|
||||
if($cnt) {
|
||||
$ret .= '<link rel="enclosure" href="' . xmlify($matches[1]) . '" type="' . xmlify($matches[3]) . '" ';
|
||||
if(intval($matches[2]))
|
||||
$ret .= 'size="' . intval($matches[2]) . '" ';
|
||||
if($matches[4] !== ' ')
|
||||
$ret .= 'title="' . xmlify(trim($matches[4])) . '" ';
|
||||
$ret .= ' />' . "\r\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function item_expire($uid,$days) {
|
||||
|
||||
if((! $uid) || (! $days))
|
||||
return;
|
||||
|
||||
$r = q("SELECT * FROM `item`
|
||||
WHERE `uid` = %d
|
||||
AND `created` < UTC_TIMESTAMP() - INTERVAL %d DAY
|
||||
AND `id` = `parent`
|
||||
AND `deleted` = 0",
|
||||
intval($uid),
|
||||
intval($days)
|
||||
);
|
||||
|
||||
if(! count($r))
|
||||
return;
|
||||
|
||||
logger('expire: # items=' . count($r) );
|
||||
|
||||
foreach($r as $item) {
|
||||
|
||||
// Only expire posts, not photos and photo comments
|
||||
|
||||
if(strlen($item['resource-id']))
|
||||
continue;
|
||||
|
||||
$r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
intval($item['id'])
|
||||
);
|
||||
|
||||
// kill the kids
|
||||
|
||||
$r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($item['parent-uri']),
|
||||
intval($item['uid'])
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
proc_run('php',"include/notifier.php","expire","$uid");
|
||||
|
||||
}
|
||||
103
include/main.js
|
|
@ -26,6 +26,8 @@
|
|||
var pr = 0;
|
||||
var liking = 0;
|
||||
var in_progress = false;
|
||||
var langSelect = false;
|
||||
var commentBusy = false;
|
||||
|
||||
$(document).ready(function() {
|
||||
$.ajaxSetup({cache: false});
|
||||
|
|
@ -45,6 +47,18 @@
|
|||
$('#pause').html('');
|
||||
}
|
||||
}
|
||||
// F8 - show/hide language selector
|
||||
if(event.keyCode == '119') {
|
||||
if(langSelect) {
|
||||
langSelect = false;
|
||||
$('#language-selector').hide();
|
||||
}
|
||||
else {
|
||||
langSelect = true;
|
||||
$('#language-selector').show();
|
||||
}
|
||||
}
|
||||
|
||||
// this is shift-home on FF, but $ on IE, disabling until I figure out why the diff.
|
||||
// update: incompatible usage of onKeyDown vs onKeyPress
|
||||
// if(event.keyCode == '36' && event.shiftKey == true) {
|
||||
|
|
@ -77,26 +91,26 @@
|
|||
$.get("ping",function(data) {
|
||||
$(data).find('result').each(function() {
|
||||
var net = $(this).find('net').text();
|
||||
if(net == 0) { net = ''; }
|
||||
if(net == 0) { net = ''; $('#net-update').hide() } else { $('#net-update').show() }
|
||||
$('#net-update').html(net);
|
||||
var home = $(this).find('home').text();
|
||||
if(home == 0) { home = ''; }
|
||||
if(home == 0) { home = ''; $('#home-update').hide() } else { $('#home-update').show() }
|
||||
$('#home-update').html(home);
|
||||
var mail = $(this).find('mail').text();
|
||||
if(mail == 0) { mail = ''; }
|
||||
if(mail == 0) { mail = ''; $('#mail-update').hide() } else { $('#mail-update').show() }
|
||||
$('#mail-update').html(mail);
|
||||
var intro = $(this).find('intro').text();
|
||||
var register = $(this).find('register').text();
|
||||
if(intro == 0) { intro = ''; }
|
||||
if(register != 0 && intro != '') { intro = intro+'/'+register; }
|
||||
if(register != 0 && intro == '') { intro = '0/'+register; }
|
||||
if (intro == '') { $('#notify-update').hide() } else { $('#notify-update').show() }
|
||||
$('#notify-update').html(intro);
|
||||
|
||||
});
|
||||
}) ;
|
||||
}
|
||||
timer = setTimeout(NavUpdate,30000);
|
||||
|
||||
}
|
||||
|
||||
function liveUpdate() {
|
||||
|
|
@ -113,12 +127,21 @@
|
|||
|
||||
$.get(update_url,function(data) {
|
||||
in_progress = false;
|
||||
$('.ccollapse-wrapper',data).each(function() {
|
||||
var ident = $(this).attr('id');
|
||||
var is_hidden = $('#' + ident).is(':hidden');
|
||||
if($('#' + ident).length) {
|
||||
$('#' + ident).replaceWith($(this));
|
||||
if(is_hidden)
|
||||
$('#' + ident).hide();
|
||||
}
|
||||
});
|
||||
$('.wall-item-outside-wrapper',data).each(function() {
|
||||
var ident = $(this).attr('id');
|
||||
if($('#' + ident).length == 0) {
|
||||
$('img',this).each(function() {
|
||||
$(this).attr('src',$(this).attr('dst'));
|
||||
});
|
||||
if($('#' + ident).length == 0) {
|
||||
$('img',this).each(function() {
|
||||
$(this).attr('src',$(this).attr('dst'));
|
||||
});
|
||||
$('#' + prev).after($(this));
|
||||
}
|
||||
else {
|
||||
|
|
@ -127,29 +150,26 @@
|
|||
$('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper'));
|
||||
$('#' + ident + ' ' + '.wall-item-like').replaceWith($(this).find('.wall-item-like'));
|
||||
$('#' + ident + ' ' + '.wall-item-dislike').replaceWith($(this).find('.wall-item-dislike'));
|
||||
$('#' + ident + ' ' + '.my-comment-photo').each(function() {
|
||||
$(this).attr('src',$(this).attr('dst'));
|
||||
});
|
||||
|
||||
|
||||
$('#' + ident + ' ' + '.my-comment-photo').each(function() {
|
||||
$(this).attr('src',$(this).attr('dst'));
|
||||
});
|
||||
}
|
||||
prev = ident;
|
||||
});
|
||||
$('.like-rotator').hide();
|
||||
if(commentBusy) {
|
||||
commentBusy = false;
|
||||
$('body').css('cursor', 'auto');
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function imgbright(node) {
|
||||
$(node).attr("src",$(node).attr("src").replace('hide','show'));
|
||||
$(node).css('width',24);
|
||||
$(node).css('height',24);
|
||||
$(node).removeClass("drophide").addClass("drop");
|
||||
}
|
||||
|
||||
function imgdull(node) {
|
||||
$(node).attr("src",$(node).attr("src").replace('show','hide'));
|
||||
$(node).css('width',16);
|
||||
$(node).css('height',16);
|
||||
$(node).removeClass("drop").addClass("drophide");
|
||||
}
|
||||
|
||||
// Since our ajax calls are asynchronous, we will give a few
|
||||
|
|
@ -215,6 +235,8 @@
|
|||
}
|
||||
|
||||
function post_comment(id) {
|
||||
commentBusy = true;
|
||||
$('body').css('cursor', 'wait');
|
||||
$.post(
|
||||
"item",
|
||||
$("#comment-edit-form-" + id).serialize(),
|
||||
|
|
@ -231,10 +253,49 @@
|
|||
if(data.reload) {
|
||||
window.location.href=data.reload;
|
||||
}
|
||||
|
||||
},
|
||||
"json"
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function bin2hex(s){
|
||||
// Converts the binary representation of data to hex
|
||||
//
|
||||
// version: 812.316
|
||||
// discuss at: http://phpjs.org/functions/bin2hex
|
||||
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||
// + bugfixed by: Onno Marsman
|
||||
// + bugfixed by: Linuxworld
|
||||
// * example 1: bin2hex('Kev');
|
||||
// * returns 1: '4b6576'
|
||||
// * example 2: bin2hex(String.fromCharCode(0x00));
|
||||
// * returns 2: '00'
|
||||
var v,i, f = 0, a = [];
|
||||
s += '';
|
||||
f = s.length;
|
||||
|
||||
for (i = 0; i<f; i++) {
|
||||
a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");
|
||||
}
|
||||
|
||||
return a.join('');
|
||||
}
|
||||
|
||||
function groupChangeMember(gid,cid) {
|
||||
$('body .fakelink').css('cursor', 'wait');
|
||||
$.get('group/' + gid + '/' + cid, function(data) {
|
||||
$('#group-update-wrapper').html(data);
|
||||
$('body .fakelink').css('cursor', 'auto');
|
||||
});
|
||||
}
|
||||
|
||||
function profChangeMember(gid,cid) {
|
||||
$('body .fakelink').css('cursor', 'wait');
|
||||
$.get('profperm/' + gid + '/' + cid, function(data) {
|
||||
$('#prof-update-wrapper').html(data);
|
||||
$('body .fakelink').css('cursor', 'auto');
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,24 +27,23 @@ function nav(&$a) {
|
|||
|
||||
$myident = ((is_array($a->user) && isset($a->user['nickname'])) ? $a->user['nickname'] . '@' : '');
|
||||
|
||||
$a->page['nav'] .= '<div id="site-location">' . $myident . substr($a->get_baseurl(),strpos($a->get_baseurl(),'//') + 2 ) . '</div>';
|
||||
$sitelocation = $myident . substr($a->get_baseurl(),strpos($a->get_baseurl(),'//') + 2 );
|
||||
|
||||
|
||||
// nav links: array of array('href', 'text', 'extra css classes')
|
||||
$nav = Array();
|
||||
|
||||
/**
|
||||
* Display login or logout
|
||||
*/
|
||||
|
||||
if(local_user()) {
|
||||
$a->page['nav'] .= '<a id="nav-logout-link" class="nav-link" href="logout">' . t('Logout') . "</a>\r\n";
|
||||
$nav['logout'] = Array('logout',t('Logout'), "");
|
||||
}
|
||||
else {
|
||||
$a->page['nav'] .= '<a id="nav-login-link" class="nav-login-link';
|
||||
if ($a->module == 'login') { $a->page['nav'] .= ' nav-selected'; }
|
||||
|
||||
$a->page['nav'] .= '" href="login">' . t('Login') . "</a>\r\n";
|
||||
$nav['login'] = Array('login',t('Login'), ($a->module == 'login'?'nav-selected':''));
|
||||
}
|
||||
|
||||
$a->page['nav'] .= "<span id=\"nav-link-wrapper\" >\r\n";
|
||||
|
||||
/**
|
||||
* "Home" should also take you home from an authenticated remote profile connection
|
||||
|
|
@ -53,18 +52,22 @@ function nav(&$a) {
|
|||
$homelink = ((x($_SESSION,'visitor_home')) ? $_SESSION['visitor_home'] : '');
|
||||
|
||||
if(($a->module != 'home') && (! (local_user())))
|
||||
$a->page['nav'] .= '<a id="nav-home-link" class="nav-commlink" href="' . $homelink . '">' . t('Home') . "</a>\r\n";
|
||||
$nav['home'] = array($homelink, t('Home'), "");
|
||||
|
||||
|
||||
if(($a->config['register_policy'] == REGISTER_OPEN) && (! local_user()) && (! remote_user()))
|
||||
$a->page['nav'] .= '<a id="nav-register-link" class="nav-commlink" href="register" >'
|
||||
. t('Register') . "</a>\r\n";
|
||||
$nav['register'] = array('register',t('Register'), "");
|
||||
|
||||
if(strlen($a->apps)) {
|
||||
$a->page['nav'] .= '<a id="nav-apps-link" class="nav-link" href="apps">' . t('Apps') . "</a>\r\n";
|
||||
}
|
||||
$help_url = $a->get_baseurl() . '/help';
|
||||
|
||||
$a->page['nav'] .= '<a id="nav-search-link" class="nav-link" href="search">' . t('Search') . "</a>\r\n";
|
||||
if(! get_config('system','hide-help'))
|
||||
$nav['help'] = array($help_url, t('Help'), "");
|
||||
|
||||
|
||||
|
||||
$nav['apps'] = array('apps', t('Apps'), "");
|
||||
|
||||
$nav['search'] = array('search', t('Search'), "");
|
||||
|
||||
$gdirpath = 'directory';
|
||||
|
||||
|
|
@ -74,7 +77,7 @@ function nav(&$a) {
|
|||
$gdirpath = $gdir;
|
||||
}
|
||||
|
||||
$a->page['nav'] .= '<a id="nav-directory-link" class="nav-link" href="' . $gdirpath . '">' . t('Directory') . "</a>\r\n";
|
||||
$nav['directory'] = array($gdirpath, t('Directory'), "");
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -84,36 +87,30 @@ function nav(&$a) {
|
|||
|
||||
if(local_user()) {
|
||||
|
||||
$a->page['nav'] .= '<a id="nav-network-link" class="nav-commlink" href="network">' . t('Network')
|
||||
. '</a><span id="net-update" class="nav-ajax-left"></span>' . "\r\n";
|
||||
$nav['network'] = array('network', t('Network'), "");
|
||||
|
||||
$nav['home'] = array('profile/' . $a->user['nickname'], t('Home'), "");
|
||||
|
||||
$a->page['nav'] .= '<a id="nav-home-link" class="nav-commlink" href="profile/' . $a->user['nickname'] . '">'
|
||||
. t('Home') . '</a><span id="home-update" class="nav-ajax-left"></span>' . "\r\n";
|
||||
|
||||
/* only show friend requests for normal pages. Other page types have automatic friendship. */
|
||||
|
||||
if($_SESSION['page_flags'] == PAGE_NORMAL) {
|
||||
$a->page['nav'] .= '<a id="nav-notify-link" class="nav-commlink" href="notifications">' . t('Notifications')
|
||||
. '</a><span id="notify-update" class="nav-ajax-left"></span>' . "\r\n";
|
||||
$nav['notifications'] = array('notifications', t('Notifications'), "");
|
||||
}
|
||||
|
||||
$a->page['nav'] .= '<a id="nav-messages-link" class="nav-commlink" href="message">' . t('Messages')
|
||||
. '</a><span id="mail-update" class="nav-ajax-left"></span>' . "\r\n";
|
||||
$nav['messages'] = array('message', t('Messages'), "");
|
||||
|
||||
if(is_array($a->identities) && count($a->identities) > 1) {
|
||||
$a->page['nav'] .= '<a id="nav-manage-link" class="nav-commlink" href="manage">' . t('Manage') . '</a>' . "\r\n";
|
||||
$nav['manage'] = array('manage', t('Manage'), "");
|
||||
}
|
||||
|
||||
$a->page['nav'] .= '<a id="nav-settings-link" class="nav-link" href="settings">' . t('Settings') . "</a>\r\n";
|
||||
|
||||
$a->page['nav'] .= '<a id="nav-profiles-link" class="nav-link" href="profiles">' . t('Profiles') . "</a>\r\n";
|
||||
|
||||
$a->page['nav'] .= '<a id="nav-contacts-link" class="nav-link" href="contacts">' . t('Contacts') . "</a>\r\n";
|
||||
$nav['settings'] = array('settings', t('Settings'),"");
|
||||
$nav['profiles'] = array('profiles', t('Profiles'),"");
|
||||
$nav['contacts'] = array('contacts', t('Contacts'),"");
|
||||
|
||||
|
||||
}
|
||||
|
||||
$a->page['nav'] .= "</span>\r\n<span id=\"nav-end\"></span>\r\n";
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -124,10 +121,17 @@ function nav(&$a) {
|
|||
$banner = get_config('system','banner');
|
||||
|
||||
if($banner === false)
|
||||
$banner .= '<a href="http://friendika.com"><img id="logo-img" src="images/friendika-32.png" alt="logo" /></a><span id="logo-text"><a href="http://friendika.com">Friendika</a></span>';
|
||||
$banner .= '<a href="http://project.friendika.com"><img id="logo-img" src="images/friendika-32.png" alt="logo" /></a><span id="logo-text"><a href="http://project.friendika.com">Friendika</a></span>';
|
||||
|
||||
|
||||
$a->page['nav'] .= '<span id="banner">' . $banner . '</span>';
|
||||
$tpl = get_markup_template('nav.tpl');
|
||||
|
||||
$a->page['nav'] .= replace_macros($tpl, array(
|
||||
'$langselector' => lang_selector(),
|
||||
'$sitelocation' => $sitelocation,
|
||||
'$nav' => $nav,
|
||||
'$banner' => $banner,
|
||||
));
|
||||
|
||||
call_hooks('page_header', $a->page['nav']);
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ function notifier_run($argv, $argc){
|
|||
require_once('include/items.php');
|
||||
require_once('include/bbcode.php');
|
||||
|
||||
load_hooks();
|
||||
|
||||
if($argc < 3)
|
||||
return;
|
||||
|
||||
|
|
@ -40,6 +42,7 @@ function notifier_run($argv, $argc){
|
|||
break;
|
||||
}
|
||||
|
||||
$expire = false;
|
||||
$top_level = false;
|
||||
$recipients = array();
|
||||
$url_recipients = array();
|
||||
|
|
@ -57,10 +60,21 @@ function notifier_run($argv, $argc){
|
|||
$item = $message[0];
|
||||
|
||||
}
|
||||
elseif($cmd === 'expire') {
|
||||
$expire = true;
|
||||
$items = q("SELECT * FROM `item` WHERE `uid` = %d AND `wall` = 1
|
||||
AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP - INTERVAL 10 MINUTE",
|
||||
intval($item_id)
|
||||
);
|
||||
$uid = $item_id;
|
||||
$item_id = 0;
|
||||
if(! count($items))
|
||||
return;
|
||||
}
|
||||
else {
|
||||
|
||||
// find ancestors
|
||||
$r = q("SELECT `parent`, `uid`, `edited` FROM `item` WHERE `id` = %d LIMIT 1",
|
||||
$r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
|
||||
intval($item_id)
|
||||
);
|
||||
|
||||
|
|
@ -68,6 +82,7 @@ function notifier_run($argv, $argc){
|
|||
return;
|
||||
}
|
||||
|
||||
$parent_item = $r[0];
|
||||
$parent_id = intval($r[0]['parent']);
|
||||
$uid = $r[0]['uid'];
|
||||
$updated = $r[0]['edited'];
|
||||
|
|
@ -76,11 +91,10 @@ function notifier_run($argv, $argc){
|
|||
intval($parent_id)
|
||||
);
|
||||
|
||||
if(! count($items)){
|
||||
if(! count($items)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// avoid race condition with deleting entries
|
||||
|
||||
if($items[0]['deleted']) {
|
||||
|
|
@ -98,11 +112,11 @@ function notifier_run($argv, $argc){
|
|||
intval($uid)
|
||||
);
|
||||
|
||||
if(count($r))
|
||||
$owner = $r[0];
|
||||
else {
|
||||
if(! count($r))
|
||||
return;
|
||||
}
|
||||
|
||||
$owner = $r[0];
|
||||
|
||||
$hub = get_config('system','huburl');
|
||||
|
||||
// If this is a public conversation, notify the feed hub
|
||||
|
|
@ -117,7 +131,7 @@ function notifier_run($argv, $argc){
|
|||
|
||||
$parent = $items[0];
|
||||
|
||||
if($parent['type'] === 'remote') {
|
||||
if($parent['type'] === 'remote' && (! $expire)) {
|
||||
// local followup to remote post
|
||||
$followup = true;
|
||||
$notify_hub = false; // not public
|
||||
|
|
@ -177,8 +191,8 @@ function notifier_run($argv, $argc){
|
|||
$contacts = $r;
|
||||
}
|
||||
|
||||
$feed_template = load_view_file('view/atom_feed.tpl');
|
||||
$mail_template = load_view_file('view/atom_mail.tpl');
|
||||
$feed_template = get_markup_template('atom_feed.tpl');
|
||||
$mail_template = get_markup_template('atom_mail.tpl');
|
||||
|
||||
$atom = '';
|
||||
$slaps = array();
|
||||
|
|
@ -235,6 +249,7 @@ function notifier_run($argv, $argc){
|
|||
}
|
||||
else {
|
||||
foreach($items as $item) {
|
||||
|
||||
if(! $item['parent'])
|
||||
continue;
|
||||
|
||||
|
|
@ -242,9 +257,9 @@ function notifier_run($argv, $argc){
|
|||
if(! $contact)
|
||||
continue;
|
||||
|
||||
$atom .= atom_entry($item,'text',$contact,$owner,true);
|
||||
$atom .= atom_entry($item,'text',$contact,$owner,true);
|
||||
|
||||
if(($top_level) && ($notify_hub) && ($item['author-link'] === $item['owner-link']))
|
||||
if(($top_level) && ($notify_hub) && ($item['author-link'] === $item['owner-link']) && (! $expire))
|
||||
$slaps[] = atom_entry($item,'html',$contact,$owner,true);
|
||||
}
|
||||
}
|
||||
|
|
@ -255,12 +270,30 @@ function notifier_run($argv, $argc){
|
|||
|
||||
logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
|
||||
|
||||
// If this is a public message and pubmail is set on the parent, include all your email contacts
|
||||
|
||||
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
|
||||
|
||||
if(! $mail_disabled) {
|
||||
if((! strlen($parent_item['allow_cid'])) && (! strlen($parent_item['allow_gid']))
|
||||
&& (! strlen($parent_item['deny_cid'])) && (! strlen($parent_item['deny_gid']))
|
||||
&& (intval($parent_item['pubmail']))) {
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `network` = '%s'",
|
||||
intval($uid),
|
||||
dbesc(NETWORK_MAIL)
|
||||
);
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
$recipients[] = $rr['id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($followup)
|
||||
$recip_str = $parent['contact-id'];
|
||||
else
|
||||
$recip_str = implode(', ', $recipients);
|
||||
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 AND `pending` = 0 ",
|
||||
dbesc($recip_str)
|
||||
);
|
||||
|
|
@ -319,7 +352,7 @@ function notifier_run($argv, $argc){
|
|||
// only send salmon if public - e.g. if it's ok to notify
|
||||
// a public hub, it's ok to send a salmon
|
||||
|
||||
if(count($slaps) && $notify_hub) {
|
||||
if((count($slaps)) && ($notify_hub) && (! $expire)) {
|
||||
logger('notifier: slapdelivery: ' . $contact['name']);
|
||||
foreach($slaps as $slappy) {
|
||||
if($contact['notify']) {
|
||||
|
|
@ -340,8 +373,82 @@ function notifier_run($argv, $argc){
|
|||
}
|
||||
break;
|
||||
case 'mail':
|
||||
|
||||
// WARNING: does not currently convert to RFC2047 header encodings, etc.
|
||||
|
||||
$addr = $contact['addr'];
|
||||
if(! strlen($addr))
|
||||
break;
|
||||
|
||||
if($cmd === 'wall-new' || $cmd === 'comment-new') {
|
||||
|
||||
$it = null;
|
||||
if($cmd === 'wall-new')
|
||||
$it = $items[0];
|
||||
else {
|
||||
$r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($argv[2]),
|
||||
intval($uid)
|
||||
);
|
||||
if(count($r))
|
||||
$it = $r[0];
|
||||
}
|
||||
if(! $it)
|
||||
break;
|
||||
|
||||
|
||||
|
||||
$local_user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
intval($uid)
|
||||
);
|
||||
if(! count($local_user))
|
||||
break;
|
||||
|
||||
$reply_to = '';
|
||||
$r1 = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
|
||||
intval($uid)
|
||||
);
|
||||
if($r1 && $r1[0]['reply_to'])
|
||||
$reply_to = $r1[0]['reply_to'];
|
||||
|
||||
$subject = (($it['title']) ? $it['title'] : t("\x28no subject\x29")) ;
|
||||
$headers = 'From: ' . $local_user[0]['username'] . ' <' . $local_user[0]['email'] . '>' . "\n";
|
||||
|
||||
if($reply_to)
|
||||
$headers .= 'Reply-to: ' . $reply_to . "\n";
|
||||
|
||||
$headers .= 'Message-id: <' . $it['uri'] . '>' . "\n";
|
||||
|
||||
if($it['uri'] !== $it['parent-uri']) {
|
||||
$header .= 'References: <' . $it['parent-uri'] . '>' . "\n";
|
||||
if(! strlen($it['title'])) {
|
||||
$r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1",
|
||||
dbesc($it['parent-uri'])
|
||||
);
|
||||
if(count($r)) {
|
||||
$subtitle = $r[0]['title'];
|
||||
if($subtitle) {
|
||||
if(strncasecmp($subtitle,'RE:',3))
|
||||
$subject = $subtitle;
|
||||
else
|
||||
$subject = 'Re: ' . $subtitle;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$headers .= 'MIME-Version: 1.0' . "\n";
|
||||
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
|
||||
$headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n";
|
||||
$html = prepare_body($it);
|
||||
$message = '<html><body>' . $html . '</body></html>';
|
||||
logger('notifier: email delivery to ' . $addr);
|
||||
mail($addr, $subject, $message, $headers);
|
||||
}
|
||||
break;
|
||||
case 'dspr':
|
||||
case 'feed':
|
||||
case 'face':
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -350,7 +457,7 @@ function notifier_run($argv, $argc){
|
|||
|
||||
// send additional slaps to mentioned remote tags (@foo@example.com)
|
||||
|
||||
if($slap && count($url_recipients) && $followup && $notify_hub) {
|
||||
if($slap && count($url_recipients) && $followup && $notify_hub && (! $expire)) {
|
||||
foreach($url_recipients as $url) {
|
||||
if($url) {
|
||||
logger('notifier: urldelivery: ' . $url);
|
||||
|
|
|
|||
46
include/pgettext.php
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
/**
|
||||
* translation support
|
||||
*/
|
||||
|
||||
// load string translation table for alternate language
|
||||
|
||||
if(! function_exists('load_translation_table')) {
|
||||
function load_translation_table($lang) {
|
||||
global $a;
|
||||
|
||||
if(file_exists("view/$lang/strings.php"))
|
||||
include("view/$lang/strings.php");
|
||||
}}
|
||||
|
||||
// translate string if translation exists
|
||||
|
||||
if(! function_exists('t')) {
|
||||
function t($s) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
if(x($a->strings,$s)) {
|
||||
$t = $a->strings[$s];
|
||||
return is_array($t)?$t[0]:$t;
|
||||
}
|
||||
return $s;
|
||||
}}
|
||||
|
||||
if(! function_exists('tt')){
|
||||
function tt($singular, $plural, $count){
|
||||
|
||||
$a = get_app();
|
||||
|
||||
if(x($a->strings,$singular)) {
|
||||
$t = $a->strings[$singular];
|
||||
$k = string_plural_select($count);
|
||||
return is_array($t)?$t[$k]:$t;
|
||||
}
|
||||
|
||||
if ($count!=1){
|
||||
return $plural;
|
||||
} else {
|
||||
return $singular;
|
||||
}
|
||||
}}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
<?php
|
||||
|
||||
require_once("boot.php");
|
||||
|
||||
function poller_run($argv, $argc){
|
||||
|
|
@ -15,20 +16,35 @@ function poller_run($argv, $argc){
|
|||
unset($db_host, $db_user, $db_pass, $db_data);
|
||||
};
|
||||
|
||||
|
||||
require_once('session.php');
|
||||
require_once('datetime.php');
|
||||
require_once('simplepie/simplepie.inc');
|
||||
require_once('include/items.php');
|
||||
require_once('include/Contact.php');
|
||||
require_once('include/email.php');
|
||||
|
||||
$a->set_baseurl(get_config('system','url'));
|
||||
|
||||
load_hooks();
|
||||
|
||||
logger('poller: start');
|
||||
|
||||
// run queue delivery process in the background
|
||||
|
||||
proc_run('php',"include/queue.php");
|
||||
|
||||
// once daily run expire in background
|
||||
|
||||
$d1 = get_config('system','last_expire_day');
|
||||
$d2 = intval(datetime_convert('UTC','UTC','now','d'));
|
||||
|
||||
if($d2 != intval($d1)) {
|
||||
set_config('system','last_expire_day',$d2);
|
||||
proc_run('php','include/expire.php');
|
||||
}
|
||||
|
||||
|
||||
// clear old cache
|
||||
q("DELETE FROM `cache` WHERE `updated` < '%s'",
|
||||
dbesc(datetime_convert('UTC','UTC',"now - 30 days")));
|
||||
|
|
@ -47,10 +63,12 @@ function poller_run($argv, $argc){
|
|||
|
||||
$sql_extra = (($manual_id) ? " AND `id` = $manual_id " : "");
|
||||
|
||||
reload_plugins();
|
||||
|
||||
$d = datetime_convert();
|
||||
|
||||
call_hooks('cron', $d);
|
||||
|
||||
reload_plugins();
|
||||
|
||||
$contacts = q("SELECT `id` FROM `contact`
|
||||
WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != ''
|
||||
|
|
@ -74,6 +92,9 @@ function poller_run($argv, $argc){
|
|||
continue;
|
||||
|
||||
foreach($res as $contact) {
|
||||
|
||||
$xml = false;
|
||||
|
||||
if($manual_id)
|
||||
$contact['last-update'] = '0000-00-00 00:00:00';
|
||||
|
||||
|
|
@ -147,25 +168,29 @@ function poller_run($argv, $argc){
|
|||
: datetime_convert('UTC','UTC',$contact['last-update'], ATOM_TIME)
|
||||
);
|
||||
|
||||
if($contact['network'] === 'dfrn') {
|
||||
if($contact['network'] === NETWORK_DFRN) {
|
||||
|
||||
$idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
|
||||
|
||||
if(intval($contact['duplex']) && $contact['dfrn-id'])
|
||||
$idtosend = '0:' . $orig_id;
|
||||
if(intval($contact['duplex']) && $contact['issued-id'])
|
||||
$idtosend = '1:' . $orig_id;
|
||||
$idtosend = '1:' . $orig_id;
|
||||
|
||||
// they have permission to write to us. We already filtered this in the contact query.
|
||||
$perm = 'rw';
|
||||
|
||||
$url = $contact['poll'] . '?dfrn_id=' . $idtosend
|
||||
. '&dfrn_version=' . DFRN_PROTOCOL_VERSION
|
||||
. '&type=data&last_update=' . $last_update ;
|
||||
. '&type=data&last_update=' . $last_update
|
||||
. '&perm=' . $perm ;
|
||||
|
||||
$xml = fetch_url($url);
|
||||
$handshake_xml = fetch_url($url);
|
||||
|
||||
logger('poller: handshake with url ' . $url . ' returns xml: ' . $xml, LOGGER_DATA);
|
||||
logger('poller: handshake with url ' . $url . ' returns xml: ' . $handshake_xml, LOGGER_DATA);
|
||||
|
||||
|
||||
if(! $xml) {
|
||||
if(! $handshake_xml) {
|
||||
logger("poller: $url appears to be dead - marking for death ");
|
||||
// dead connection - might be a transient event, or this might
|
||||
// mean the software was uninstalled or the domain expired.
|
||||
|
|
@ -182,7 +207,7 @@ function poller_run($argv, $argc){
|
|||
continue;
|
||||
}
|
||||
|
||||
if(! strstr($xml,'<?xml')) {
|
||||
if(! strstr($handshake_xml,'<?xml')) {
|
||||
logger('poller: response from ' . $url . ' did not contain XML.');
|
||||
$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
|
|
@ -192,7 +217,7 @@ function poller_run($argv, $argc){
|
|||
}
|
||||
|
||||
|
||||
$res = simplexml_load_string($xml);
|
||||
$res = parse_xml_string($handshake_xml);
|
||||
|
||||
if(intval($res->status) == 1) {
|
||||
logger("poller: $url replied status 1 - marking for death ");
|
||||
|
|
@ -239,56 +264,181 @@ function poller_run($argv, $argc){
|
|||
$final_dfrn_id = substr($final_dfrn_id,2);
|
||||
|
||||
if($final_dfrn_id != $orig_id) {
|
||||
|
||||
logger('poller: ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id);
|
||||
// did not decode properly - cannot trust this site
|
||||
continue;
|
||||
}
|
||||
|
||||
$postvars['dfrn_id'] = $idtosend;
|
||||
$postvars['dfrn_version'] = DFRN_PROTOCOL_VERSION;
|
||||
$postvars['perm'] = 'rw';
|
||||
|
||||
$xml = post_url($contact['poll'],$postvars);
|
||||
}
|
||||
else {
|
||||
elseif(($contact['network'] === NETWORK_OSTATUS)
|
||||
|| ($contact['network'] === NETWORK_DIASPORA)
|
||||
|| ($contact['network'] === NETWORK_FEED) ) {
|
||||
|
||||
// $contact['network'] !== 'dfrn'
|
||||
// Upgrading DB fields from an older Friendika version
|
||||
// Will only do this once per notify-enabled OStatus contact
|
||||
|
||||
if(($contact['notify']) && (! $contact['writable'])) {
|
||||
q("UPDATE `contact` SET `writable` = 1 WHERE `id` = %d LIMIT 1",
|
||||
intval($contact['id'])
|
||||
);
|
||||
}
|
||||
|
||||
$xml = fetch_url($contact['poll']);
|
||||
}
|
||||
elseif($contact['network'] === NETWORK_MAIL) {
|
||||
|
||||
logger('poller: received xml : ' . $xml, LOGGER_DATA);
|
||||
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
|
||||
if($mail_disabled)
|
||||
continue;
|
||||
|
||||
if(! strstr($xml,'<?xml')) {
|
||||
logger('poller: post_handshake: response from ' . $url . ' did not contain XML.');
|
||||
$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
intval($contact['id'])
|
||||
$mbox = null;
|
||||
$x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
intval($importer_uid)
|
||||
);
|
||||
continue;
|
||||
$mailconf = q("SELECT * FROM `mailacct` WHERE `server` != '' AND `uid` = %d LIMIT 1",
|
||||
intval($importer_uid)
|
||||
);
|
||||
if(count($x) && count($mailconf)) {
|
||||
$mailbox = construct_mailbox_name($mailconf[0]);
|
||||
$password = '';
|
||||
openssl_private_decrypt(hex2bin($mailconf[0]['pass']),$password,$x[0]['prvkey']);
|
||||
$mbox = email_connect($mailbox,$mailconf[0]['user'],$password);
|
||||
unset($password);
|
||||
if($mbox) {
|
||||
q("UPDATE `mailacct` SET `last_check` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
intval($mailconf[0]['id']),
|
||||
intval($importer_uid)
|
||||
);
|
||||
}
|
||||
}
|
||||
if($mbox) {
|
||||
|
||||
$msgs = email_poll($mbox,$contact['addr']);
|
||||
|
||||
if(count($msgs)) {
|
||||
foreach($msgs as $msg_uid) {
|
||||
$datarray = array();
|
||||
$meta = email_msg_meta($mbox,$msg_uid);
|
||||
$headers = email_msg_headers($mbox,$msg_uid);
|
||||
|
||||
// look for a 'references' header and try and match with a parent item we have locally.
|
||||
|
||||
$raw_refs = ((x($headers,'references')) ? str_replace("\t",'',$headers['references']) : '');
|
||||
$datarray['uri'] = trim($meta->message_id,'<>');
|
||||
|
||||
if($raw_refs) {
|
||||
$refs_arr = explode(' ', $raw_refs);
|
||||
if(count($refs_arr)) {
|
||||
for($x = 0; $x < count($refs_arr); $x ++)
|
||||
$refs_arr[$x] = "'" . str_replace(array('<','>',' '),array('','',''),dbesc($refs_arr[$x])) . "'";
|
||||
}
|
||||
$qstr = implode(',',$refs_arr);
|
||||
$r = q("SELECT `uri` , `parent-uri` FROM `item` WHERE `uri` IN ( $qstr ) AND `uid` = %d LIMIT 1",
|
||||
intval($importer_uid)
|
||||
);
|
||||
if(count($r))
|
||||
$datarray['parent-uri'] = $r[0]['uri'];
|
||||
}
|
||||
|
||||
|
||||
if(! x($datarray,'parent-uri'))
|
||||
$datarray['parent-uri'] = $datarray['uri'];
|
||||
|
||||
// Have we seen it before?
|
||||
$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
|
||||
intval($importer_uid),
|
||||
dbesc($datarray['uri'])
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
if($meta->deleted && ! $r[0]['deleted']) {
|
||||
q("UPDATE `item` SET `deleted` = 1, `changed` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
intval($r[0]['id'])
|
||||
);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
$datarray['title'] = notags(trim($meta->subject));
|
||||
$datarray['created'] = datetime_convert('UTC','UTC',$meta->date);
|
||||
|
||||
$r = email_get_msg($mbox,$msg_uid);
|
||||
if(! $r)
|
||||
continue;
|
||||
$datarray['body'] = escape_tags($r['body']);
|
||||
|
||||
// some mailing lists have the original author as 'from' - add this sender info to msg body.
|
||||
// todo: adding a gravatar for the original author would be cool
|
||||
|
||||
if(! stristr($meta->from,$contact['addr']))
|
||||
$datarray['body'] = t('From: ') . escape_tags($meta->from) . "\n\n" . $datarray['body'];
|
||||
|
||||
$datarray['uid'] = $importer_uid;
|
||||
$datarray['contact-id'] = $contact['id'];
|
||||
if($datarray['parent-uri'] === $datarray['uri'])
|
||||
$datarray['private'] = 1;
|
||||
$datarray['author-name'] = $contact['name'];
|
||||
$datarray['author-link'] = 'mailbox';
|
||||
$datarray['author-avatar'] = $contact['photo'];
|
||||
|
||||
$stored_item = item_store($datarray);
|
||||
q("UPDATE `item` SET `last-child` = 0 WHERE `parent-uri` = '%s' AND `uid` = %d",
|
||||
dbesc($datarray['parent-uri']),
|
||||
intval($importer_uid)
|
||||
);
|
||||
q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1",
|
||||
intval($stored_item)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
imap_close($mbox);
|
||||
}
|
||||
}
|
||||
elseif($contact['network'] === NETWORK_FACEBOOK) {
|
||||
// TODO: work in progress
|
||||
}
|
||||
|
||||
consume_feed($xml,$importer,$contact,$hub,1);
|
||||
if($xml) {
|
||||
logger('poller: received xml : ' . $xml, LOGGER_DATA);
|
||||
|
||||
// do it twice. Ensures that children of parents which may be later in the stream aren't tossed
|
||||
|
||||
consume_feed($xml,$importer,$contact,$hub,1);
|
||||
if(! strstr($xml,'<?xml')) {
|
||||
logger('poller: post_handshake: response from ' . $url . ' did not contain XML.');
|
||||
$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
intval($contact['id'])
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if((strlen($hub)) && ($hub_update)
|
||||
&& (($contact['rel'] == REL_BUD) || (($contact['network'] === 'stat') && (! $contact['readonly'])))) {
|
||||
logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
|
||||
$hubs = explode(',', $hub);
|
||||
if(count($hubs)) {
|
||||
foreach($hubs as $h) {
|
||||
$h = trim($h);
|
||||
if(! strlen($h))
|
||||
continue;
|
||||
subscribe_to_hub($h,$importer,$contact);
|
||||
consume_feed($xml,$importer,$contact,$hub,1, true);
|
||||
|
||||
// do it twice. Ensures that children of parents which may be later in the stream aren't tossed
|
||||
|
||||
consume_feed($xml,$importer,$contact,$hub,1);
|
||||
|
||||
|
||||
if((strlen($hub)) && ($hub_update) && (($contact['rel'] == REL_BUD) || (($contact['network'] === NETWORK_OSTATUS) && (! $contact['readonly'])))) {
|
||||
logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
|
||||
$hubs = explode(',', $hub);
|
||||
if(count($hubs)) {
|
||||
foreach($hubs as $h) {
|
||||
$h = trim($h);
|
||||
if(! strlen($h))
|
||||
continue;
|
||||
subscribe_to_hub($h,$importer,$contact);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$updated = datetime_convert();
|
||||
|
||||
$r = q("UPDATE `contact` SET `last-update` = '%s', `success_update` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
|
|
@ -300,6 +450,7 @@ function poller_run($argv, $argc){
|
|||
// loop - next contact
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,46 +1,54 @@
|
|||
<?php
|
||||
|
||||
function advanced_profile(&$a) {
|
||||
|
||||
$o .= '';
|
||||
|
||||
$o .= <<< EOT
|
||||
|
||||
<h2>Profilo</h2>
|
||||
|
||||
|
||||
EOT;
|
||||
$o .= '<h2>' . t('Profile') . '</h2>';
|
||||
|
||||
if($a->profile['name']) {
|
||||
$lbl_fullname = t('Full Name:');
|
||||
$fullname = $a->profile['name'];
|
||||
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-name-wrapper" >
|
||||
<div id="advanced-profile-name-text">Nome Completo:</div>
|
||||
<div id="advanced-profile-name">{$a->profile['name']}</div>
|
||||
<div id="advanced-profile-name-text">$lbl_fullname</div>
|
||||
<div id="advanced-profile-name">$fullname</div>
|
||||
</div>
|
||||
<div id="advanced-profile-name-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['gender']) {
|
||||
$lbl_gender = t('Gender:');
|
||||
$gender = $a->profile['gender'];
|
||||
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-gender-wrapper" >
|
||||
<div id="advanced-profile-gender-text">Genere:</div>
|
||||
<div id="advanced-profile-gender">{$a->profile['gender']}</div>
|
||||
<div id="advanced-profile-gender-text">$lbl_gender</div>
|
||||
<div id="advanced-profile-gender">$gender</div>
|
||||
</div>
|
||||
<div id="advanced-profile-gender-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if(($a->profile['dob']) && ($a->profile['dob'] != '0000-00-00')) {
|
||||
$lbl_birthday = t('Birthday:');
|
||||
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-dob-wrapper" >
|
||||
<div id="advanced-profile-dob-text">Compleanno:</div>
|
||||
<div id="advanced-profile-dob-text">$lbl_birthday</div>
|
||||
EOT;
|
||||
|
||||
// If no year, add an arbitrary one so just we can parse the month and day.
|
||||
|
||||
$year_bd_format = t('j F, Y');
|
||||
$short_bd_format = t('j F');
|
||||
|
||||
$o .= '<div id="advanced-profile-dob">'
|
||||
. ((intval($a->profile['dob']))
|
||||
? day_translate(datetime_convert('UTC','UTC',$a->profile['dob'] . ' 00:00 +00:00','j F, Y'))
|
||||
: day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],6) . ' 00:00 +00:00','j F')))
|
||||
? day_translate(datetime_convert('UTC','UTC',$a->profile['dob'] . ' 00:00 +00:00',$year_bd_format))
|
||||
: day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],6) . ' 00:00 +00:00',$short_bd_format)))
|
||||
. "</div>\r\n</div>";
|
||||
|
||||
$o .= '<div id="advanced-profile-dob-end"></div>';
|
||||
|
|
@ -48,9 +56,10 @@ $o .= '<div id="advanced-profile-dob-end"></div>';
|
|||
}
|
||||
|
||||
if($age = age($a->profile['dob'],$a->profile['timezone'],'')) {
|
||||
$lbl_age = t('Age:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-age-wrapper" >
|
||||
<div id="advanced-profile-age-text">Età:</div>
|
||||
<div id="advanced-profile-age-text">$lbl_age</div>
|
||||
<div id="advanced-profile-age">$age</div>
|
||||
</div>
|
||||
<div id="advanced-profile-age-end"></div>
|
||||
|
|
@ -58,14 +67,19 @@ EOT;
|
|||
}
|
||||
|
||||
if($a->profile['marital']) {
|
||||
$lbl_marital = t('<span class="heart">♥</span> Status:');
|
||||
$marital = $a->profile['marital'];
|
||||
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-marital-wrapper" >
|
||||
<div id="advanced-profile-marital-text"><span class="heart">♥</span> Stato:</div>
|
||||
<div id="advanced-profile-marital">{$a->profile['marital']}</div>
|
||||
<div id="advanced-profile-marital-text">$lbl_marital</div>
|
||||
<div id="advanced-profile-marital">$marital</div>
|
||||
EOT;
|
||||
|
||||
if($a->profile['with'])
|
||||
$o .= "<div id=\"advanced-profile-with\">({$a->profile['with']})</div>";
|
||||
if($a->profile['with']) {
|
||||
$with = $a->profile['with'];
|
||||
$o .= "<div id=\"advanced-profile-with\">($with)</div>";
|
||||
}
|
||||
$o .= <<< EOT
|
||||
</div>
|
||||
<div id="advanced-profile-marital-end"></div>
|
||||
|
|
@ -73,20 +87,24 @@ EOT;
|
|||
}
|
||||
|
||||
if($a->profile['sexual']) {
|
||||
$lbl_sexual = t('Sexual Preference:');
|
||||
$sexual = $a->profile['sexual'];
|
||||
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-sexual-wrapper" >
|
||||
<div id="advanced-profile-sexual-text">Preferenze sessuali:</div>
|
||||
<div id="advanced-profile-sexual">{$a->profile['sexual']}</div>
|
||||
<div id="advanced-profile-sexual-text">$lbl_sexual</div>
|
||||
<div id="advanced-profile-sexual">$sexual</div>
|
||||
</div>
|
||||
<div id="advanced-profile-sexual-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['homepage']) {
|
||||
$lbl_homepage = t('Homepage:');
|
||||
$homepage = linkify($a->profile['homepage']);
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-homepage-wrapper" >
|
||||
<div id="advanced-profile-homepage-text">Homepage:</div>
|
||||
<div id="advanced-profile-homepage-text">$lbl_homepage</div>
|
||||
<div id="advanced-profile-homepage">$homepage</div>
|
||||
</div>
|
||||
<div id="advanced-profile-homepage-end"></div>
|
||||
|
|
@ -94,29 +112,33 @@ EOT;
|
|||
}
|
||||
|
||||
if($a->profile['politic']) {
|
||||
$lbl_politic = t('Political Views:');
|
||||
$politic = $a->profile['politic'];
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-politic-wrapper" >
|
||||
<div id="advanced-profile-politic-text">Orientamento politico:</div>
|
||||
<div id="advanced-profile-politic">{$a->profile['politic']}</div>
|
||||
<div id="advanced-profile-politic-text">$lbl_politic</div>
|
||||
<div id="advanced-profile-politic">$politic</div>
|
||||
</div>
|
||||
<div id="advanced-profile-politic-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['religion']) {
|
||||
$lbl_religion = t('Religion:');
|
||||
$religion = $a->profile['religion'];
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-religion-wrapper" >
|
||||
<div id="advanced-profile-religion-text">Religione:</div>
|
||||
<div id="advanced-profile-religion">{$a->profile['religion']}</div>
|
||||
<div id="advanced-profile-religion-text">$lbl_religion</div>
|
||||
<div id="advanced-profile-religion">$religion</div>
|
||||
</div>
|
||||
<div id="advanced-profile-religion-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['about'])) {
|
||||
$lbl_about = t('About:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-about-wrapper" >
|
||||
<div id="advanced-profile-about-text">Informazioni varie:</div>
|
||||
<div id="advanced-profile-about-text">$lbl_about</div>
|
||||
<br />
|
||||
<div id="advanced-profile-about">$txt</div>
|
||||
</div>
|
||||
|
|
@ -125,9 +147,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['interest'])) {
|
||||
$lbl_interests = t('Hobbies/Interests:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-interest-wrapper" >
|
||||
<div id="advanced-profile-interest-text">Hobbie/Interessi:</div>
|
||||
<div id="advanced-profile-interest-text">$lbl_interests</div>
|
||||
<br />
|
||||
<div id="advanced-profile-interest">$txt</div>
|
||||
</div>
|
||||
|
|
@ -136,9 +159,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['contact'])) {
|
||||
$lbl_contact = t('Contact information and Social Networks:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-contact-wrapper" >
|
||||
<div id="advanced-profile-contact-text">Informazioni su contatti e Social Networks:</div>
|
||||
<div id="advanced-profile-contact-text">$lbl_contact</div>
|
||||
<br />
|
||||
<div id="advanced-profile-contact">$txt</div>
|
||||
</div>
|
||||
|
|
@ -147,9 +171,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['music'])) {
|
||||
$lbl_music = t('Musical interests:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-music-wrapper" >
|
||||
<div id="advanced-profile-music-text">Interessi musicali:</div>
|
||||
<div id="advanced-profile-music-text">$lbl_music</div>
|
||||
<br />
|
||||
<div id="advanced-profile-music">$txt</div>
|
||||
</div>
|
||||
|
|
@ -158,9 +183,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['book'])) {
|
||||
$lbl_book = t('Books, literature:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-book-wrapper" >
|
||||
<div id="advanced-profile-book-text">Libri, letteratura:</div>
|
||||
<div id="advanced-profile-book-text">$lbl_book</div>
|
||||
<br />
|
||||
<div id="advanced-profile-book">$txt</div>
|
||||
</div>
|
||||
|
|
@ -169,9 +195,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['tv'])) {
|
||||
$lbl_tv = t('Television:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-tv-wrapper" >
|
||||
<div id="advanced-profile-tv-text">Televisione:</div>
|
||||
<div id="advanced-profile-tv-text">$lbl_tv</div>
|
||||
<br />
|
||||
<div id="advanced-profile-tv">$txt</div>
|
||||
</div>
|
||||
|
|
@ -180,9 +207,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['film'])) {
|
||||
$lbl_film = t('Film/dance/culture/entertainment:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-film-wrapper" >
|
||||
<div id="advanced-profile-film-text">Film/danza/cultura/intrattenimento:</div>
|
||||
<div id="advanced-profile-film-text">$lbl_film</div>
|
||||
<br />
|
||||
<div id="advanced-profile-film">$txt</div>
|
||||
</div>
|
||||
|
|
@ -191,9 +219,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['romance'])) {
|
||||
$lbl_romance = t('Love/Romance:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-romance-wrapper" >
|
||||
<div id="advanced-profile-romance-text">Amore/romanticismo:</div>
|
||||
<div id="advanced-profile-romance-text">$lbl_romance</div>
|
||||
<br />
|
||||
<div id="advanced-profile-romance">$txt</div>
|
||||
</div>
|
||||
|
|
@ -202,9 +231,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['work'])) {
|
||||
$lbl_work = t('Work/employment:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-work-wrapper" >
|
||||
<div id="advanced-profile-work-text">Lavoro/impiego:</div>
|
||||
<div id="advanced-profile-work-text">$lbl_work</div>
|
||||
<br />
|
||||
<div id="advanced-profile-work">$txt</div>
|
||||
</div>
|
||||
|
|
@ -213,9 +243,10 @@ EOT;
|
|||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['education'])) {
|
||||
$lbl_education = t('School/education:');
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-education-wrapper" >
|
||||
<div id="advanced-profile-education-text">Scuola/educazione:</div>
|
||||
<div id="advanced-profile-education-text">$lbl_education</div>
|
||||
<br />
|
||||
<div id="advanced-profile-education">$txt</div>
|
||||
</div>
|
||||
|
|
@ -223,4 +254,5 @@ $o .= <<< EOT
|
|||
EOT;
|
||||
}
|
||||
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
|
@ -161,7 +161,7 @@ EOT;
|
|||
|
||||
$signature2 = base64url_encode($rsa->sign($data));
|
||||
|
||||
$salmon_tpl = load_view_file('view/magicsig.tpl');
|
||||
$salmon_tpl = get_markup_template('magicsig.tpl');
|
||||
$salmon = replace_macros($salmon_tpl,array(
|
||||
'$data' => $data,
|
||||
'$encoding' => $encoding,
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ function can_write_wall(&$a,$owner) {
|
|||
else {
|
||||
$r = q("SELECT `contact`.*, `user`.`page-flags` FROM `contact` LEFT JOIN `user` on `user`.`uid` = `contact`.`uid`
|
||||
WHERE `contact`.`uid` = %d AND `contact`.`id` = %d AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `readonly` = 0 AND ( `contact`.`rel` IN ( %d , %d ) OR `user`.`page-flags` = %d ) LIMIT 1",
|
||||
AND `user`.`blockwall` = 0 AND `readonly` = 0 AND ( `contact`.`rel` IN ( %d , %d ) OR `user`.`page-flags` = %d ) LIMIT 1",
|
||||
intval($owner),
|
||||
intval(remote_user()),
|
||||
intval(REL_VIP),
|
||||
|
|
|
|||
137
include/template_processor.php
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
<?php
|
||||
|
||||
class Template {
|
||||
var $r;
|
||||
var $search;
|
||||
var $replace;
|
||||
var $stack = array();
|
||||
var $nodes = array();
|
||||
var $done = false;
|
||||
|
||||
private function _build_replace($r, $prefix){
|
||||
|
||||
if(is_array($r) && count($r)) {
|
||||
foreach ($r as $k => $v ) {
|
||||
if (is_array($v))
|
||||
$this->_build_replace($v, "$prefix$k.");
|
||||
|
||||
$this->search[] = $prefix . $k;
|
||||
$this->replace[] = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function _push_stack(){
|
||||
$this->stack[] = array($this->r, $this->search, $this->replace, $this->nodes);
|
||||
}
|
||||
private function _pop_stack(){
|
||||
list($this->r, $this->search, $this->replace, $this->nodes) = array_pop($this->stack);
|
||||
}
|
||||
|
||||
private function _get_var($name){
|
||||
$keys = array_map('trim',explode(".",$name));
|
||||
$val = $this->r;
|
||||
foreach($keys as $k) {
|
||||
$val = $val[$k];
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
||||
/**
|
||||
* IF node
|
||||
*
|
||||
* {{ if <$var> }}...{{ endif }}
|
||||
*/
|
||||
private function _replcb_if($args){
|
||||
$val = $this->_get_var($args[2]);
|
||||
return ($val?$args[3]:"");
|
||||
}
|
||||
|
||||
/**
|
||||
* FOR node
|
||||
*
|
||||
* {{ for <$var> as $name }}...{{ endfor }}
|
||||
* {{ for <$var> as $key=>$name }}...{{ endfor }}
|
||||
*/
|
||||
private function _replcb_for($args){
|
||||
$m = array_map('trim', explode(" as ", $args[2]));
|
||||
list($keyname, $varname) = explode("=>",$m[1]);
|
||||
if (is_null($varname)) { $varname=$keyname; $keyname=""; }
|
||||
if ($m[0]=="" || $varname=="" || is_null($varname)) die("template error: 'for ".$m[0]." as ".$varname."'") ;
|
||||
$vals = $this->r[$m[0]];
|
||||
$ret="";
|
||||
if (!is_array($vals)) return $ret;
|
||||
foreach ($vals as $k=>$v){
|
||||
$this->_push_stack();
|
||||
$r = $this->r;
|
||||
$r[$varname] = $v;
|
||||
if ($keyname!='') $r[$keyname] = $k;
|
||||
$ret .= $this->replace($args[3], $r);
|
||||
$this->_pop_stack();
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* INC node
|
||||
*
|
||||
* {{ inc <templatefile> [with $var1=$var2] }}{{ endinc }}
|
||||
*/
|
||||
private function _replcb_inc($args){
|
||||
list($tplfile, $newctx) = array_map('trim', explode("with",$args[2]));
|
||||
$this->_push_stack();
|
||||
$r = $this->r;
|
||||
if (!is_null($newctx)) {
|
||||
list($a,$b) = array_map('trim', explode("=",$newctx));
|
||||
$r[$a] = $this->_get_var($b);
|
||||
}
|
||||
$this->nodes = Array();
|
||||
$tpl = get_markup_template($tplfile);
|
||||
$ret = $this->replace($tpl, $r);
|
||||
$this->_pop_stack();
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
private function _replcb_node($m) {
|
||||
$node = $this->nodes[$m[1]];
|
||||
if (method_exists($this, "_replcb_".$node[1])){
|
||||
return call_user_func(array($this, "_replcb_".$node[1]), $node);
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
private function _replcb($m){
|
||||
$this->done = false;
|
||||
$this->nodes[] = (array) $m;
|
||||
return "||". (count($this->nodes)-1) ."||";
|
||||
}
|
||||
|
||||
private function _build_nodes($s){
|
||||
$this->done = false;
|
||||
while (!$this->done){
|
||||
$this->done=true;
|
||||
$s = preg_replace_callback('|{{ *([a-z]*) *([^}]*)}}([^{]*){{ *end\1 *}}|', array($this, "_replcb"), $s);
|
||||
}
|
||||
krsort($this->nodes);
|
||||
return $s;
|
||||
}
|
||||
|
||||
public function replace($s, $r) {
|
||||
$this->r = $r;
|
||||
$this->search = array();
|
||||
$this->replace = array();
|
||||
|
||||
$this->_build_replace($r, "");
|
||||
|
||||
#$s = str_replace(array("\n","\r"),array("§n§","§r§"),$s);
|
||||
$s = $this->_build_nodes($s);
|
||||
$s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s);
|
||||
$s = str_replace($this->search,$this->replace, (string) $s);
|
||||
|
||||
return $s;
|
||||
}
|
||||
}
|
||||
|
||||
$t = new Template;
|
||||
25
index.php
|
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
|
||||
error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
||||
|
||||
/**
|
||||
*
|
||||
* Friendika
|
||||
|
|
@ -31,10 +33,18 @@ $install = ((file_exists('.htconfig.php') && filesize('.htconfig.php')) ? false
|
|||
*
|
||||
* Get the language setting directly from system variables, bypassing get_config()
|
||||
* as database may not yet be configured.
|
||||
*
|
||||
* If possible, we use the value from the browser.
|
||||
*
|
||||
*/
|
||||
|
||||
$lang = ((isset($a->config['system']['language'])) ? $a->config['system']['language'] : 'en');
|
||||
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
|
||||
$langs = preg_split("/[,-]/",$_SERVER['HTTP_ACCEPT_LANGUAGE'],2);
|
||||
$lang = $langs[0];
|
||||
} else {
|
||||
$lang = ((isset($a->config['system']['language'])) ? $a->config['system']['language'] : 'en');
|
||||
}
|
||||
|
||||
|
||||
load_translation_table($lang);
|
||||
|
||||
|
|
@ -79,6 +89,19 @@ $a->init_pagehead();
|
|||
|
||||
session_start();
|
||||
|
||||
/**
|
||||
* Language was set earlier, but we can over-ride it in the session.
|
||||
* We have to do it here because the session was just now opened.
|
||||
*/
|
||||
|
||||
if(x($_POST,'system_language'))
|
||||
$_SESSION['language'] = $_POST['system_language'];
|
||||
if((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
|
||||
$lang = $_SESSION['language'];
|
||||
load_translation_table($lang);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* For Mozilla auth manager - still needs sorting, and this might conflict with LRDD header.
|
||||
|
|
|
|||
3042
library/markdown.php
Normal file
|
|
@ -0,0 +1,3042 @@
|
|||
<?php
|
||||
#
|
||||
# Markdown Extra - A text-to-HTML conversion tool for web writers
|
||||
#
|
||||
# PHP Markdown & Extra
|
||||
# Copyright (c) 2004-2008 Michel Fortin
|
||||
# <http://www.michelf.com/projects/php-markdown/>
|
||||
#
|
||||
# Original Markdown
|
||||
# Copyright (c) 2004-2006 John Gruber
|
||||
# <http://daringfireball.net/projects/markdown/>
|
||||
#
|
||||
|
||||
|
||||
define( 'MARKDOWN_VERSION', "1.0.1m" ); # Sat 21 Jun 2008
|
||||
define( 'MARKDOWNEXTRA_VERSION', "1.2.3" ); # Wed 31 Dec 2008
|
||||
|
||||
|
||||
#
|
||||
# Global default settings:
|
||||
#
|
||||
|
||||
# Change to ">" for HTML output
|
||||
@define( 'MARKDOWN_EMPTY_ELEMENT_SUFFIX', " />");
|
||||
|
||||
# Define the width of a tab for code blocks.
|
||||
@define( 'MARKDOWN_TAB_WIDTH', 4 );
|
||||
|
||||
# Optional title attribute for footnote links and backlinks.
|
||||
@define( 'MARKDOWN_FN_LINK_TITLE', "" );
|
||||
@define( 'MARKDOWN_FN_BACKLINK_TITLE', "" );
|
||||
|
||||
# Optional class attribute for footnote links and backlinks.
|
||||
@define( 'MARKDOWN_FN_LINK_CLASS', "" );
|
||||
@define( 'MARKDOWN_FN_BACKLINK_CLASS', "" );
|
||||
|
||||
# Enables special handling for links pointing outside of the current domain.
|
||||
@define( 'MARKDOWN_EL_ENABLE', true); # Use this feature at all?
|
||||
@define( 'MARKDOWN_EL_LOCAL_DOMAIN', null); # Leave as null to autodetect
|
||||
@define( 'MARKDOWN_EL_NEW_WINDOW', true); # Open link in a new browser?
|
||||
@define( 'MARKDOWN_EL_CSS_CLASS', 'external'); # Leave as null for no class
|
||||
|
||||
# Enables header auto-self-linking.
|
||||
@define( 'MARKDOWN_HA_ENABLE', true ); # Use this feature at all?
|
||||
@define( 'MARKDOWN_HA_CLASS', 'hidden-selflink' ); # Leave as null for no class
|
||||
@define( 'MARKDOWN_HA_TEXT', '←' ); # The text to use as the link
|
||||
|
||||
|
||||
#
|
||||
# WordPress settings:
|
||||
#
|
||||
|
||||
# Change to false to remove Markdown from posts and/or comments.
|
||||
@define( 'MARKDOWN_WP_POSTS', true );
|
||||
@define( 'MARKDOWN_WP_COMMENTS', true );
|
||||
|
||||
|
||||
|
||||
### Standard Function Interface ###
|
||||
|
||||
@define( 'MARKDOWN_PARSER_CLASS', 'MarkdownExtra_Parser' );
|
||||
|
||||
function Markdown($text) {
|
||||
#
|
||||
# Initialize the parser and return the result of its transform method.
|
||||
#
|
||||
# Setup static parser variable.
|
||||
static $parser;
|
||||
if (!isset($parser)) {
|
||||
$parser_class = MARKDOWN_PARSER_CLASS;
|
||||
$parser = new $parser_class;
|
||||
}
|
||||
|
||||
# Transform text using parser.
|
||||
return $parser->transform($text);
|
||||
}
|
||||
|
||||
|
||||
### WordPress Plugin Interface ###
|
||||
|
||||
/*
|
||||
Plugin Name: Markdown Extra
|
||||
Plugin URI: http://www.michelf.com/projects/php-markdown/
|
||||
Description: <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://www.michelf.com/projects/php-markdown/">More...</a>
|
||||
Version: 1.2.2
|
||||
Author: Michel Fortin
|
||||
Author URI: http://www.michelf.com/
|
||||
*/
|
||||
|
||||
if (isset($wp_version)) {
|
||||
# More details about how it works here:
|
||||
# <http://www.michelf.com/weblog/2005/wordpress-text-flow-vs-markdown/>
|
||||
|
||||
# Post content and excerpts
|
||||
# - Remove WordPress paragraph generator.
|
||||
# - Run Markdown on excerpt, then remove all tags.
|
||||
# - Add paragraph tag around the excerpt, but remove it for the excerpt rss.
|
||||
if (MARKDOWN_WP_POSTS) {
|
||||
remove_filter('the_content', 'wpautop');
|
||||
remove_filter('the_content_rss', 'wpautop');
|
||||
remove_filter('the_excerpt', 'wpautop');
|
||||
add_filter('the_content', 'mdwp_MarkdownPost', 6);
|
||||
add_filter('the_content_rss', 'mdwp_MarkdownPost', 6);
|
||||
add_filter('get_the_excerpt', 'mdwp_MarkdownPost', 6);
|
||||
add_filter('get_the_excerpt', 'trim', 7);
|
||||
add_filter('the_excerpt', 'mdwp_add_p');
|
||||
add_filter('the_excerpt_rss', 'mdwp_strip_p');
|
||||
|
||||
remove_filter('content_save_pre', 'balanceTags', 50);
|
||||
remove_filter('excerpt_save_pre', 'balanceTags', 50);
|
||||
add_filter('the_content', 'balanceTags', 50);
|
||||
add_filter('get_the_excerpt', 'balanceTags', 9);
|
||||
}
|
||||
|
||||
# Add a footnote id prefix to posts when inside a loop.
|
||||
function mdwp_MarkdownPost($text) {
|
||||
static $parser;
|
||||
if (!$parser) {
|
||||
$parser_class = MARKDOWN_PARSER_CLASS;
|
||||
$parser = new $parser_class;
|
||||
}
|
||||
if (is_single() || is_page() || is_feed()) {
|
||||
$parser->fn_id_prefix = "";
|
||||
} else {
|
||||
$parser->fn_id_prefix = get_the_ID() . ".";
|
||||
}
|
||||
return $parser->transform($text);
|
||||
}
|
||||
|
||||
# Comments
|
||||
# - Remove WordPress paragraph generator.
|
||||
# - Remove WordPress auto-link generator.
|
||||
# - Scramble important tags before passing them to the kses filter.
|
||||
# - Run Markdown on excerpt then remove paragraph tags.
|
||||
if (MARKDOWN_WP_COMMENTS) {
|
||||
remove_filter('comment_text', 'wpautop', 30);
|
||||
remove_filter('comment_text', 'make_clickable');
|
||||
add_filter('pre_comment_content', 'Markdown', 6);
|
||||
add_filter('pre_comment_content', 'mdwp_hide_tags', 8);
|
||||
add_filter('pre_comment_content', 'mdwp_show_tags', 12);
|
||||
add_filter('get_comment_text', 'Markdown', 6);
|
||||
add_filter('get_comment_excerpt', 'Markdown', 6);
|
||||
add_filter('get_comment_excerpt', 'mdwp_strip_p', 7);
|
||||
|
||||
global $mdwp_hidden_tags, $mdwp_placeholders;
|
||||
$mdwp_hidden_tags = explode(' ',
|
||||
'<p> </p> <pre> </pre> <ol> </ol> <ul> </ul> <li> </li>');
|
||||
$mdwp_placeholders = explode(' ', str_rot13(
|
||||
'pEj07ZbbBZ U1kqgh4w4p pre2zmeN6K QTi31t9pre ol0MP1jzJR '.
|
||||
'ML5IjmbRol ulANi1NsGY J7zRLJqPul liA8ctl16T K9nhooUHli'));
|
||||
}
|
||||
|
||||
function mdwp_add_p($text) {
|
||||
if (!preg_match('{^$|^<(p|ul|ol|dl|pre|blockquote)>}i', $text)) {
|
||||
$text = '<p>'.$text.'</p>';
|
||||
$text = preg_replace('{\n{2,}}', "</p>\n\n<p>", $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' => '<a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://www.michelf.com/projects/php-markdown/">More...</a>',
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
### 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 <p>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.:
|
||||
# <div>
|
||||
# <div>
|
||||
# tags for inner block must be indented.
|
||||
# </div>
|
||||
# </div>
|
||||
#
|
||||
# The outermost tags must start at the left margin for this to match, and
|
||||
# the inner nested divs must be indented.
|
||||
# We need to do this before the next, more liberal match, because the next
|
||||
# match will start at the first `<div>` and stop at the first `</div>`.
|
||||
$text = preg_replace_callback('{(?>
|
||||
(?>
|
||||
(?<=\n\n) # Starting after a blank line
|
||||
| # or
|
||||
\A\n? # the beginning of the doc
|
||||
)
|
||||
( # save in $1
|
||||
|
||||
# Match from `\n<tag>` to `</tag>\n`, handling nested tags
|
||||
# in between.
|
||||
|
||||
[ ]{0,'.$less_than_tab.'}
|
||||
<('.$block_tags_b_re.')# start tag = $2
|
||||
'.$attr.'> # attributes followed by > and \n
|
||||
'.$content.' # content, support nesting
|
||||
</\2> # the matching end tag
|
||||
[ ]* # trailing spaces/tabs
|
||||
(?=\n+|\Z) # followed by a newline or end of document
|
||||
|
||||
| # Special version for tags of group a.
|
||||
|
||||
[ ]{0,'.$less_than_tab.'}
|
||||
<('.$block_tags_a_re.')# start tag = $3
|
||||
'.$attr.'>[ ]*\n # attributes followed by >
|
||||
'.$content2.' # content, support nesting
|
||||
</\3> # the matching end tag
|
||||
[ ]* # trailing spaces/tabs
|
||||
(?=\n+|\Z) # followed by a newline or end of document
|
||||
|
||||
| # Special case just for <hr />. It was easier to make a special
|
||||
# case than to make the other regex more complicated.
|
||||
|
||||
[ ]{0,'.$less_than_tab.'}
|
||||
<(hr) # start tag = $2
|
||||
'.$attr.' # attributes
|
||||
/?> # the matching end tag
|
||||
[ ]*
|
||||
(?=\n{2,}|\Z) # followed by a blank line or end of document
|
||||
|
||||
| # Special case for standalone HTML comments:
|
||||
|
||||
[ ]{0,'.$less_than_tab.'}
|
||||
(?s:
|
||||
<!-- .*? -->
|
||||
)
|
||||
[ ]*
|
||||
(?=\n{2,}|\Z) # followed by a blank line or end of document
|
||||
|
||||
| # PHP and ASP-style processor instructions (<? and <%)
|
||||
|
||||
[ ]{0,'.$less_than_tab.'}
|
||||
(?s:
|
||||
<([?%]) # $2
|
||||
.*?
|
||||
\2>
|
||||
)
|
||||
[ ]*
|
||||
(?=\n{2,}|\Z) # followed by a blank line or end of document
|
||||
|
||||
)
|
||||
)}Sxmi',
|
||||
array(&$this, '_hashHTMLBlocks_callback'),
|
||||
$text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
function _hashHTMLBlocks_callback($matches) {
|
||||
$text = $matches[1];
|
||||
$key = $this->hashBlock($text);
|
||||
return "\n\n$key\n\n";
|
||||
}
|
||||
|
||||
|
||||
function hashPart($text, $boundary = 'X') {
|
||||
#
|
||||
# Called whenever a tag must be hashed when a function insert an atomic
|
||||
# element in the text stream. Passing $text to through this function gives
|
||||
# a unique text-token which will be reverted back when calling unhash.
|
||||
#
|
||||
# The $boundary argument specify what character should be used to surround
|
||||
# the token. By convension, "B" is used for block elements that needs not
|
||||
# to be wrapped into paragraph tags at the end, ":" is used for elements
|
||||
# that are word separators and "X" is used in the general case.
|
||||
#
|
||||
# Swap back any tag hash found in $text so we do not have to `unhash`
|
||||
# multiple times at the end.
|
||||
$text = $this->unhash($text);
|
||||
|
||||
# Then hash the block.
|
||||
static $i = 0;
|
||||
$key = "$boundary\x1A" . ++$i . $boundary;
|
||||
$this->html_hashes[$key] = $text;
|
||||
return $key; # String that will replace the tag.
|
||||
}
|
||||
|
||||
|
||||
function hashBlock($text) {
|
||||
#
|
||||
# Shortcut function for hashPart with block-level boundaries.
|
||||
#
|
||||
return $this->hashPart($text, 'B');
|
||||
}
|
||||
|
||||
|
||||
var $block_gamut = array(
|
||||
#
|
||||
# These are all the transformations that form block-level
|
||||
# tags like paragraphs, headers, and list items.
|
||||
#
|
||||
"doHeaders" => 10,
|
||||
"doHorizontalRules" => 20,
|
||||
|
||||
"doLists" => 40,
|
||||
"doCodeBlocks" => 50,
|
||||
"doBlockQuotes" => 60,
|
||||
);
|
||||
|
||||
function runBlockGamut($text) {
|
||||
#
|
||||
# Run block gamut tranformations.
|
||||
#
|
||||
# We need to escape raw HTML in Markdown source before doing anything
|
||||
# else. This need to be done for each block, and not only at the
|
||||
# begining in the Markdown function since hashed blocks can be part of
|
||||
# list items and could have been indented. Indented blocks would have
|
||||
# been seen as a code block in a previous pass of hashHTMLBlocks.
|
||||
$text = $this->hashHTMLBlocks($text);
|
||||
|
||||
return $this->runBasicBlockGamut($text);
|
||||
}
|
||||
|
||||
function runBasicBlockGamut($text) {
|
||||
#
|
||||
# Run block gamut tranformations, without hashing HTML blocks. This is
|
||||
# useful when HTML blocks are known to be already hashed, like in the first
|
||||
# whole-document pass.
|
||||
#
|
||||
foreach ($this->block_gamut as $method => $priority) {
|
||||
$text = $this->$method($text);
|
||||
}
|
||||
|
||||
# Finally form paragraph and restore hashed blocks.
|
||||
$text = $this->formParagraphs($text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
function doHorizontalRules($text) {
|
||||
# Do Horizontal Rules:
|
||||
return preg_replace(
|
||||
'{
|
||||
^[ ]{0,3} # Leading space
|
||||
([-*_]) # $1: First marker
|
||||
(?> # Repeated marker group
|
||||
[ ]{0,2} # Zero, one, or two spaces.
|
||||
\1 # Marker character
|
||||
){2,} # Group repeated at least twice
|
||||
[ ]* # Tailing spaces
|
||||
$ # End of line.
|
||||
}mx',
|
||||
"\n".$this->hashBlock("<hr$this->empty_element_suffix")."\n",
|
||||
$text);
|
||||
}
|
||||
|
||||
|
||||
var $span_gamut = array(
|
||||
#
|
||||
# These are all the transformations that occur *within* block-level
|
||||
# tags like paragraphs, headers, and list items.
|
||||
#
|
||||
# Process character escapes, code spans, and inline HTML
|
||||
# in one shot.
|
||||
"parseSpan" => -30,
|
||||
|
||||
# Process anchor and image tags. Images must come first,
|
||||
# because ![foo][f] looks like an anchor.
|
||||
"doImages" => 10,
|
||||
"doAnchors" => 20,
|
||||
|
||||
# Make links out of things like `<http://example.com/>`
|
||||
# Must come after doAnchors, because you can use < and >
|
||||
# delimiters in inline links like [this](<url>).
|
||||
"doAutoLinks" => 30,
|
||||
"encodeAmpsAndAngles" => 40,
|
||||
|
||||
"doItalicsAndBold" => 50,
|
||||
"doHardBreaks" => 60,
|
||||
);
|
||||
|
||||
function runSpanGamut($text) {
|
||||
#
|
||||
# Run span gamut tranformations.
|
||||
#
|
||||
foreach ($this->span_gamut as $method => $priority) {
|
||||
$text = $this->$method($text);
|
||||
}
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
function doHardBreaks($text) {
|
||||
# Do hard breaks:
|
||||
return preg_replace_callback('/ {2,}\n/',
|
||||
array(&$this, '_doHardBreaks_callback'), $text);
|
||||
}
|
||||
function _doHardBreaks_callback($matches) {
|
||||
return $this->hashPart("<br$this->empty_element_suffix\n");
|
||||
}
|
||||
|
||||
|
||||
function doAnchors($text) {
|
||||
#
|
||||
# Turn Markdown link shortcuts into XHTML <a> tags.
|
||||
#
|
||||
if ($this->in_anchor) return $text;
|
||||
$this->in_anchor = true;
|
||||
|
||||
#
|
||||
# First, handle reference-style links: [link text] [id]
|
||||
#
|
||||
$text = preg_replace_callback('{
|
||||
( # wrap whole match in $1
|
||||
\[
|
||||
('.$this->nested_brackets_re.') # link text = $2
|
||||
\]
|
||||
|
||||
[ ]? # one optional space
|
||||
(?:\n[ ]*)? # one optional newline followed by spaces
|
||||
|
||||
\[
|
||||
(.*?) # id = $3
|
||||
\]
|
||||
)
|
||||
}xs',
|
||||
array(&$this, '_doAnchors_reference_callback'), $text);
|
||||
|
||||
#
|
||||
# Next, inline-style links: [link text](url "optional title")
|
||||
#
|
||||
$text = preg_replace_callback('{
|
||||
( # wrap whole match in $1
|
||||
\[
|
||||
('.$this->nested_brackets_re.') # link text = $2
|
||||
\]
|
||||
\( # literal paren
|
||||
[ ]*
|
||||
(?:
|
||||
<(\S*)> # href = $3
|
||||
|
|
||||
('.$this->nested_url_parenthesis_re.') # href = $4
|
||||
)
|
||||
[ ]*
|
||||
( # $5
|
||||
([\'"]) # quote char = $6
|
||||
(.*?) # Title = $7
|
||||
\6 # matching quote
|
||||
[ ]* # ignore any spaces/tabs between closing quote and )
|
||||
)? # title is optional
|
||||
\)
|
||||
)
|
||||
}xs',
|
||||
array(&$this, '_DoAnchors_inline_callback'), $text);
|
||||
|
||||
#
|
||||
# Last, handle reference-style shortcuts: [link text]
|
||||
# These must come last in case you've also got [link test][1]
|
||||
# or [link test](/foo)
|
||||
#
|
||||
// $text = preg_replace_callback('{
|
||||
// ( # wrap whole match in $1
|
||||
// \[
|
||||
// ([^\[\]]+) # link text = $2; can\'t contain [ or ]
|
||||
// \]
|
||||
// )
|
||||
// }xs',
|
||||
// array(&$this, '_doAnchors_reference_callback'), $text);
|
||||
|
||||
$this->in_anchor = false;
|
||||
return $text;
|
||||
}
|
||||
function _doAnchors_reference_callback($matches) {
|
||||
$whole_match = $matches[1];
|
||||
$link_text = $matches[2];
|
||||
$link_id =& $matches[3];
|
||||
|
||||
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 = "<a href=\"$url\"";
|
||||
if ( isset( $this->titles[$link_id] ) ) {
|
||||
$title = $this->titles[$link_id];
|
||||
$title = $this->encodeAttribute($title);
|
||||
$result .= " title=\"$title\"";
|
||||
}
|
||||
|
||||
$link_text = $this->runSpanGamut($link_text);
|
||||
$result .= ">$link_text</a>";
|
||||
$result = $this->hashPart($result);
|
||||
}
|
||||
else {
|
||||
$result = $whole_match;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
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 = "<a href=\"$url\"";
|
||||
if (isset($title)) {
|
||||
$title = $this->encodeAttribute($title);
|
||||
$result .= " title=\"$title\"";
|
||||
}
|
||||
|
||||
$link_text = $this->runSpanGamut($link_text);
|
||||
$result .= ">$link_text</a>";
|
||||
|
||||
return $this->hashPart($result);
|
||||
}
|
||||
|
||||
|
||||
function doImages($text) {
|
||||
#
|
||||
# Turn Markdown image shortcuts into <img> tags.
|
||||
#
|
||||
#
|
||||
# First, handle reference-style labeled images: ![alt text][id]
|
||||
#
|
||||
$text = preg_replace_callback('{
|
||||
( # wrap whole match in $1
|
||||
!\[
|
||||
('.$this->nested_brackets_re.') # alt text = $2
|
||||
\]
|
||||
|
||||
[ ]? # one optional space
|
||||
(?:\n[ ]*)? # one optional newline followed by spaces
|
||||
|
||||
\[
|
||||
(.*?) # id = $3
|
||||
\]
|
||||
|
||||
)
|
||||
}xs',
|
||||
array(&$this, '_doImages_reference_callback'), $text);
|
||||
|
||||
#
|
||||
# Next, handle inline images: 
|
||||
# Don't forget: encode * and _
|
||||
#
|
||||
$text = preg_replace_callback('{
|
||||
( # wrap whole match in $1
|
||||
!\[
|
||||
('.$this->nested_brackets_re.') # alt text = $2
|
||||
\]
|
||||
\s? # One optional whitespace character
|
||||
\( # literal paren
|
||||
[ ]*
|
||||
(?:
|
||||
<(\S*)> # src url = $3
|
||||
|
|
||||
('.$this->nested_url_parenthesis_re.') # src url = $4
|
||||
)
|
||||
[ ]*
|
||||
( # $5
|
||||
([\'"]) # quote char = $6
|
||||
(.*?) # title = $7
|
||||
\6 # matching quote
|
||||
[ ]*
|
||||
)? # title is optional
|
||||
\)
|
||||
)
|
||||
}xs',
|
||||
array(&$this, '_doImages_inline_callback'), $text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
function _doImages_reference_callback($matches) {
|
||||
$whole_match = $matches[1];
|
||||
$alt_text = $matches[2];
|
||||
$link_id = strtolower($matches[3]);
|
||||
|
||||
if ($link_id == "") {
|
||||
$link_id = strtolower($alt_text); # for shortcut links like ![this][].
|
||||
}
|
||||
|
||||
$alt_text = $this->encodeAttribute($alt_text);
|
||||
if (isset($this->urls[$link_id])) {
|
||||
$url = $this->encodeAttribute($this->urls[$link_id]);
|
||||
$result = "<img src=\"$url\" alt=\"$alt_text\"";
|
||||
if (isset($this->titles[$link_id])) {
|
||||
$title = $this->titles[$link_id];
|
||||
$title = $this->encodeAttribute($title);
|
||||
$result .= " title=\"$title\"";
|
||||
}
|
||||
$result .= $this->empty_element_suffix;
|
||||
$result = $this->hashPart($result);
|
||||
}
|
||||
else {
|
||||
# If there's no such link ID, leave intact:
|
||||
$result = $whole_match;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
function _doImages_inline_callback($matches) {
|
||||
$whole_match = $matches[1];
|
||||
$alt_text = $matches[2];
|
||||
$url = $matches[3] == '' ? $matches[4] : $matches[3];
|
||||
$title =& $matches[7];
|
||||
|
||||
$alt_text = $this->encodeAttribute($alt_text);
|
||||
$url = $this->encodeAttribute($url);
|
||||
$result = "<img src=\"$url\" alt=\"$alt_text\"";
|
||||
if (isset($title)) {
|
||||
$title = $this->encodeAttribute($title);
|
||||
$result .= " title=\"$title\""; # $title already quoted
|
||||
}
|
||||
$result .= $this->empty_element_suffix;
|
||||
|
||||
return $this->hashPart($result);
|
||||
}
|
||||
|
||||
|
||||
function doHeaders($text) {
|
||||
# Setext-style headers:
|
||||
# Header 1
|
||||
# ========
|
||||
#
|
||||
# Header 2
|
||||
# --------
|
||||
#
|
||||
$text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx',
|
||||
array(&$this, '_doHeaders_callback_setext'), $text);
|
||||
|
||||
# atx-style headers:
|
||||
# # Header 1
|
||||
# ## Header 2
|
||||
# ## Header 2 with closing hashes ##
|
||||
# ...
|
||||
# ###### Header 6
|
||||
#
|
||||
$text = preg_replace_callback('{
|
||||
^(\#{1,6}) # $1 = string of #\'s
|
||||
[ ]*
|
||||
(.+?) # $2 = Header text
|
||||
[ ]*
|
||||
\#* # optional closing #\'s (not counted)
|
||||
\n+
|
||||
}xm',
|
||||
array(&$this, '_doHeaders_callback_atx'), $text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
function _doHeaders_callback_setext($matches) {
|
||||
# Terrible hack to check we haven't found an empty list item.
|
||||
if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
|
||||
return $matches[0];
|
||||
|
||||
$level = $matches[2]{0} == '=' ? 1 : 2;
|
||||
$block = "<h$level>".$this->runSpanGamut($matches[1])."</h$level>";
|
||||
return "\n" . $this->hashBlock($block) . "\n\n";
|
||||
}
|
||||
function _doHeaders_callback_atx($matches) {
|
||||
$level = strlen($matches[1]);
|
||||
$block = "<h$level>".$this->runSpanGamut($matches[2])."</h$level>";
|
||||
return "\n" . $this->hashBlock($block) . "\n\n";
|
||||
}
|
||||
|
||||
|
||||
function doLists($text) {
|
||||
#
|
||||
# Form HTML ordered (numbered) and unordered (bulleted) lists.
|
||||
#
|
||||
$less_than_tab = $this->tab_width - 1;
|
||||
|
||||
# Re-usable patterns to match list item bullets and number markers:
|
||||
$marker_ul_re = '[*+-]';
|
||||
$marker_ol_re = '\d+[.]';
|
||||
$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
|
||||
|
||||
$markers_relist = array($marker_ul_re, $marker_ol_re);
|
||||
|
||||
foreach ($markers_relist as $marker_re) {
|
||||
# Re-usable pattern to match any entirel ul or ol list:
|
||||
$whole_list_re = '
|
||||
( # $1 = whole list
|
||||
( # $2
|
||||
[ ]{0,'.$less_than_tab.'}
|
||||
('.$marker_re.') # $3 = first list item marker
|
||||
[ ]+
|
||||
)
|
||||
(?s:.+?)
|
||||
( # $4
|
||||
\z
|
||||
|
|
||||
\n{2,}
|
||||
(?=\S)
|
||||
(?! # Negative lookahead for another list item marker
|
||||
[ ]*
|
||||
'.$marker_re.'[ ]+
|
||||
)
|
||||
)
|
||||
)
|
||||
'; // mx
|
||||
|
||||
# We use a different prefix before nested lists than top-level lists.
|
||||
# See extended comment in _ProcessListItems().
|
||||
|
||||
if ($this->list_level) {
|
||||
$text = preg_replace_callback('{
|
||||
^
|
||||
'.$whole_list_re.'
|
||||
}mx',
|
||||
array(&$this, '_doLists_callback'), $text);
|
||||
}
|
||||
else {
|
||||
$text = preg_replace_callback('{
|
||||
(?:(?<=\n)\n|\A\n?) # Must eat the newline
|
||||
'.$whole_list_re.'
|
||||
}mx',
|
||||
array(&$this, '_doLists_callback'), $text);
|
||||
}
|
||||
}
|
||||
|
||||
return $text;
|
||||
}
|
||||
function _doLists_callback($matches) {
|
||||
# Re-usable patterns to match list item bullets and number markers:
|
||||
$marker_ul_re = '[*+-]';
|
||||
$marker_ol_re = '\d+[.]';
|
||||
$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
|
||||
|
||||
$list = $matches[1];
|
||||
$list_type = preg_match("/$marker_ul_re/", $matches[3]) ? "ul" : "ol";
|
||||
|
||||
$marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
|
||||
|
||||
$list .= "\n";
|
||||
$result = $this->processListItems($list, $marker_any_re);
|
||||
|
||||
$result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
|
||||
return "\n". $result ."\n\n";
|
||||
}
|
||||
|
||||
var $list_level = 0;
|
||||
|
||||
function processListItems($list_str, $marker_any_re) {
|
||||
#
|
||||
# Process the contents of a single ordered or unordered list, splitting it
|
||||
# into individual list items.
|
||||
#
|
||||
# The $this->list_level global keeps track of when we're inside a list.
|
||||
# Each time we enter a list, we increment it; when we leave a list,
|
||||
# we decrement. If it's zero, we're not in a list anymore.
|
||||
#
|
||||
# We do this because when we're not inside a list, we want to treat
|
||||
# something like this:
|
||||
#
|
||||
# I recommend upgrading to version
|
||||
# 8. Oops, now this line is treated
|
||||
# as a sub-list.
|
||||
#
|
||||
# As a single paragraph, despite the fact that the second line starts
|
||||
# with a digit-period-space sequence.
|
||||
#
|
||||
# Whereas when we're inside a list (or sub-list), that line will be
|
||||
# treated as the start of a sub-list. What a kludge, huh? This is
|
||||
# an aspect of Markdown's syntax that's hard to parse perfectly
|
||||
# without resorting to mind-reading. Perhaps the solution is to
|
||||
# change the syntax rules such that sub-lists must start with a
|
||||
# starting cardinal number; e.g. "1." or "a.".
|
||||
|
||||
$this->list_level++;
|
||||
|
||||
# trim trailing blank lines:
|
||||
$list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
|
||||
|
||||
$list_str = preg_replace_callback('{
|
||||
(\n)? # leading line = $1
|
||||
(^[ ]*) # leading whitespace = $2
|
||||
('.$marker_any_re.' # list marker and space = $3
|
||||
(?:[ ]+|(?=\n)) # space only required if item is not empty
|
||||
)
|
||||
((?s:.*?)) # list item text = $4
|
||||
(?:(\n+(?=\n))|\n) # tailing blank line = $5
|
||||
(?= \n* (\z | \2 ('.$marker_any_re.') (?:[ ]+|(?=\n))))
|
||||
}xm',
|
||||
array(&$this, '_processListItems_callback'), $list_str);
|
||||
|
||||
$this->list_level--;
|
||||
return $list_str;
|
||||
}
|
||||
function _processListItems_callback($matches) {
|
||||
$item = $matches[4];
|
||||
$leading_line =& $matches[1];
|
||||
$leading_space =& $matches[2];
|
||||
$marker_space = $matches[3];
|
||||
$tailing_blank_line =& $matches[5];
|
||||
|
||||
if ($leading_line || $tailing_blank_line ||
|
||||
preg_match('/\n{2,}/', $item))
|
||||
{
|
||||
# Replace marker with the appropriate whitespace indentation
|
||||
$item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
|
||||
$item = $this->runBlockGamut($this->outdent($item)."\n");
|
||||
}
|
||||
else {
|
||||
# Recursion for sub-lists:
|
||||
$item = $this->doLists($this->outdent($item));
|
||||
$item = preg_replace('/\n+$/', '', $item);
|
||||
$item = $this->runSpanGamut($item);
|
||||
}
|
||||
|
||||
return "<li>" . $item . "</li>\n";
|
||||
}
|
||||
|
||||
|
||||
function doCodeBlocks($text) {
|
||||
#
|
||||
# Process Markdown `<pre><code>` 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 = "<pre><code>$codeblock\n</code></pre>";
|
||||
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>$code</code>");
|
||||
}
|
||||
|
||||
|
||||
var $em_relist = array(
|
||||
'' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S)(?![.,:;]\s)',
|
||||
'*' => '(?<=\S)(?<!\*)\*(?!\*)',
|
||||
'_' => '(?<=\S)(?<!_)_(?!_)',
|
||||
);
|
||||
var $strong_relist = array(
|
||||
'' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S)(?![.,:;]\s)',
|
||||
'**' => '(?<=\S)(?<!\*)\*\*(?!\*)',
|
||||
'__' => '(?<=\S)(?<!_)__(?!_)',
|
||||
);
|
||||
var $em_strong_relist = array(
|
||||
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S)(?![.,:;]\s)',
|
||||
'***' => '(?<=\S)(?<!\*)\*\*\*(?!\*)',
|
||||
'___' => '(?<=\S)(?<!_)___(?!_)',
|
||||
);
|
||||
var $em_strong_prepared_relist;
|
||||
|
||||
function prepareItalicsAndBold() {
|
||||
#
|
||||
# Prepare regular expressions for seraching emphasis tokens in any
|
||||
# context.
|
||||
#
|
||||
foreach ($this->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 = "<strong><em>$span</em></strong>";
|
||||
$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 = "<strong>$span</strong>";
|
||||
$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 = "<em>$span</em>";
|
||||
$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 <pre> content,
|
||||
# so we need to fix that:
|
||||
$bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx',
|
||||
array(&$this, '_DoBlockQuotes_callback2'), $bq);
|
||||
|
||||
return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\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 <p> 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 <p> 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('/^([ ]*)/', "<p>", $value);
|
||||
$value .= "</p>";
|
||||
$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 = <div> tag
|
||||
// <div \s+
|
||||
// [^>]*
|
||||
// \b
|
||||
// markdown\s*=\s* ([\'"]) # $2 = attr quote char
|
||||
// 1
|
||||
// \2
|
||||
// [^>]*
|
||||
// >
|
||||
// )
|
||||
// ( # $3 = contents
|
||||
// .*
|
||||
// )
|
||||
// (</div>) # $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: <http://bumppo.net/projects/amputator/>
|
||||
$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: <address@domain.foo>
|
||||
$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 = "<a href=\"$url\">$url</a>";
|
||||
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.:
|
||||
#
|
||||
# <p><a href="mailto:foo
|
||||
# @example.co
|
||||
# m">foo@exampl
|
||||
# e.com</a></p>
|
||||
#
|
||||
# Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
|
||||
# With some optimizations by Milian Wolff.
|
||||
#
|
||||
$addr = "mailto:" . $addr;
|
||||
$chars = preg_split('/(?<!^)(?!$)/', $addr);
|
||||
$seed = (int)abs(crc32($addr) / strlen($addr)); # Deterministic seed.
|
||||
|
||||
foreach ($chars as $key => $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] = '&#x'.dechex($ord).';';
|
||||
else $chars[$key] = '&#'.$ord.';';
|
||||
}
|
||||
}
|
||||
|
||||
$addr = implode('', $chars);
|
||||
$text = implode('', array_slice($chars, 7)); # text without `mailto:`
|
||||
$addr = "<a href=\"$addr\">$text</a>";
|
||||
|
||||
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.'
|
||||
|
|
||||
(?<![`\\\\])
|
||||
`+ # code span marker
|
||||
'.( $this->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 <p>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:
|
||||
#
|
||||
# <div>
|
||||
# <div markdown="1">
|
||||
# Hello World. <-- Is this a Markdown code block or text?
|
||||
# </div> <-- Is this a Markdown code block or a real tag?
|
||||
# <div>
|
||||
#
|
||||
# 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\[.*?\]\]> # 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))*?(?<!`)'.$tag_re.'(?!`)}',
|
||||
$text, $matches))
|
||||
{
|
||||
# End marker found: pass text unchanged until marker.
|
||||
$parsed .= $tag . $matches[0];
|
||||
$text = substr($text, strlen($matches[0]));
|
||||
}
|
||||
else {
|
||||
# Unmatched marker: just skip it.
|
||||
$parsed .= $tag;
|
||||
}
|
||||
}
|
||||
#
|
||||
# Check for: Indented code block or fenced code block marker.
|
||||
#
|
||||
else if ($tag{0} == "\n" || $tag{0} == "~") {
|
||||
if ($tag{1} == "\n" || $tag{1} == " ") {
|
||||
# Indented code block: pass it unchanged, will be handled
|
||||
# later.
|
||||
$parsed .= $tag;
|
||||
}
|
||||
else {
|
||||
# Fenced code block marker: find matching end marker.
|
||||
$tag_re = preg_quote(trim($tag));
|
||||
if (preg_match('{^(?>.*\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\[.*?\]\]> # 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 <hr/>)
|
||||
# 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 = "<a href=\"$url\"";
|
||||
if (isset($title)) {
|
||||
$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</a>";
|
||||
|
||||
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 = "<a href=\"$url\"";
|
||||
if ( isset( $this->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</a>";
|
||||
$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 = "<h$level$attr>$body</h$level>";
|
||||
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 = "<h$level$attr>$body</h$level>";
|
||||
return "\n" . $this->hashBlock($block) . "\n\n";
|
||||
}
|
||||
function _doHeaders_selflink($id, $body) {
|
||||
if (!empty($id)) {
|
||||
$link = '<a href="#'.$id.'"';
|
||||
|
||||
if ($this->ha_class) {
|
||||
$link .= ' class="'.$this->ha_class.'"';
|
||||
}
|
||||
|
||||
$link .= '>'.$this->ha_text.'</a>';
|
||||
|
||||
$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 = "<table>\n";
|
||||
$text .= "<thead>\n";
|
||||
$text .= "<tr>\n";
|
||||
foreach ($headers as $n => $header)
|
||||
$text .= " <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
|
||||
$text .= "</tr>\n";
|
||||
$text .= "</thead>\n";
|
||||
|
||||
# Split content by row.
|
||||
$rows = explode("\n", trim($content, "\n"));
|
||||
|
||||
$text .= "<tbody>\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 .= "<tr>\n";
|
||||
foreach ($row_cells as $n => $cell)
|
||||
$text .= " <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
|
||||
$text .= "</tr>\n";
|
||||
}
|
||||
$text .= "</tbody>\n";
|
||||
$text .= "</table>";
|
||||
|
||||
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 = "<dl>\n" . $result . "\n</dl>";
|
||||
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.'} [:][ ] |
|
||||
<dt | \z
|
||||
)
|
||||
)
|
||||
}xm',
|
||||
array(&$this, '_processDefListItems_callback_dd'), $list_str);
|
||||
|
||||
return $list_str;
|
||||
}
|
||||
function _processDefListItems_callback_dt($matches) {
|
||||
$anchor_regexp = '/\{\#([-_:a-zA-Z0-9]+)\}/';
|
||||
$terms = explode("\n", trim($matches[1]));
|
||||
$text = '';
|
||||
$id = array();
|
||||
|
||||
foreach ($terms as $term) {
|
||||
$id = '';
|
||||
if (preg_match($anchor_regexp, $term, $id) > 0) {
|
||||
$term = preg_replace($anchor_regexp, '', $term);
|
||||
$id = ' id="'.trim($id[1]).'"';
|
||||
}
|
||||
|
||||
if (count($id) === 0) {
|
||||
$id = '';
|
||||
}
|
||||
|
||||
$term = $this->runSpanGamut(trim($term));
|
||||
$text .= "\n<dt$id>" . $term . "</dt>";
|
||||
}
|
||||
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<dd>" . $def . "</dd>\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 = "<pre><code>$codeblock</code></pre>";
|
||||
return "\n\n".$this->hashBlock($codeblock)."\n\n";
|
||||
}
|
||||
function _doFencedCodeBlocks_newlines($matches) {
|
||||
return str_repeat("<br$this->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(
|
||||
'' => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S)(?![.,:;]\s)',
|
||||
'*' => '(?<=\S)(?<!\*)\*(?!\*)',
|
||||
'_' => '(?<=\S)(?<!_)_(?![a-zA-Z0-9_])',
|
||||
);
|
||||
var $strong_relist = array(
|
||||
'' => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S)(?![.,:;]\s)',
|
||||
'**' => '(?<=\S)(?<!\*)\*\*(?!\*)',
|
||||
'__' => '(?<=\S)(?<!_)__(?![a-zA-Z0-9_])',
|
||||
);
|
||||
var $em_strong_relist = array(
|
||||
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S)(?![.,:;]\s)',
|
||||
'***' => '(?<=\S)(?<!\*)\*\*\*(?!\*)',
|
||||
'___' => '(?<=\S)(?<!_)___(?![a-zA-Z0-9_])',
|
||||
);
|
||||
|
||||
|
||||
function formParagraphs($text) {
|
||||
#
|
||||
# Params:
|
||||
# $text - string to process with html <p> 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 <p> 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 = "<p>$value</p>";
|
||||
}
|
||||
$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 .= "<div class=\"footnotes\">\n";
|
||||
$text .= "<hr". MARKDOWN_EMPTY_ELEMENT_SUFFIX ."\n";
|
||||
$text .= "<ol>\n\n";
|
||||
|
||||
$attr = " rev=\"footnote\"";
|
||||
if ($this->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 = "<a href=\"#fnref:$note_id\"$attr>↩</a>";
|
||||
if (preg_match('{</p>$}', $footnote)) {
|
||||
$footnote = substr($footnote, 0, -4) . " $backlink</p>";
|
||||
} else {
|
||||
$footnote .= "\n\n<p>$backlink</p>";
|
||||
}
|
||||
|
||||
$text .= "<li id=\"fn:$note_id\">\n";
|
||||
$text .= $footnote . "\n";
|
||||
$text .= "</li>\n\n";
|
||||
}
|
||||
|
||||
$text .= "</ol>\n";
|
||||
$text .= "</div>";
|
||||
}
|
||||
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
|
||||
"<sup id=\"fnref:$node_id\">".
|
||||
"<a href=\"#fn:$node_id\"$attr>$num</a>".
|
||||
"</sup>";
|
||||
}
|
||||
|
||||
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 <abbr> elements.
|
||||
#
|
||||
if ($this->abbr_word_re) {
|
||||
// cannot use the /x modifier because abbr_word_re may
|
||||
// contain significant spaces:
|
||||
$text = preg_replace_callback('{'.
|
||||
'(?<![\w\x1A])'.
|
||||
'(?:'.$this->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>$abbr</abbr>");
|
||||
} else {
|
||||
$desc = $this->encodeAttribute($desc);
|
||||
return $this->hashPart("<abbr title=\"$desc\">$abbr</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 <div> and <table> as well).
|
||||
|
||||
For more information about Markdown's syntax, see:
|
||||
|
||||
<http://daringfireball.net/projects/markdown/>
|
||||
|
||||
|
||||
Bugs
|
||||
----
|
||||
|
||||
To file bug reports please send email to:
|
||||
|
||||
<michel.fortin@michelf.com>
|
||||
|
||||
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
|
||||
<http://www.michelf.com/>
|
||||
All rights reserved.
|
||||
|
||||
Based on Markdown
|
||||
Copyright (c) 2003-2006 John Gruber
|
||||
<http://daringfireball.net/>
|
||||
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.
|
||||
|
||||
*/
|
||||
?>
|
||||
11
mod/api.php
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
require_once('include/api.php');
|
||||
|
||||
function api_content(&$a) {
|
||||
echo api_call($a);
|
||||
killme();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -5,10 +5,11 @@ function apps_content(&$a) {
|
|||
|
||||
$o .= '<h3>' . t('Applications') . '</h3>';
|
||||
|
||||
$o .= '<div class="app-title"><a href="notes">' . t('Private Notes') . '</a></div>';
|
||||
|
||||
if($a->apps)
|
||||
$o .= $a->apps;
|
||||
|
||||
|
||||
return $o;
|
||||
|
||||
}
|
||||
|
|
@ -9,15 +9,20 @@ function contacts_init(&$a) {
|
|||
$a->page['aside'] .= group_side();
|
||||
|
||||
if($a->config['register_policy'] != REGISTER_CLOSED)
|
||||
$a->page['aside'] .= '<div class="side-invite-link-wrapper" id="side-invite-link-wrapper" ><a href="invite" class="side-invite-link" id="side-invite-link">' . t("Invite Friends") . '</a></div>';
|
||||
$a->page['aside'] .= '<div class="side-link" id="side-invite-link" ><a href="invite" >' . t("Invite Friends") . '</a></div>';
|
||||
|
||||
$tpl = load_view_file('view/follow.tpl');
|
||||
if(strlen(get_config('system','directory_submit_url')))
|
||||
$a->page['aside'] .= '<div class="side-link" id="side-match-link"><a href="match" >' . t('Find People With Shared Interests') . '</a></div>';
|
||||
|
||||
$tpl = get_markup_template('follow.tpl');
|
||||
$a->page['aside'] .= replace_macros($tpl,array(
|
||||
'$label' => t('Connect/Follow'),
|
||||
'$hint' => t('Example: bob@example.com, http://example.com/barbara'),
|
||||
'$follow' => t('Follow')
|
||||
));
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function contacts_post(&$a) {
|
||||
|
|
@ -137,7 +142,8 @@ function contacts_content(&$a) {
|
|||
intval(local_user())
|
||||
);
|
||||
if($r) {
|
||||
notice( t('Contact has been ') . (($blocked) ? t('blocked') : t('unblocked')) . EOL );
|
||||
//notice( t('Contact has been ') . (($blocked) ? t('blocked') : t('unblocked')) . EOL );
|
||||
notice( (($blocked) ? t('Contact has been blocked') : t('Contact has been unblocked')) . EOL );
|
||||
}
|
||||
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
|
||||
return; // NOTREACHED
|
||||
|
|
@ -151,7 +157,7 @@ function contacts_content(&$a) {
|
|||
intval(local_user())
|
||||
);
|
||||
if($r) {
|
||||
notice( t('Contact has been ') . (($readonly) ? t('ignored') : t('unignored')) . EOL );
|
||||
notice( (($readonly) ? t('Contact has been ignored') : t('Contact has been unignored')) . EOL );
|
||||
}
|
||||
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
|
||||
return; // NOTREACHED
|
||||
|
|
@ -162,7 +168,7 @@ function contacts_content(&$a) {
|
|||
// create an unfollow slap
|
||||
|
||||
if($orig_record[0]['network'] === 'stat') {
|
||||
$tpl = load_view_file('view/follow_slap.tpl');
|
||||
$tpl = get_markup_template('follow_slap.tpl');
|
||||
$slap = replace_macros($tpl, array(
|
||||
'$name' => $a->user['username'],
|
||||
'$profile_page' => $a->get_baseurl() . '/profile/' . $a->user['nickname'],
|
||||
|
|
@ -174,8 +180,8 @@ function contacts_content(&$a) {
|
|||
'$type' => 'text',
|
||||
'$content' => t('stopped following'),
|
||||
'$nick' => $a->user['nickname'],
|
||||
'$verb' => ACTIVITY_UNFOLLOW,
|
||||
'$ostat_follow' => '<as:verb>http://ostatus.org/schema/1.0/unfollow</as:verb>' . "\r\n"
|
||||
'$verb' => 'http://ostatus.org/schema/1.0/unfollow', // ACTIVITY_UNFOLLOW,
|
||||
'$ostat_follow' => '' // '<as:verb>http://ostatus.org/schema/1.0/unfollow</as:verb>' . "\r\n"
|
||||
));
|
||||
|
||||
if((x($orig_record[0],'notify')) && (strlen($orig_record[0]['notify']))) {
|
||||
|
|
@ -209,12 +215,12 @@ function contacts_content(&$a) {
|
|||
return;
|
||||
}
|
||||
|
||||
$tpl = load_view_file('view/contact_head.tpl');
|
||||
$tpl = get_markup_template('contact_head.tpl');
|
||||
$a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl()));
|
||||
|
||||
require_once('include/contact_selectors.php');
|
||||
|
||||
$tpl = load_view_file("view/contact_edit.tpl");
|
||||
$tpl = get_markup_template("contact_edit.tpl");
|
||||
|
||||
switch($r[0]['rel']) {
|
||||
case REL_BUD:
|
||||
|
|
@ -243,6 +249,9 @@ function contacts_content(&$a) {
|
|||
$sparkle = '';
|
||||
}
|
||||
|
||||
$insecure = '<div id="profile-edit-insecure"><p><img src="images/unlock_icon.gif" alt="' . t('Privacy Unavailable') . '" /> '
|
||||
. t('Private communications are not available for this contact.') . '</p></div>';
|
||||
|
||||
$last_update = (($r[0]['last-update'] == '0000-00-00 00:00:00')
|
||||
? t('Never')
|
||||
: datetime_convert('UTC',date_default_timezone_get(),$r[0]['last-update'],'D, j M Y, g:i A'));
|
||||
|
|
@ -252,9 +261,20 @@ 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 <em>reputation</em> 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'),
|
||||
'$altcrepair' => t('Repair contact URL settings'),
|
||||
'$lblcrepair' => t("Repair contact URL settings \x28WARNING: Advanced\x29"),
|
||||
'$lblrecent' => t('View conversations'),
|
||||
'$delete' => t('Delete contact'),
|
||||
'$poll_interval' => contact_poll_interval($r[0]['priority']),
|
||||
'$lastupdtext' => t('Last updated: '),
|
||||
|
|
@ -265,7 +285,7 @@ function contacts_content(&$a) {
|
|||
'$contact_id' => $r[0]['id'],
|
||||
'$block_text' => (($r[0]['blocked']) ? t('Unblock this contact') : t('Block this contact') ),
|
||||
'$ignore_text' => (($r[0]['readonly']) ? t('Unignore this contact') : t('Ignore this contact') ),
|
||||
'$insecure' => (($r[0]['network'] === 'stat') ? load_view_file('view/insecure_net.tpl') : ''),
|
||||
'$insecure' => (($r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_FACEBOOK) ? $insecure : ''),
|
||||
'$info' => $r[0]['info'],
|
||||
'$blocked' => (($r[0]['blocked']) ? '<div id="block-message">' . t('Currently blocked') . '</div>' : ''),
|
||||
'$ignored' => (($r[0]['readonly']) ? '<div id="ignore-message">' . t('Currently ignored') . '</div>' : ''),
|
||||
|
|
@ -297,7 +317,7 @@ function contacts_content(&$a) {
|
|||
|
||||
$search = ((x($_GET,'search')) ? notags(trim($_GET['search'])) : '');
|
||||
|
||||
$tpl = load_view_file("view/contacts-top.tpl");
|
||||
$tpl = get_markup_template("contacts-top.tpl");
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$header' => t('Contacts'),
|
||||
'$hide_url' => ((strlen($sql_extra)) ? 'contacts/all' : 'contacts' ),
|
||||
|
|
@ -331,7 +351,7 @@ function contacts_content(&$a) {
|
|||
|
||||
if(count($r)) {
|
||||
|
||||
$tpl = load_view_file("view/contact_template.tpl");
|
||||
$tpl = get_markup_template("contact_template.tpl");
|
||||
|
||||
foreach($r as $rr) {
|
||||
if($rr['self'])
|
||||
|
|
@ -364,13 +384,14 @@ function contacts_content(&$a) {
|
|||
|
||||
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$img_hover' => t('Visit ') . $rr['name'] . t('\'s profile'),
|
||||
'$img_hover' => t('Visit $username\'s profile'),
|
||||
'$edit_hover' => t('Edit contact'),
|
||||
'$id' => $rr['id'],
|
||||
'$alt_text' => $alt_text,
|
||||
'$dir_icon' => $dir_icon,
|
||||
'$thumb' => $rr['thumb'],
|
||||
'$name' => substr($rr['name'],0,20),
|
||||
'$username' => $rr['name'],
|
||||
'$sparkle' => $sparkle,
|
||||
'$url' => $url
|
||||
));
|
||||
|
|
|
|||
105
mod/crepair.php
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
<?php
|
||||
|
||||
function crepair_post(&$a) {
|
||||
if(! local_user())
|
||||
return;
|
||||
|
||||
$cid = (($a->argc > 1) ? intval($a->argv[1]) : 0);
|
||||
|
||||
if($cid) {
|
||||
$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($cid),
|
||||
intval(local_user())
|
||||
);
|
||||
}
|
||||
|
||||
if(! count($r))
|
||||
return;
|
||||
|
||||
$contact = $r[0];
|
||||
|
||||
$nick = ((x($_POST,'nick')) ? $_POST['nick'] : null);
|
||||
$url = ((x($_POST,'url')) ? $_POST['url'] : null);
|
||||
$request = ((x($_POST,'request')) ? $_POST['request'] : null);
|
||||
$confirm = ((x($_POST,'confirm')) ? $_POST['confirm'] : null);
|
||||
$notify = ((x($_POST,'notify')) ? $_POST['notify'] : null);
|
||||
$poll = ((x($_POST,'poll')) ? $_POST['poll'] : null);
|
||||
|
||||
|
||||
$r = q("UPDATE `contact` SET `nick` = '%s', `url` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s'
|
||||
WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
dbesc($nick),
|
||||
dbesc($url),
|
||||
dbesc($request),
|
||||
dbesc($confirm),
|
||||
dbesc($notify),
|
||||
dbesc($poll),
|
||||
intval($contact['id']),
|
||||
local_user()
|
||||
);
|
||||
|
||||
if($r)
|
||||
notice( t('Contact settings applied.') . EOL);
|
||||
else
|
||||
notice( t('Contact update failed.') . EOL);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function crepair_content(&$a) {
|
||||
|
||||
if(! local_user()) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$cid = (($a->argc > 1) ? intval($a->argv[1]) : 0);
|
||||
|
||||
if($cid) {
|
||||
$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($cid),
|
||||
intval(local_user())
|
||||
);
|
||||
}
|
||||
|
||||
if(! count($r)) {
|
||||
notice( t('Contact not found.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$contact = $r[0];
|
||||
|
||||
$msg1 = t('Repair Contact Settings');
|
||||
|
||||
$msg2 = t('<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working.');
|
||||
$msg3 = t('Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.');
|
||||
|
||||
$o .= '<h2>' . $msg1 . '</h2>';
|
||||
|
||||
$o .= '<div class="error-message">' . $msg2 . EOL . EOL. $msg3 . '</div>';
|
||||
|
||||
$tpl = get_markup_template('crepair.tpl');
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$label_name' => t('Name'),
|
||||
'$label_nick' => t('Account Nickname'),
|
||||
'$label_url' => t('Account URL'),
|
||||
'$label_request' => t('Friend Request URL'),
|
||||
'$label_confirm' => t('Friend Confirm URL'),
|
||||
'$label_notify' => t('Notification Endpoint URL'),
|
||||
'$label_poll' => t('Poll/Feed URL'),
|
||||
'$contact_name' => $contact['name'],
|
||||
'$contact_nick' => $contact['nick'],
|
||||
'$contact_id' => $contact['id'],
|
||||
'$contact_url' => $contact['url'],
|
||||
'$request' => $contact['request'],
|
||||
'$confirm' => $contact['confirm'],
|
||||
'$notify' => $contact['notify'],
|
||||
'$poll' => $contact['poll'],
|
||||
'$lbl_submit' => t('Submit')
|
||||
));
|
||||
|
||||
return $o;
|
||||
|
||||
}
|
||||
|
|
@ -240,7 +240,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
|
|||
notice( t('Unexpected response from remote site: ') . EOL . $leading_junk . EOL );
|
||||
}
|
||||
|
||||
$xml = simplexml_load_string($res);
|
||||
$xml = parse_xml_string($res);
|
||||
$status = (int) $xml->status;
|
||||
$message = unxmlify($xml->message); // human readable text of what may have gone wrong.
|
||||
switch($status) {
|
||||
|
|
@ -423,9 +423,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
|
|||
$arr['author-avatar'] = $arr['owner-avatar'] = $self[0]['thumb'];
|
||||
$arr['verb'] = ACTIVITY_FRIEND;
|
||||
$arr['object-type'] = ACTIVITY_OBJ_PERSON;
|
||||
$arr['body'] = '[url=' . $self[0]['url'] . ']' . $self[0]['name'] . '[/url] ' . t('is now friends with')
|
||||
. ' [url=' . $contact['url'] . ']' . $contact['name'] . '[/url]' . "\n\n\n"
|
||||
. ' [url=' . $contact['url'] . ']' . '[img]' . $contact['thumb'] . '[/img][/url]';
|
||||
|
||||
$A = '[url=' . $self[0]['url'] . ']' . $self[0]['name'] . '[/url]';
|
||||
$B = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
|
||||
$BPhoto = '[url=' . $contact['url'] . ']' . '[img]' . $contact['thumb'] . '[/img][/url]';
|
||||
$arr['body'] = sprintf( t('%1$s is now friends with %2$s'), $A, $B)."\n\n\n".$Bphoto;
|
||||
|
||||
$arr['object'] = '<object><type>' . ACTIVITY_OBJ_PERSON . '</type><title>' . $contact['name'] . '</title>'
|
||||
. '<id>' . $contact['url'] . '/' . $contact['name'] . '</id>';
|
||||
|
|
@ -434,6 +436,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
|
|||
$arr['object'] .= '</link></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");
|
||||
|
|
@ -491,7 +498,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
|
|||
dbesc($node));
|
||||
|
||||
if(! count($r)) {
|
||||
$message = t('No user record found for ') . '\'' . $node . '\'';
|
||||
$message = sprintf(t('No user record found for \'%s\' '), $node);
|
||||
xml_status(3,$message); // failure
|
||||
// NOTREACHED
|
||||
}
|
||||
|
|
@ -632,8 +639,8 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
|
|||
if((count($r)) && ($r[0]['notify-flags'] & NOTIFY_CONFIRM)) {
|
||||
|
||||
$tpl = (($new_relation == REL_BUD)
|
||||
? load_view_file('view/friend_complete_eml.tpl')
|
||||
: load_view_file('view/intro_complete_eml.tpl'));
|
||||
? get_intltext_template('friend_complete_eml.tpl')
|
||||
: get_intltext_template('intro_complete_eml.tpl'));
|
||||
|
||||
$email_tpl = replace_macros($tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
|
|
@ -645,8 +652,12 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
|
|||
'$uid' => $newuid )
|
||||
);
|
||||
|
||||
$res = mail($r[0]['email'], t("Connection accepted at ") . $a->config['sitename'],
|
||||
$email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
|
||||
$res = mail($r[0]['email'], sprintf( t("Connection accepted at %s") , $a->config['sitename']),
|
||||
$email_tpl,
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
|
||||
if(!$res) {
|
||||
// pointless throwing an error here and confusing the person at the other end of the wire.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -198,7 +210,7 @@ function dfrn_notify_post(&$a) {
|
|||
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$msg['body']))));
|
||||
|
||||
// load the template for private message notifications
|
||||
$tpl = load_view_file('view/mail_received_html_body_eml.tpl');
|
||||
$tpl = get_intltext_template('mail_received_html_body_eml.tpl');
|
||||
$email_html_body_tpl = replace_macros($tpl,array(
|
||||
'$siteName' => $a->config['sitename'], // name of this site
|
||||
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
|
||||
|
|
@ -213,7 +225,7 @@ function dfrn_notify_post(&$a) {
|
|||
));
|
||||
|
||||
// load the template for private message notifications
|
||||
$tpl = load_view_file('view/mail_received_text_body_eml.tpl');
|
||||
$tpl = get_intltext_template('mail_received_text_body_eml.tpl');
|
||||
$email_text_body_tpl = replace_macros($tpl,array(
|
||||
'$siteName' => $a->config['sitename'], // name of this site
|
||||
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
|
||||
|
|
@ -262,10 +274,13 @@ function dfrn_notify_post(&$a) {
|
|||
$when = datetime_convert('UTC','UTC','now','Y-m-d H:i:s');
|
||||
}
|
||||
if($deleted) {
|
||||
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
|
||||
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `contact-id` = %d LIMIT 1",
|
||||
dbesc($uri),
|
||||
intval($importer['importer_uid'])
|
||||
intval($importer['importer_uid']),
|
||||
intval($importer['id'])
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
$item = $r[0];
|
||||
|
||||
|
|
@ -374,21 +389,7 @@ function dfrn_notify_post(&$a) {
|
|||
if((! $is_like) && ($importer['notify-flags'] & NOTIFY_COMMENT) && (! $importer['self'])) {
|
||||
require_once('bbcode.php');
|
||||
$from = stripslashes($datarray['author-name']);
|
||||
/*
|
||||
$tpl = load_view_file('view/cmnt_received_eml.tpl');
|
||||
$email_tpl = replace_macros($tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
'$username' => $importer['username'],
|
||||
'$email' => $importer['email'],
|
||||
'$display' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
|
||||
'$from' => $from,
|
||||
'$body' => html_entity_decode(strip_tags(bbcode(stripslashes($datarray['body']))), ENT_QUOTES, 'UTF-8')
|
||||
));
|
||||
|
||||
$res = mail($importer['email'], $from . t(' commented on an item at ') . $a->config['sitename'],
|
||||
$email_tpl, "From: " . t('Administrator') . '@' . $a->get_hostname() );
|
||||
*/
|
||||
|
||||
// name of the automated email sender
|
||||
$msg['notificationfromname'] = stripslashes($datarray['author-name']);;
|
||||
// noreply address to send from
|
||||
|
|
@ -405,7 +406,7 @@ function dfrn_notify_post(&$a) {
|
|||
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
|
||||
|
||||
// load the template for private message notifications
|
||||
$tpl = load_view_file('view/cmnt_received_html_body_eml.tpl');
|
||||
$tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
|
||||
$email_html_body_tpl = replace_macros($tpl,array(
|
||||
'$sitename' => $a->config['sitename'], // name of this site
|
||||
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
|
||||
|
|
@ -418,7 +419,7 @@ function dfrn_notify_post(&$a) {
|
|||
));
|
||||
|
||||
// load the template for private message notifications
|
||||
$tpl = load_view_file('view/cmnt_received_text_body_eml.tpl');
|
||||
$tpl = get_intltext_template('cmnt_received_text_body_eml.tpl');
|
||||
$email_text_body_tpl = replace_macros($tpl,array(
|
||||
'$sitename' => $a->config['sitename'], // name of this site
|
||||
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
|
||||
|
|
@ -515,24 +516,6 @@ function dfrn_notify_post(&$a) {
|
|||
continue;
|
||||
require_once('bbcode.php');
|
||||
$from = stripslashes($datarray['author-name']);
|
||||
/*
|
||||
$tpl = load_view_file('view/cmnt_received_eml.tpl');
|
||||
$email_tpl = replace_macros($tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
'$username' => $importer['username'],
|
||||
'$email' => $importer['email'],
|
||||
'$from' => $from,
|
||||
'$display' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $r,
|
||||
'$body' => html_entity_decode(strip_tags(bbcode(stripslashes($datarray['body']))), ENT_QUOTES, 'UTF-8')
|
||||
));
|
||||
|
||||
$res = mail($importer['email'], $from . t(" commented on an item at ")
|
||||
. $a->config['sitename'],
|
||||
$email_tpl,t("From: Administrator@") . $a->get_hostname() );
|
||||
*/
|
||||
|
||||
|
||||
|
||||
// name of the automated email sender
|
||||
$msg['notificationfromname'] = stripslashes($datarray['author-name']);;
|
||||
|
|
@ -550,7 +533,7 @@ function dfrn_notify_post(&$a) {
|
|||
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
|
||||
|
||||
// load the template for private message notifications
|
||||
$tpl = load_view_file('view/cmnt_received_html_body_eml.tpl');
|
||||
$tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
|
||||
$email_html_body_tpl = replace_macros($tpl,array(
|
||||
'$sitename' => $a->config['sitename'], // name of this site
|
||||
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
|
||||
|
|
@ -562,7 +545,7 @@ function dfrn_notify_post(&$a) {
|
|||
));
|
||||
|
||||
// load the template for private message notifications
|
||||
$tpl = load_view_file('view/cmnt_received_text_body_eml.tpl');
|
||||
$tpl = get_intltext_template('cmnt_received_text_body_eml.tpl');
|
||||
$email_text_body_tpl = replace_macros($tpl,array(
|
||||
'$sitename' => $a->config['sitename'], // name of this site
|
||||
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
@ -26,6 +27,10 @@ function dfrn_poll_init(&$a) {
|
|||
}
|
||||
|
||||
if(($dfrn_id === '') && (! x($_POST,'dfrn_id')) && ($a->argc > 1)) {
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
killme();
|
||||
}
|
||||
|
||||
logger('dfrn_poll: public feed request from ' . $_SERVER['REMOTE_ADDR'] );
|
||||
header("Content-type: application/atom+xml");
|
||||
$o = get_feed_for($a, '', $a->argv[1],$last_update);
|
||||
|
|
@ -69,13 +74,14 @@ function dfrn_poll_init(&$a) {
|
|||
|
||||
if(strlen($s)) {
|
||||
|
||||
$xml = simplexml_load_string($s);
|
||||
$xml = parse_xml_string($s);
|
||||
|
||||
if((int) $xml->status == 1) {
|
||||
$_SESSION['authenticated'] = 1;
|
||||
$_SESSION['visitor_id'] = $r[0]['id'];
|
||||
$_SESSION['visitor_home'] = $r[0]['url'];
|
||||
notice( $r[0]['username'] . t(' welcomes ') . $r[0]['name'] . EOL);
|
||||
$_SESSION['visitor_visiting'] = $r[0]['uid'];
|
||||
notice( sprintf(t('%s welcomes %s'), $r[0]['username'] , $r[0]['name']) . EOL);
|
||||
// Visitors get 1 day session.
|
||||
$session_id = session_id();
|
||||
$expire = time() + 86400;
|
||||
|
|
@ -92,7 +98,7 @@ function dfrn_poll_init(&$a) {
|
|||
|
||||
}
|
||||
|
||||
if($type === 'profile-check') {
|
||||
if($type === 'profile-check' && $dfrn_version < 2.2 ) {
|
||||
|
||||
if((strlen($challenge)) && (strlen($sec))) {
|
||||
|
||||
|
|
@ -182,7 +188,69 @@ function dfrn_poll_post(&$a) {
|
|||
$dfrn_id = ((x($_POST,'dfrn_id')) ? $_POST['dfrn_id'] : '');
|
||||
$challenge = ((x($_POST,'challenge')) ? $_POST['challenge'] : '');
|
||||
$url = ((x($_POST,'url')) ? $_POST['url'] : '');
|
||||
$sec = ((x($_POST,'sec')) ? $_POST['sec'] : '');
|
||||
$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') {
|
||||
|
||||
if((strlen($challenge)) && (strlen($sec))) {
|
||||
|
||||
logger('dfrn_poll: POST: profile-check');
|
||||
|
||||
q("DELETE FROM `profile_check` WHERE `expire` < " . intval(time()));
|
||||
$r = q("SELECT * FROM `profile_check` WHERE `sec` = '%s' ORDER BY `expire` DESC LIMIT 1",
|
||||
dbesc($sec)
|
||||
);
|
||||
if(! count($r)) {
|
||||
xml_status(3, 'No ticket');
|
||||
// NOTREACHED
|
||||
}
|
||||
$orig_id = $r[0]['dfrn_id'];
|
||||
if(strpos($orig_id, ':'))
|
||||
$orig_id = substr($orig_id,2);
|
||||
|
||||
$c = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
|
||||
intval($r[0]['cid'])
|
||||
);
|
||||
if(! count($c)) {
|
||||
xml_status(3, 'No profile');
|
||||
}
|
||||
$contact = $c[0];
|
||||
|
||||
$sent_dfrn_id = hex2bin($dfrn_id);
|
||||
$challenge = hex2bin($challenge);
|
||||
|
||||
$final_dfrn_id = '';
|
||||
|
||||
if(($contact['duplex']) && strlen($contact['prvkey'])) {
|
||||
openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
|
||||
openssl_private_decrypt($challenge,$decoded_challenge,$contact['prvkey']);
|
||||
}
|
||||
else {
|
||||
openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
|
||||
openssl_public_decrypt($challenge,$decoded_challenge,$contact['pubkey']);
|
||||
}
|
||||
|
||||
$final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
|
||||
|
||||
if(strpos($final_dfrn_id,':') == 1)
|
||||
$final_dfrn_id = substr($final_dfrn_id,2);
|
||||
|
||||
if($final_dfrn_id != $orig_id) {
|
||||
logger('profile_check: ' . $final_dfrn_id . ' != ' . $orig_id, LOGGER_DEBUG);
|
||||
// did not decode properly - cannot trust this site
|
||||
xml_status(3, 'Bad decryption');
|
||||
}
|
||||
|
||||
header("Content-type: text/xml");
|
||||
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><dfrn_poll><status>0</status><challenge>$decoded_challenge</challenge><sec>$sec</sec></dfrn_poll>";
|
||||
killme();
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$direction = (-1);
|
||||
if(strpos($dfrn_id,':') == 1) {
|
||||
|
|
@ -234,6 +302,7 @@ function dfrn_poll_post(&$a) {
|
|||
if(! count($r))
|
||||
killme();
|
||||
|
||||
$contact = $r[0];
|
||||
$owner_uid = $r[0]['uid'];
|
||||
$contact_id = $r[0]['id'];
|
||||
|
||||
|
|
@ -267,6 +336,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;
|
||||
|
|
@ -283,6 +369,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) {
|
||||
|
|
@ -363,21 +450,51 @@ function dfrn_poll_content(&$a) {
|
|||
}
|
||||
|
||||
if(($type === 'profile') && (strlen($sec))) {
|
||||
|
||||
// URL reply
|
||||
|
||||
$s = fetch_url($r[0]['poll']
|
||||
. '?dfrn_id=' . $encrypted_id
|
||||
. '&type=profile-check'
|
||||
. '&dfrn_version=' . DFRN_PROTOCOL_VERSION
|
||||
. '&challenge=' . $challenge
|
||||
. '&sec=' . $sec
|
||||
);
|
||||
if($dfrn_version < 2.2) {
|
||||
$s = fetch_url($r[0]['poll']
|
||||
. '?dfrn_id=' . $encrypted_id
|
||||
. '&type=profile-check'
|
||||
. '&dfrn_version=' . DFRN_PROTOCOL_VERSION
|
||||
. '&challenge=' . $challenge
|
||||
. '&sec=' . $sec
|
||||
);
|
||||
}
|
||||
else {
|
||||
$s = post_url($r[0]['poll'], array(
|
||||
'dfrn_id' => $encrypted_id,
|
||||
'type' => 'profile-check',
|
||||
'dfrn_version' => DFRN_PROTOCOL_VERSION,
|
||||
'challenge' => $challenge,
|
||||
'sec' => $sec
|
||||
));
|
||||
}
|
||||
|
||||
$profile = $r[0]['nickname'];
|
||||
|
||||
switch($destination_url) {
|
||||
case 'profile':
|
||||
$dest = $a->get_baseurl() . '/profile/' . $profile . '?tab=profile';
|
||||
break;
|
||||
case 'photos':
|
||||
$dest = $a->get_baseurl() . '/photos/' . $profile;
|
||||
break;
|
||||
case 'status':
|
||||
case '':
|
||||
$dest = $a->get_baseurl() . '/profile/' . $profile;
|
||||
break;
|
||||
default:
|
||||
$dest = $destination_url;
|
||||
break;
|
||||
}
|
||||
|
||||
logger("dfrn_poll: sec profile: " . $s, LOGGER_DATA);
|
||||
|
||||
if(strlen($s) && strstr($s,'<?xml')) {
|
||||
|
||||
$xml = simplexml_load_string($s);
|
||||
$xml = parse_xml_string($s);
|
||||
|
||||
logger('dfrn_poll: profile: parsed xml: ' . print_r($xml,true), LOGGER_DATA);
|
||||
|
||||
|
|
@ -389,7 +506,8 @@ function dfrn_poll_content(&$a) {
|
|||
$_SESSION['authenticated'] = 1;
|
||||
$_SESSION['visitor_id'] = $r[0]['id'];
|
||||
$_SESSION['visitor_home'] = $r[0]['url'];
|
||||
notice( $r[0]['username'] . t(' welcomes ') . $r[0]['name'] . EOL);
|
||||
$_SESSION['visitor_visiting'] = $r[0]['uid'];
|
||||
notice( sprintf(t('%s welcomes %s'), $r[0]['username'] , $r[0]['name']) . EOL);
|
||||
// Visitors get 1 day session.
|
||||
$session_id = session_id();
|
||||
$expire = time() + 86400;
|
||||
|
|
@ -398,10 +516,10 @@ function dfrn_poll_content(&$a) {
|
|||
dbesc($session_id)
|
||||
);
|
||||
}
|
||||
$profile = $r[0]['nickname'];
|
||||
goaway((strlen($destination_url)) ? $destination_url : $a->get_baseurl() . '/profile/' . $profile);
|
||||
|
||||
goaway($dest);
|
||||
}
|
||||
goaway($a->get_baseurl());
|
||||
goaway($dest);
|
||||
// NOTREACHED
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,10 @@
|
|||
if(! function_exists('dfrn_request_init')) {
|
||||
function dfrn_request_init(&$a) {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
return;
|
||||
}
|
||||
|
||||
if($a->argc > 1)
|
||||
$which = $a->argv[1];
|
||||
|
||||
|
|
@ -123,9 +127,9 @@ function dfrn_request_post(&$a) {
|
|||
notice( t('Warning: profile location has no profile photo.') . EOL );
|
||||
$invalid = validate_dfrn($parms);
|
||||
if($invalid) {
|
||||
notice( $invalid . t(' required parameter')
|
||||
. (($invalid == 1) ? t(" was ") : t("s were ") )
|
||||
. t("not found at the given location.") . EOL ) ;
|
||||
notice( sprintf( tt("%d required parameter was not found at the given location",
|
||||
"%d required parameters were not found at the given location",
|
||||
$invalid), $invalid) . EOL );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -238,7 +242,7 @@ function dfrn_request_post(&$a) {
|
|||
intval($uid)
|
||||
);
|
||||
if(count($r) > $maxreq) {
|
||||
notice( $a->profile['name'] . t(' has received too many connection requests today.') . EOL);
|
||||
notice( sprintf( t('%s has received too many connection requests today.'), $a->profile['name']) . EOL);
|
||||
notice( t('Spam protection measures have been invoked.') . EOL);
|
||||
notice( t('Friends are advised to please try again in 24 hours.') . EOL);
|
||||
return;
|
||||
|
|
@ -306,7 +310,7 @@ function dfrn_request_post(&$a) {
|
|||
return;
|
||||
}
|
||||
elseif($ret[0]['rel'] == REL_BUD) {
|
||||
notice( t('Apparently you are already friends with .') . $a->profile['name'] . EOL);
|
||||
notice( sprintf( t('Apparently you are already friends with %s.'), $a->profile['name']) . EOL);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
|
|
@ -354,9 +358,9 @@ function dfrn_request_post(&$a) {
|
|||
notice( t('Warning: profile location has no profile photo.') . EOL );
|
||||
$invalid = validate_dfrn($parms);
|
||||
if($invalid) {
|
||||
notice( $invalid . t(' required parameter')
|
||||
. (($invalid == 1) ? t(" was ") : t("s were ") )
|
||||
. t("not found at the given location.") . EOL ) ;
|
||||
notice( sprintf( tt("%d required parameter was not found at the given location",
|
||||
"%d required parameters were not found at the given location",
|
||||
$invalid), $invalid) . EOL );
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
@ -495,12 +499,14 @@ function dfrn_request_content(&$a) {
|
|||
$dfrn_url = notags(trim(hex2bin($_GET['dfrn_url'])));
|
||||
$aes_allow = (((x($_GET,'aes_allow')) && ($_GET['aes_allow'] == 1)) ? 1 : 0);
|
||||
$confirm_key = (x($_GET,'confirm_key') ? $_GET['confirm_key'] : "");
|
||||
$o .= load_view_file("view/dfrn_req_confirm.tpl");
|
||||
$o = replace_macros($o,array(
|
||||
$tpl = get_markup_template("dfrn_req_confirm.tpl");
|
||||
$o = replace_macros($tpl,array(
|
||||
'$dfrn_url' => $dfrn_url,
|
||||
'$aes_allow' => (($aes_allow) ? '<input type="hidden" name="aes_allow" value="1" />' : "" ),
|
||||
'$confirm_key' => $confirm_key,
|
||||
'$username' => $a->user['username'],
|
||||
'$welcome' => sprintf( t('Welcome home %s.'), $a->user['username']),
|
||||
'$please' => sprintf( t('Please confirm your introduction/connection request to %s.'), $dfrn_url),
|
||||
'$submit' => t('Confirm'),
|
||||
'$uid' => $_SESSION['uid'],
|
||||
'$nickname' => $a->user['nickname'],
|
||||
'dfrn_rawurl' => $_GET['dfrn_url']
|
||||
|
|
@ -531,7 +537,7 @@ function dfrn_request_content(&$a) {
|
|||
if($r[0]['page-flags'] != PAGE_NORMAL)
|
||||
$auto_confirm = true;
|
||||
if(($r[0]['notify-flags'] & NOTIFY_INTRO) && (! $auto_confirm)) {
|
||||
$email_tpl = load_view_file('view/request_notify_eml.tpl');
|
||||
$email_tpl = get_intltext_template('request_notify_eml.tpl');
|
||||
$email = replace_macros($email_tpl, array(
|
||||
'$requestor' => ((strlen(stripslashes($r[0]['name']))) ? stripslashes($r[0]['name']) : t('[Name Withheld]')),
|
||||
'$url' => stripslashes($r[0]['url']),
|
||||
|
|
@ -540,9 +546,12 @@ function dfrn_request_content(&$a) {
|
|||
'$sitename' => $a->config['sitename']
|
||||
));
|
||||
$res = mail($r[0]['email'],
|
||||
t("Introduction received at ") . $a->config['sitename'],
|
||||
t("Introduction received at ") . $a->config['sitename'],
|
||||
$email,
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
|
||||
// This is a redundant notification - no point throwing errors if it fails.
|
||||
}
|
||||
if($auto_confirm) {
|
||||
|
|
@ -578,6 +587,12 @@ function dfrn_request_content(&$a) {
|
|||
* Normal web request. Display our user's introduction form.
|
||||
*/
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Try to auto-fill the profile address
|
||||
*/
|
||||
|
|
@ -607,23 +622,24 @@ function dfrn_request_content(&$a) {
|
|||
*/
|
||||
|
||||
if($a->profile['page-flags'] == PAGE_NORMAL)
|
||||
$tpl = load_view_file('view/dfrn_request.tpl');
|
||||
$tpl = get_markup_template('dfrn_request.tpl');
|
||||
else
|
||||
$tpl = load_view_file('view/auto_request.tpl');
|
||||
$tpl = get_markup_template('auto_request.tpl');
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$header' => t('Friend/Connection Request'),
|
||||
'$desc' => t('Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'),
|
||||
'$pls_answer' => t('Please answer the following:'),
|
||||
'$does_know' => t('Does $name know you?'),
|
||||
'$yes' => t('Yes'),
|
||||
'$no' => t('No'),
|
||||
'$add_note' => t('Add a personal note:'),
|
||||
'$page_desc' => t('Please enter your profile address from one of the following supported social networks:'),
|
||||
'$page_desc' => t("Please enter your 'Identity Address' from one of the following supported social networks:"),
|
||||
'$friendika' => t('Friendika'),
|
||||
'$statusnet' => t('StatusNet/Federated Social Web'),
|
||||
'$private_net' => t("Private \x28secure\x29 network"),
|
||||
'$public_net' => t("Public \x28insecure\x29 network"),
|
||||
'$your_address' => t('Your profile address:'),
|
||||
'$your_address' => t('Your Identity Address:'),
|
||||
'$submit' => t('Submit Request'),
|
||||
'$cancel' => t('Cancel'),
|
||||
'$nickname' => $a->argv[1],
|
||||
|
|
|
|||
|
|
@ -13,6 +13,14 @@ function directory_post(&$a) {
|
|||
|
||||
|
||||
function directory_content(&$a) {
|
||||
|
||||
$everything = (($a->argc > 1 && $a->argv[1] === 'all' && is_site_admin()) ? true : false);
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$o = '';
|
||||
$o .= '<script> $(document).ready(function() { $(\'#nav-directory-link\').addClass(\'nav-selected\'); });</script>';
|
||||
if(x($_SESSION,'theme'))
|
||||
|
|
@ -23,7 +31,7 @@ function directory_content(&$a) {
|
|||
else
|
||||
$search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : '');
|
||||
|
||||
$tpl = load_view_file('view/directory_header.tpl');
|
||||
$tpl = get_markup_template('directory_header.tpl');
|
||||
|
||||
$globaldir = '';
|
||||
$gdirpath = dirname(get_config('system','directory_submit_url'));
|
||||
|
|
@ -32,32 +40,47 @@ function directory_content(&$a) {
|
|||
. $gdirpath . '">' . t('Global Directory') . '</a></div></li></ul>';
|
||||
}
|
||||
|
||||
$admin = '';
|
||||
if(is_site_admin()) {
|
||||
if($everything)
|
||||
$admin = '<ul><li><div id="directory-admin-link"><a href="' . $a->get_baseurl() . '/directory' . '">' . t('Normal site view') . '</a></div></li></ul>';
|
||||
else
|
||||
$admin = '<ul><li><div id="directory-admin-link"><a href="' . $a->get_baseurl() . '/directory/all' . '">' . t('View all site entries') . '</a></div></li></ul>';
|
||||
}
|
||||
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$search' => $search,
|
||||
'$globaldir' => $globaldir,
|
||||
'$finding' => (strlen($search) ? '<h4>' . t('Finding: ') . "'" . $search . "'" . '</h4>' : "")
|
||||
'$admin' => $admin,
|
||||
'$finding' => (strlen($search) ? '<h4>' . t('Finding: ') . "'" . $search . "'" . '</h4>' : ""),
|
||||
'$sitedir' => t('Site Directory'),
|
||||
'$submit' => t('Find')
|
||||
));
|
||||
|
||||
if($search)
|
||||
$search = dbesc($search);
|
||||
$sql_extra = ((strlen($search)) ? " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country-name`,`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`keywords` ) AGAINST ('$search' IN BOOLEAN MODE) " : "");
|
||||
$sql_extra = ((strlen($search)) ? " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country-name`,`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`pub_keywords`,`prv_keywords` ) AGAINST ('$search' IN BOOLEAN MODE) " : "");
|
||||
|
||||
$publish = ((get_config('system','publish_all')) ? '' : " AND `publish` = 1 " );
|
||||
$publish = ((get_config('system','publish_all') || $everything) ? '' : " AND `publish` = 1 " );
|
||||
|
||||
|
||||
$r = q("SELECT COUNT(*) AS `total` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra ");
|
||||
if(count($r))
|
||||
$a->set_pager_total($r[0]['total']);
|
||||
|
||||
if($everything)
|
||||
$order = " ORDER BY `register_date` DESC ";
|
||||
else
|
||||
$order = " ORDER BY `name` ASC ";
|
||||
|
||||
|
||||
$r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra ORDER BY `name` ASC LIMIT %d , %d ",
|
||||
$r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ",
|
||||
intval($a->pager['start']),
|
||||
intval($a->pager['itemspage'])
|
||||
);
|
||||
if(count($r)) {
|
||||
|
||||
$tpl = load_view_file('view/directory_item.tpl');
|
||||
$tpl = get_markup_template('directory_item.tpl');
|
||||
|
||||
if(in_array('small', $a->argv))
|
||||
$photo = 'thumb';
|
||||
|
|
@ -86,10 +109,10 @@ function directory_content(&$a) {
|
|||
}
|
||||
if(strlen($rr['dob'])) {
|
||||
if(($years = age($rr['dob'],$rr['timezone'],'')) != 0)
|
||||
$details .= "<br />Age: $years" ;
|
||||
$details .= '<br />' . t('Age: ') . $years ;
|
||||
}
|
||||
if(strlen($rr['gender']))
|
||||
$details .= '<br />Gender: ' . $rr['gender'];
|
||||
$details .= '<br />' . t('Gender: ') . $rr['gender'];
|
||||
|
||||
$entry = replace_macros($tpl,array(
|
||||
'$id' => $rr['id'],
|
||||
|
|
@ -115,7 +138,7 @@ function directory_content(&$a) {
|
|||
|
||||
}
|
||||
else
|
||||
notice("No entries (some entries may be hidden).");
|
||||
notice( t("No entries \x28some entries may be hidden\x29.") . EOL);
|
||||
|
||||
return $o;
|
||||
}
|
||||
199
mod/display.php
|
|
@ -3,6 +3,16 @@
|
|||
|
||||
function display_content(&$a) {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
require_once("include/bbcode.php");
|
||||
require_once('include/security.php');
|
||||
require_once('include/conversation.php');
|
||||
|
||||
|
||||
$o = '<div id="live-display"></div>' . "\r\n";
|
||||
|
||||
$nick = (($a->argc > 1) ? $a->argv[1] : '');
|
||||
|
|
@ -16,15 +26,10 @@ function display_content(&$a) {
|
|||
return;
|
||||
}
|
||||
|
||||
require_once("include/bbcode.php");
|
||||
require_once('include/security.php');
|
||||
|
||||
|
||||
$groups = array();
|
||||
|
||||
$tab = 'posts';
|
||||
|
||||
|
||||
$contact = null;
|
||||
$remote_contact = false;
|
||||
|
||||
|
|
@ -48,6 +53,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 +98,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 +112,6 @@ function display_content(&$a) {
|
|||
);
|
||||
|
||||
|
||||
|
||||
$cmnt_tpl = load_view_file('view/comment_item.tpl');
|
||||
$like_tpl = load_view_file('view/like.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,173 +121,9 @@ function display_content(&$a) {
|
|||
);
|
||||
}
|
||||
|
||||
foreach($r as $item) {
|
||||
like_puller($a,$item,$alike,'like');
|
||||
like_puller($a,$item,$dlike,'dislike');
|
||||
}
|
||||
|
||||
$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']))))
|
||||
? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,' . $item['id'] . ');" /></div>'
|
||||
: '<div class="wall-item-lock"></div>');
|
||||
|
||||
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"),
|
||||
'$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']);
|
||||
|
||||
// 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']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
|
||||
$coord = (($item['coord']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
|
||||
if($coord) {
|
||||
if($location)
|
||||
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
|
||||
else
|
||||
$location = '<span class="smalltext">' . $coord . '</span>';
|
||||
}
|
||||
|
||||
$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:'),
|
||||
'$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),
|
||||
'$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",
|
||||
|
|
|
|||
120
mod/editpost.php
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
<?php
|
||||
|
||||
require_once('acl_selectors.php');
|
||||
|
||||
function editpost_content(&$a) {
|
||||
|
||||
$o = '';
|
||||
|
||||
if(! local_user()) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);
|
||||
|
||||
if(! $post_id) {
|
||||
notice( t('Item not found') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$itm = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($post_id),
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
if(! count($itm)) {
|
||||
notice( t('Item not found') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$o .= '<h2>' . t('Edit post') . '</h2>';
|
||||
|
||||
$tpl = get_markup_template('jot-header.tpl');
|
||||
|
||||
$a->page['htmlhead'] .= replace_macros($tpl, array(
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$ispublic' => ' ', // t('Visible to <strong>everybody</strong>'),
|
||||
'$geotag' => $geotag,
|
||||
'$nickname' => $a->user['nickname']
|
||||
));
|
||||
|
||||
|
||||
$tpl = get_markup_template("jot.tpl");
|
||||
|
||||
if(($group) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))))
|
||||
$lockstate = 'lock';
|
||||
else
|
||||
$lockstate = 'unlock';
|
||||
|
||||
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
|
||||
|
||||
$jotplugins = '';
|
||||
$jotnets = '';
|
||||
|
||||
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
|
||||
|
||||
$mail_enabled = false;
|
||||
$pubmail_enabled = false;
|
||||
|
||||
if(! $mail_disabled) {
|
||||
$r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1",
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r)) {
|
||||
$mail_enabled = true;
|
||||
if(intval($r[0]['pubmail']))
|
||||
$pubmail_enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
if($mail_enabled) {
|
||||
$selected = (($pubmail_enabled) ? ' checked="checked" ' : '');
|
||||
$jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . 'value="1" /> '
|
||||
. t("Post to Email") . '</div>';
|
||||
}
|
||||
|
||||
|
||||
|
||||
call_hooks('jot_tool', $jotplugins);
|
||||
call_hooks('jot_networks', $jotnets);
|
||||
|
||||
$tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$return_path' => $_SESSION['return_url'],
|
||||
'$action' => 'item',
|
||||
'$share' => t('Edit'),
|
||||
'$upload' => t('Upload photo'),
|
||||
'$weblink' => t('Insert web link'),
|
||||
'$youtube' => t('Insert YouTube video'),
|
||||
'$video' => t('Insert Vorbis [.ogg] video'),
|
||||
'$audio' => t('Insert Vorbis [.ogg] audio'),
|
||||
'$setloc' => t('Set your location'),
|
||||
'$noloc' => t('Clear browser location'),
|
||||
'$wait' => t('Please wait'),
|
||||
'$permset' => t('Permission settings'),
|
||||
'$ptyp' => $itm[0]['type'],
|
||||
'$content' => $itm[0]['body'],
|
||||
'$post_id' => $post_id,
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$defloc' => $a->user['default-location'],
|
||||
'$visitor' => 'none',
|
||||
'$pvisit' => 'none',
|
||||
'$emailcc' => t('CC: email addresses'),
|
||||
'$public' => t('Public post'),
|
||||
'$jotnets' => $jotnets,
|
||||
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
|
||||
'$lockstate' => $lockstate,
|
||||
'$acl' => '', // populate_acl((($group) ? $group_acl : $a->user), $celeb),
|
||||
'$bang' => (($group) ? '!' : ''),
|
||||
'$profile_uid' => $_SESSION['uid']
|
||||
));
|
||||
|
||||
|
||||
return $o;
|
||||
|
||||
}
|
||||
|
||||
|
||||
204
mod/follow.php
|
|
@ -11,178 +11,56 @@ function follow_post(&$a) {
|
|||
}
|
||||
|
||||
$url = $orig_url = notags(trim($_POST['url']));
|
||||
|
||||
$email_conversant = false;
|
||||
|
||||
if($url) {
|
||||
$links = @lrdd($url);
|
||||
if(count($links)) {
|
||||
foreach($links as $link) {
|
||||
if($link['@attributes']['rel'] === NAMESPACE_DFRN)
|
||||
$dfrn = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === 'salmon')
|
||||
$notify = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === NAMESPACE_FEED)
|
||||
$poll = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard')
|
||||
$hcard = unamp($link['@attributes']['href']);
|
||||
if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page')
|
||||
$profile = unamp($link['@attributes']['href']);
|
||||
// remove ajax junk
|
||||
|
||||
}
|
||||
$url = str_replace('/#!/','/',$url);
|
||||
|
||||
// Status.Net can have more than one profile URL. We need to match the profile URL
|
||||
// to a contact on incoming messages to prevent spam, and we won't know which one
|
||||
// to match. So in case of two, one of them is stored as an alias. Only store URL's
|
||||
// and not webfinger user@host aliases. If they've got more than two non-email style
|
||||
// aliases, let's hope we're lucky and get one that matches the feed author-uri because
|
||||
// otherwise we're screwed.
|
||||
if(! allowed_url($url)) {
|
||||
notice( t('Disallowed profile URL.') . EOL);
|
||||
goaway($_SESSION['return_url']);
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
foreach($links as $link) {
|
||||
if($link['@attributes']['rel'] === 'alias') {
|
||||
if(strpos($link['@attributes']['href'],'@') === false) {
|
||||
if(isset($profile)) {
|
||||
if($link['@attributes']['href'] !== $profile)
|
||||
$alias = unamp($link['@attributes']['href']);
|
||||
}
|
||||
else
|
||||
$profile = unamp($link['@attributes']['href']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if((strpos($orig_url,'@')) && validate_email($orig_url)) {
|
||||
$email_conversant = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we find a DFRN site, send our subscriber to the other person's
|
||||
// dfrn_request page and all the other details will get sorted.
|
||||
$ret = probe_url($url);
|
||||
|
||||
if(strlen($dfrn)) {
|
||||
$ret = scrape_dfrn($dfrn);
|
||||
if(is_array($ret) && x($ret,'dfrn-request')) {
|
||||
if(strlen($a->path))
|
||||
$myaddr = bin2hex($a->get_baseurl() . '/profile/' . $a->user['nickname']);
|
||||
else
|
||||
$myaddr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname());
|
||||
|
||||
if($ret['network'] === NETWORK_DFRN) {
|
||||
if(strlen($a->path))
|
||||
$myaddr = bin2hex($a->get_baseurl() . '/profile/' . $a->user['nickname']);
|
||||
else
|
||||
$myaddr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname());
|
||||
|
||||
goaway($ret['dfrn-request'] . "&addr=$myaddr");
|
||||
goaway($ret['request'] . "&addr=$myaddr");
|
||||
|
||||
// NOTREACHED
|
||||
}
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
$network = 'stat';
|
||||
$priority = 0;
|
||||
|
||||
if($hcard) {
|
||||
$vcard = scrape_vcard($hcard);
|
||||
|
||||
// Google doesn't use absolute url in profile photos
|
||||
|
||||
if((x($vcard,'photo')) && substr($vcard['photo'],0,1) == '/') {
|
||||
$h = @parse_url($hcard);
|
||||
if($h)
|
||||
$vcard['photo'] = $h['scheme'] . '://' . $h['host'] . $vcard['photo'];
|
||||
}
|
||||
}
|
||||
|
||||
if(! $profile)
|
||||
$profile = $url;
|
||||
|
||||
|
||||
if(! x($vcard,'fn'))
|
||||
if(x($vcard,'nick'))
|
||||
$vcard['fn'] = $vcard['nick'];
|
||||
|
||||
if((! isset($vcard)) && (! $poll)) {
|
||||
|
||||
$ret = scrape_feed($url);
|
||||
|
||||
if(count($ret) && ($ret['feed_atom'] || $ret['feed_rss'])) {
|
||||
$poll = ((x($ret,'feed_atom')) ? unamp($ret['feed_atom']) : unamp($ret['feed_rss']));
|
||||
$vcard = array();
|
||||
require_once('simplepie/simplepie.inc');
|
||||
$feed = new SimplePie();
|
||||
$xml = fetch_url($poll);
|
||||
|
||||
$feed->set_raw_data($xml);
|
||||
|
||||
$feed->init();
|
||||
|
||||
$vcard['photo'] = $feed->get_image_url();
|
||||
$author = $feed->get_author();
|
||||
if($author) {
|
||||
$vcard['fn'] = unxmlify(trim($author->get_name()));
|
||||
if(! $vcard['fn'])
|
||||
$vcard['fn'] = trim(unxmlify($author->get_email()));
|
||||
if(strpos($vcard['fn'],'@') !== false)
|
||||
$vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
|
||||
$vcard['nick'] = strtolower(notags(unxmlify($vcard['fn'])));
|
||||
if(strpos($vcard['nick'],' '))
|
||||
$vcard['nick'] = trim(substr($vcard['nick'],0,strpos($vcard['nick'],' ')));
|
||||
$email = unxmlify($author->get_email());
|
||||
}
|
||||
else {
|
||||
$item = $feed->get_item(0);
|
||||
if($item) {
|
||||
$author = $item->get_author();
|
||||
if($author) {
|
||||
$vcard['fn'] = trim(unxmlify($author->get_name()));
|
||||
if(! $vcard['fn'])
|
||||
$vcard['fn'] = trim(unxmlify($author->get_email()));
|
||||
if(strpos($vcard['fn'],'@') !== false)
|
||||
$vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
|
||||
$vcard['nick'] = strtolower(unxmlify($vcard['fn']));
|
||||
if(strpos($vcard['nick'],' '))
|
||||
$vcard['nick'] = trim(substr($vcard['nick'],0,strpos($vcard['nick'],' ')));
|
||||
$email = unxmlify($author->get_email());
|
||||
}
|
||||
if(! $vcard['photo']) {
|
||||
$rawmedia = $item->get_item_tags('http://search.yahoo.com/mrss/','thumbnail');
|
||||
if($rawmedia && $rawmedia[0]['attribs']['']['url'])
|
||||
$vcard['photo'] = unxmlify($rawmedia[0]['attribs']['']['url']);
|
||||
}
|
||||
}
|
||||
}
|
||||
if((! $vcard['photo']) && strlen($email))
|
||||
$vcard['photo'] = gravatar_img($email);
|
||||
|
||||
$network = 'feed';
|
||||
$priority = 2;
|
||||
}
|
||||
}
|
||||
|
||||
logger('follow: poll=' . $poll . ' notify=' . $notify . ' profile=' . $profile . ' vcard=' . print_r($vcard,true));
|
||||
|
||||
$vcard['fn'] = notags($vcard['fn']);
|
||||
$vcard['nick'] = notags($vcard['nick']);
|
||||
|
||||
// do we have enough information?
|
||||
|
||||
if(! ((x($vcard['fn'])) && ($poll) && ($profile))) {
|
||||
if(! ((x($ret,'name')) && (x($ret,'poll')) && ((x($ret,'url')) || (x($ret,'addr'))))) {
|
||||
notice( t('The profile address specified does not provide adequate information.') . EOL);
|
||||
goaway($_SESSION['return_url']);
|
||||
}
|
||||
|
||||
|
||||
if(! $notify) {
|
||||
if(! $ret['notify']) {
|
||||
notice( t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . EOL);
|
||||
}
|
||||
|
||||
if(! x($vcard,'photo'))
|
||||
$vcard['photo'] = $a->get_baseurl() . '/images/default-profile.jpg' ;
|
||||
|
||||
$writeable = ((($ret['network'] === NETWORK_OSTATUS) && ($ret['notify'])) ? 1 : 0);
|
||||
if($ret['network'] === NETWORK_MAIL) {
|
||||
$writeable = 1;
|
||||
|
||||
}
|
||||
// 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
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` = '%s' LIMIT 1",
|
||||
intval(local_user()),
|
||||
dbesc($poll)
|
||||
dbesc($ret['poll'])
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
|
|
@ -197,26 +75,28 @@ 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 ) ",
|
||||
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
|
||||
`writable`, `blocked`, `readonly`, `pending` )
|
||||
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
|
||||
intval(local_user()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($profile),
|
||||
dbesc($alias),
|
||||
dbesc($notify),
|
||||
dbesc($poll),
|
||||
dbesc($vcard['fn']),
|
||||
dbesc($vcard['nick']),
|
||||
dbesc($vcard['photo']),
|
||||
dbesc($network),
|
||||
intval(REL_FAN),
|
||||
intval($priority)
|
||||
dbesc($ret['url']),
|
||||
dbesc($ret['addr']),
|
||||
dbesc($ret['alias']),
|
||||
dbesc($ret['notify']),
|
||||
dbesc($ret['poll']),
|
||||
dbesc($ret['name']),
|
||||
dbesc($ret['nick']),
|
||||
dbesc($ret['photo']),
|
||||
dbesc($ret['network']),
|
||||
intval(($ret['network'] === NETWORK_MAIL) ? REL_BUD : REL_FAN),
|
||||
intval($ret['priority']),
|
||||
intval($writeable)
|
||||
);
|
||||
}
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($profile),
|
||||
dbesc($ret['url']),
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
|
|
@ -231,7 +111,7 @@ function follow_post(&$a) {
|
|||
|
||||
require_once("Photo.php");
|
||||
|
||||
$photos = import_profile_photo($vcard['photo'],local_user(),$contact_id);
|
||||
$photos = import_profile_photo($ret['photo'],local_user(),$contact_id);
|
||||
|
||||
$r = q("UPDATE `contact` SET `photo` = '%s',
|
||||
`thumb` = '%s',
|
||||
|
|
@ -257,7 +137,7 @@ function follow_post(&$a) {
|
|||
|
||||
// create a follow slap
|
||||
|
||||
$tpl = load_view_file('view/follow_slap.tpl');
|
||||
$tpl = get_markup_template('follow_slap.tpl');
|
||||
$slap = replace_macros($tpl, array(
|
||||
'$name' => $a->user['username'],
|
||||
'$profile_page' => $a->get_baseurl() . '/profile/' . $a->user['nickname'],
|
||||
|
|
|
|||
68
mod/friendika.php
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
function friendika_init(&$a) {
|
||||
if ($a->argv[1]=="json"){
|
||||
$register_policy = Array('REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN');
|
||||
|
||||
if (isset($a->config['admin_email']) && $a->config['admin_email']!=''){
|
||||
$r = q("SELECT username, nickname FROM user WHERE email='%s'", $a->config['admin_email']);
|
||||
$admin = array(
|
||||
'name' => $r[0]['username'],
|
||||
'profile'=> $a->get_baseurl().'/profile/'.$r[0]['nickname'],
|
||||
);
|
||||
} else {
|
||||
$admin = false;
|
||||
}
|
||||
|
||||
$data = Array(
|
||||
'version' => FRIENDIKA_VERSION,
|
||||
'url' => $a->get_baseurl(),
|
||||
'plugins' => $a->plugins,
|
||||
'register_policy' => $register_policy[$a->config['register_policy']],
|
||||
'admin' => $admin,
|
||||
'site_name' => $a->config['sitename'],
|
||||
|
||||
);
|
||||
|
||||
echo str_replace('\\/','/',json_encode($data));
|
||||
killme();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function friendika_content(&$a) {
|
||||
|
||||
$o = '';
|
||||
$o .= '<h3>Friendika</h3>';
|
||||
|
||||
|
||||
$o .= '<p></p><p>';
|
||||
|
||||
$o .= 'View <a href="LICENSE">License</a>' . '<br /><br />';
|
||||
$o .= t('This is Friendika version') . ' ' . FRIENDIKA_VERSION . ' ';
|
||||
$o .= t('running at web location') . ' ' . $a->get_baseurl() . '</p><p>';
|
||||
|
||||
$o .= t('Shared content within the Friendika network is provided under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a>') . '</p><p>';
|
||||
|
||||
$o .= t('Please visit <a href="http://project.friendika.com">Project.Friendika.com</a> to learn more about the Friendika project.') . '</p><p>';
|
||||
|
||||
$o .= t('Bug reports and issues: please visit') . ' ' . '<a href="http://bugs.friendika.com">Bugs.Friendika.com</a></p><p>';
|
||||
$o .= t('Suggestions, praise, donations, etc. - please email "Info" at Friendika - dot com') . '</p>';
|
||||
|
||||
$o .= '<p></p>';
|
||||
|
||||
if(count($a->plugins)) {
|
||||
$o .= '<p>' . t('Installed plugins/addons/apps') . '</p>';
|
||||
$o .= '<ul>';
|
||||
foreach($a->plugins as $p)
|
||||
if(strlen($p))
|
||||
$o .= '<li>' . $p . '</li>';
|
||||
$o .= '</ul>';
|
||||
}
|
||||
else
|
||||
$o .= '<p>' . t('No installed plugins/addons/apps');
|
||||
|
||||
return $o;
|
||||
|
||||
}
|
||||
127
mod/group.php
|
|
@ -55,28 +55,7 @@ function group_post(&$a) {
|
|||
if($r)
|
||||
notice( t('Group name changed.') . EOL );
|
||||
}
|
||||
$members = $_POST['group_members_select'];
|
||||
if(is_array($members))
|
||||
array_walk($members,'validate_members');
|
||||
$r = q("DELETE FROM `group_member` WHERE `gid` = %d AND `uid` = %d",
|
||||
intval($a->argv[1]),
|
||||
intval(local_user())
|
||||
);
|
||||
$result = true;
|
||||
if(is_array($members) && count($members)) {
|
||||
foreach($members as $member) {
|
||||
$r = q("INSERT INTO `group_member` ( `uid`, `gid`, `contact-id`)
|
||||
VALUES ( %d, %d, %d )",
|
||||
intval(local_user()),
|
||||
intval($group['id']),
|
||||
intval($member)
|
||||
);
|
||||
if(! $r)
|
||||
$result = false;
|
||||
}
|
||||
}
|
||||
if($result)
|
||||
notice( t('Membership list updated.') . EOL);
|
||||
|
||||
$a->page['aside'] = group_side();
|
||||
}
|
||||
return;
|
||||
|
|
@ -90,8 +69,12 @@ function group_content(&$a) {
|
|||
}
|
||||
|
||||
if(($a->argc == 2) && ($a->argv[1] === 'new')) {
|
||||
$tpl = load_view_file('view/group_new.tpl');
|
||||
$o .= replace_macros($tpl,array());
|
||||
$tpl = get_markup_template('group_new.tpl');
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$desc' => t('Create a group of contacts/friends.'),
|
||||
'$name' => t('Group Name: '),
|
||||
'$submit' => t('Submit')
|
||||
));
|
||||
return $o;
|
||||
}
|
||||
|
||||
|
|
@ -109,13 +92,22 @@ function group_content(&$a) {
|
|||
notice( t('Unable to remove group.') . EOL);
|
||||
}
|
||||
goaway($a->get_baseurl() . '/group');
|
||||
return; // NOTREACHED
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
if(($a->argc > 2) && intval($a->argv[1]) && intval($a->argv[2])) {
|
||||
$r = q("SELECT `id` FROM `contact` WHERE `id` = %d AND `uid` = %d and `self` = 0 and `blocked` = 0 AND `pending` = 0 LIMIT 1",
|
||||
intval($a->argv[2]),
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r))
|
||||
$change = intval($a->argv[2]);
|
||||
}
|
||||
|
||||
if(($a->argc > 1) && (intval($a->argv[1]))) {
|
||||
|
||||
if(($a->argc == 2) && (intval($a->argv[1]))) {
|
||||
require_once('include/acl_selectors.php');
|
||||
$r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
$r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1",
|
||||
intval($a->argv[1]),
|
||||
intval(local_user())
|
||||
);
|
||||
|
|
@ -124,14 +116,31 @@ 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');
|
||||
if($change) {
|
||||
if(in_array($change,$preselected)) {
|
||||
group_rmv_member(local_user(),$group['name'],$change);
|
||||
}
|
||||
else {
|
||||
group_add_member(local_user(),$group['name'],$change);
|
||||
}
|
||||
|
||||
$members = group_get_members($group['id']);
|
||||
$preselected = array();
|
||||
if(count($members)) {
|
||||
foreach($members as $member)
|
||||
$preselected[] = $member['id'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$drop_tpl = get_markup_template('group_drop.tpl');
|
||||
$drop_txt = replace_macros($drop_tpl, array(
|
||||
'$id' => $group['id'],
|
||||
'$delete' => t('Delete')
|
||||
|
|
@ -139,15 +148,63 @@ function group_content(&$a) {
|
|||
|
||||
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
|
||||
|
||||
$tpl = load_view_file('view/group_edit.tpl');
|
||||
$tpl = get_markup_template('group_edit.tpl');
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$gid' => $group['id'],
|
||||
'$name' => $group['name'],
|
||||
'$drop' => $drop_txt,
|
||||
'$selector' => contact_select('group_members_select','group_members_select',$preselected,25,false,$celeb)
|
||||
'$desc' => t('Click on a contact to add or remove.'),
|
||||
'$title' => t('Group Editor'),
|
||||
'$gname' => t('Group Name: '),
|
||||
'$submit' => t('Submit')
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
if(! isset($group))
|
||||
return;
|
||||
|
||||
$o .= '<div id="group-update-wrapper">';
|
||||
if($change)
|
||||
$o = '';
|
||||
|
||||
$o .= '<div id="group-members">';
|
||||
$o .= '<h3>' . t('Members') . '</h3>';
|
||||
foreach($members as $member) {
|
||||
if($member['url']) {
|
||||
$member['click'] = 'groupChangeMember(' . $group['id'] . ',' . $member['id'] . '); return true;';
|
||||
$o .= micropro($member,true,'mpgroup');
|
||||
}
|
||||
else
|
||||
group_rmv_member(local_user(),$group['name'],$member['id']);
|
||||
}
|
||||
|
||||
$o .= '</div><div id="group-members-end"></div>';
|
||||
$o .= '<hr id="group-separator" />';
|
||||
$o .= '<div id="group-all-contacts">';
|
||||
|
||||
$o .= '<h3>' . t('All Contacts') . '</h3>';
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 and `pending` = 0 and `self` = 0 ORDER BY `name` ASC",
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
foreach($r as $member) {
|
||||
if(! in_array($member['id'],$preselected)) {
|
||||
$member['click'] = 'groupChangeMember(' . $group['id'] . ',' . $member['id'] . '); return true;';
|
||||
$o .= micropro($member,true,'mpall');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$o .= '</div><div id="group-all-contacts-end"></div>';
|
||||
|
||||
if($change) {
|
||||
echo $o;
|
||||
killme();
|
||||
}
|
||||
$o .= '</div>';
|
||||
return $o;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
37
mod/help.php
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
if(! function_exists('load_doc_file')) {
|
||||
function load_doc_file($s) {
|
||||
global $lang;
|
||||
if(! isset($lang))
|
||||
$lang = 'en';
|
||||
$b = basename($s);
|
||||
$d = dirname($s);
|
||||
if(file_exists("$d/$lang/$b"))
|
||||
return file_get_contents("$d/$lang/$b");
|
||||
return file_get_contents($s);
|
||||
}}
|
||||
|
||||
|
||||
|
||||
function help_content(&$a) {
|
||||
|
||||
global $lang;
|
||||
|
||||
require_once('library/markdown.php');
|
||||
|
||||
$text = '';
|
||||
|
||||
if($a->argc > 1) {
|
||||
$text = load_doc_file('doc/' . $a->argv[1] . '.md');
|
||||
$a->page['title'] = t('Help:') . ' ' . str_replace('-',' ',notags($a->argv[1]));
|
||||
}
|
||||
if(! $text) {
|
||||
$text = load_doc_file('doc/Home.md');
|
||||
$a->page['title'] = t('Help');
|
||||
}
|
||||
|
||||
|
||||
return Markdown($text);
|
||||
|
||||
}
|
||||
|
|
@ -20,7 +20,7 @@ function home_content(&$a) {
|
|||
if(x($_SESSION,'theme'))
|
||||
unset($_SESSION['theme']);
|
||||
|
||||
$o .= '<h1>' . ((x($a->config,'sitename')) ? t("Welcome to ").$a->config['sitename'] : "" ) . '</h1>';
|
||||
$o .= '<h1>' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '</h1>';
|
||||
if(file_exists('home.html'))
|
||||
$o .= file_get_contents('home.html');
|
||||
|
||||
|
|
|
|||
|
|
@ -14,17 +14,20 @@ function install_post(&$a) {
|
|||
$phpath = notags(trim($_POST['phpath']));
|
||||
|
||||
require_once("dba.php");
|
||||
|
||||
unset($db);
|
||||
$db = new dba($dbhost, $dbuser, $dbpass, $dbdata, true);
|
||||
|
||||
if(mysqli_connect_errno()) {
|
||||
unset($db);
|
||||
$db = new dba($dbhost, $dbuser, $dbpass, '', true);
|
||||
if(! mysqli_connect_errno()) {
|
||||
$r = q("CREATE DATABASE '%s'",
|
||||
dbesc($dbdata)
|
||||
);
|
||||
if($r)
|
||||
if($r) {
|
||||
unset($db);
|
||||
$db = new dba($dbhost, $dbuser, $dbpass, $dbdata, true);
|
||||
}
|
||||
}
|
||||
if(mysqli_connect_errno()) {
|
||||
notice( t('Could not create/connect to database.') . EOL);
|
||||
|
|
@ -34,7 +37,7 @@ function install_post(&$a) {
|
|||
|
||||
notice( t('Connected to database.') . EOL);
|
||||
|
||||
$tpl = load_view_file('view/htconfig.tpl');
|
||||
$tpl = get_intltext_template('htconfig.tpl');
|
||||
$txt = replace_macros($tpl,array(
|
||||
'$dbhost' => $dbhost,
|
||||
'$dbuser' => $dbuser,
|
||||
|
|
@ -50,36 +53,47 @@ function install_post(&$a) {
|
|||
}
|
||||
|
||||
$errors = load_database($db);
|
||||
if(! $errors) {
|
||||
// Our sessions normally are stored in the database. But as we have only managed
|
||||
// to get it bootstrapped milliseconds ago, we have to apply a bit of trickery so
|
||||
// that you'll see the following important notice (which is stored in the session).
|
||||
|
||||
session_write_close();
|
||||
if($errors)
|
||||
$a->data['db_failed'] = true;
|
||||
else
|
||||
$a->data['db_installed'] = true;
|
||||
|
||||
require_once('session.php');
|
||||
session_start();
|
||||
session_regenerate_id();
|
||||
|
||||
$_SESSION['sysmsg'] = '';
|
||||
|
||||
notice( t('Database import succeeded.') . EOL
|
||||
. t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.') . EOL
|
||||
. t('Please see the file "INSTALL.txt".') . EOL );
|
||||
goaway($a->get_baseurl() . '/register' );
|
||||
}
|
||||
else {
|
||||
$db = null; // start fresh
|
||||
notice( t('Database import failed.') . EOL
|
||||
. t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL
|
||||
. t('Please see the file "INSTALL.txt".') . EOL );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
function install_content(&$a) {
|
||||
|
||||
global $db;
|
||||
$o = '';
|
||||
|
||||
if(x($a->data,'db_installed')) {
|
||||
$o .= '<h2>' . t('Proceed with Installation') . '</h2>';
|
||||
$o .= '<p style="font-size: 130%;">';
|
||||
$o .= t('Your Friendika site database has been installed.') . EOL;
|
||||
$o .= t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.') . EOL ;
|
||||
$o .= t('Please see the file "INSTALL.txt".') . EOL ;
|
||||
$o .= '<br />';
|
||||
$o .= '<a href="' . $a->get_baseurl() . '/register' . '">' . t('Proceed to registration') . '</a>' ;
|
||||
$o .= '</p>';
|
||||
return $o;
|
||||
}
|
||||
|
||||
if(x($a->data,'db_failed')) {
|
||||
$o .= t('Database import failed.') . EOL;
|
||||
$o .= t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL;
|
||||
$o .= t('Please see the file "INSTALL.txt".') . EOL ;
|
||||
return $o;
|
||||
}
|
||||
|
||||
if($db && $db->connected) {
|
||||
$r = q("SELECT COUNT(*) as `total` FROM `user`");
|
||||
if($r && count($r) && $r[0]['total']) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
notice( t('Welcome to Friendika.') . EOL);
|
||||
|
||||
|
|
@ -102,8 +116,18 @@ function install_content(&$a) {
|
|||
|
||||
require_once('datetime.php');
|
||||
|
||||
$tpl = load_view_file('view/install_db.tpl');
|
||||
$tpl = get_markup_template('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'),
|
||||
|
|
|
|||
|
|
@ -25,21 +25,25 @@ function invite_post(&$a) {
|
|||
$recip = trim($recip);
|
||||
|
||||
if(! valid_email($recip)) {
|
||||
notice( $recip . t(' : ') . t('Not a valid email address.') . EOL);
|
||||
notice( sprintf( t('%s : Not a valid email address.'), $recip) . EOL);
|
||||
continue;
|
||||
}
|
||||
|
||||
$res = mail($recip, t('Please join my network on ') . $a->config['sitename'],
|
||||
$message, "From: " . $a->user['email']);
|
||||
$res = mail($recip, sprintf(t('Please join my network on %s'), $a->config['sitename']),
|
||||
$message,
|
||||
"From: " . $a->user['email'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
|
||||
if($res) {
|
||||
$total ++;
|
||||
}
|
||||
else {
|
||||
notice( $recip . t(' : ') . t('Message delivery failed.') . EOL);
|
||||
notice( sprintf( t('%s : Message delivery failed.'), $recip) . EOL);
|
||||
}
|
||||
|
||||
}
|
||||
notice( $total . t(' messages sent.') . EOL);
|
||||
notice( sprintf( tt("%d message sent.", "%d messages sent.", $total) , $total) . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -51,13 +55,13 @@ function invite_content(&$a) {
|
|||
return;
|
||||
}
|
||||
|
||||
$tpl = load_view_file('view/invite.tpl');
|
||||
$tpl = get_markup_template('invite.tpl');
|
||||
|
||||
$o = replace_macros($tpl, array(
|
||||
'$invite' => t('Send invitations'),
|
||||
'$addr_text' => t('Enter email addresses, one per line:'),
|
||||
'$msg_text' => t('Your message:'),
|
||||
'$default_message' => t('Please join my social network on ') . $a->config['sitename'] . "\r\n" . "\r\n"
|
||||
'$default_message' => sprintf(t('Please join my social network on %s'), $a->config['sitename']) . "\r\n" . "\r\n"
|
||||
. t('To accept this invitation, please visit:') . "\r\n" . "\r\n" . $a->get_baseurl()
|
||||
. "\r\n" . "\r\n" . t('Once you have registered, please connect with me via my profile page at:')
|
||||
. "\r\n" . "\r\n" . $a->get_baseurl() . '/profile/' . $a->user['nickname'] ,
|
||||
|
|
|
|||
181
mod/item.php
|
|
@ -51,7 +51,7 @@ function item_post(&$a) {
|
|||
}
|
||||
|
||||
$profile_uid = ((x($_POST,'profile_uid')) ? intval($_POST['profile_uid']) : 0);
|
||||
|
||||
$post_id = ((x($_POST['post_id'])) ? intval($_POST['post_id']) : 0);
|
||||
|
||||
if(! can_write_wall($a,$profile_uid)) {
|
||||
notice( t('Permission denied.') . EOL) ;
|
||||
|
|
@ -60,6 +60,21 @@ function item_post(&$a) {
|
|||
killme();
|
||||
}
|
||||
|
||||
|
||||
// is this an edited post?
|
||||
|
||||
$orig_post = null;
|
||||
|
||||
if($post_id) {
|
||||
$i = q("SELECT * FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
|
||||
intval($profile_uid),
|
||||
intval($post_id)
|
||||
);
|
||||
if(! count($i))
|
||||
killme();
|
||||
$orig_post = $i[0];
|
||||
}
|
||||
|
||||
$user = null;
|
||||
|
||||
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
|
|
@ -68,37 +83,53 @@ function item_post(&$a) {
|
|||
if(count($r))
|
||||
$user = $r[0];
|
||||
|
||||
if($orig_post) {
|
||||
$str_group_allow = $orig_post['allow_gid'];
|
||||
$str_contact_allow = $orig_post['allow_cid'];
|
||||
$str_group_deny = $orig_post['deny_gid'];
|
||||
$str_contact_deny = $orig_post['deny_cid'];
|
||||
$title = $orig_post['title'];
|
||||
$location = $orig_post['location'];
|
||||
$coord = $orig_post['coord'];
|
||||
$verb = $orig_post['verb'];
|
||||
$emailcc = $orig_post['emailcc'];
|
||||
|
||||
$str_group_allow = perms2str($_POST['group_allow']);
|
||||
$str_contact_allow = perms2str($_POST['contact_allow']);
|
||||
$str_group_deny = perms2str($_POST['group_deny']);
|
||||
$str_contact_deny = perms2str($_POST['contact_deny']);
|
||||
|
||||
$private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 1 : 0);
|
||||
|
||||
if(($parent_item) &&
|
||||
(($parent_item['private'])
|
||||
|| strlen($parent_item['allow_cid'])
|
||||
|| strlen($parent_item['allow_gid'])
|
||||
|| strlen($parent_item['deny_cid'])
|
||||
|| strlen($parent_item['deny_gid'])
|
||||
)
|
||||
) {
|
||||
$private = 1;
|
||||
$body = escape_tags(trim($_POST['body']));
|
||||
$private = $orig_post['private'];
|
||||
$pubmail_enable = $orig_post['pubmail'];
|
||||
}
|
||||
else {
|
||||
$str_group_allow = perms2str($_POST['group_allow']);
|
||||
$str_contact_allow = perms2str($_POST['contact_allow']);
|
||||
$str_group_deny = perms2str($_POST['group_deny']);
|
||||
$str_contact_deny = perms2str($_POST['contact_deny']);
|
||||
$title = notags(trim($_POST['title']));
|
||||
$location = notags(trim($_POST['location']));
|
||||
$coord = notags(trim($_POST['coord']));
|
||||
$verb = notags(trim($_POST['verb']));
|
||||
$emailcc = notags(trim($_POST['emailcc']));
|
||||
|
||||
$title = notags(trim($_POST['title']));
|
||||
$body = escape_tags(trim($_POST['body']));
|
||||
$location = notags(trim($_POST['location']));
|
||||
$coord = notags(trim($_POST['coord']));
|
||||
$verb = notags(trim($_POST['verb']));
|
||||
$emailcc = notags(trim($_POST['emailcc']));
|
||||
$body = escape_tags(trim($_POST['body']));
|
||||
$private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 1 : 0);
|
||||
|
||||
if(! strlen($body)) {
|
||||
notice( t('Empty post discarded.') . EOL );
|
||||
if(x($_POST,'return'))
|
||||
goaway($a->get_baseurl() . "/" . $_POST['return'] );
|
||||
killme();
|
||||
if(($parent_item) &&
|
||||
(($parent_item['private'])
|
||||
|| strlen($parent_item['allow_cid'])
|
||||
|| strlen($parent_item['allow_gid'])
|
||||
|| strlen($parent_item['deny_cid'])
|
||||
|| strlen($parent_item['deny_gid'])
|
||||
)) {
|
||||
$private = 1;
|
||||
}
|
||||
|
||||
$pubmail_enable = ((x($_POST,'pubmail_enable') && intval($_POST['pubmail_enable']) && (! $private)) ? 1 : 0);
|
||||
|
||||
if(! strlen($body)) {
|
||||
notice( t('Empty post discarded.') . EOL );
|
||||
if(x($_POST,'return'))
|
||||
goaway($a->get_baseurl() . "/" . $_POST['return'] );
|
||||
killme();
|
||||
}
|
||||
}
|
||||
|
||||
// get contact info for poster
|
||||
|
|
@ -151,7 +182,6 @@ function item_post(&$a) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* When a photo was uploaded into the message using the (profile wall) ajax
|
||||
|
|
@ -212,6 +242,8 @@ function item_post(&$a) {
|
|||
if(count($tags)) {
|
||||
foreach($tags as $tag) {
|
||||
if(strpos($tag,'#') === 0) {
|
||||
if(strpos($tag,'[url='))
|
||||
continue;
|
||||
$basetag = str_replace('_',' ',substr($tag,1));
|
||||
$body = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?search=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$body);
|
||||
if(strlen($str_tags))
|
||||
|
|
@ -220,6 +252,8 @@ function item_post(&$a) {
|
|||
continue;
|
||||
}
|
||||
if(strpos($tag,'@') === 0) {
|
||||
if(strpos($tag,'[url='))
|
||||
continue;
|
||||
$stat = false;
|
||||
$name = substr($tag,1);
|
||||
if((strpos($name,'@')) || (strpos($name,'http://'))) {
|
||||
|
|
@ -283,15 +317,13 @@ function item_post(&$a) {
|
|||
$str_tags .= ',';
|
||||
$str_tags .= '@[url=' . $alias . ']' . $newname . '[/url]';
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
$wall = 0;
|
||||
|
||||
if($post_type === 'wall' || $post_type === 'wall-comment')
|
||||
$wall = 1;
|
||||
|
||||
|
|
@ -332,6 +364,7 @@ function item_post(&$a) {
|
|||
$datarray['deny_cid'] = $str_contact_deny;
|
||||
$datarray['deny_gid'] = $str_group_deny;
|
||||
$datarray['private'] = $private;
|
||||
$datarray['pubmail'] = $pubmail_enable;
|
||||
|
||||
/**
|
||||
* These fields are for the convenience of plugins...
|
||||
|
|
@ -342,13 +375,35 @@ function item_post(&$a) {
|
|||
$datarray['parent'] = $parent;
|
||||
$datarray['self'] = $self;
|
||||
|
||||
if($orig_post)
|
||||
$datarray['edit'] = true;
|
||||
|
||||
call_hooks('post_local',$datarray);
|
||||
|
||||
|
||||
if($orig_post) {
|
||||
$r = q("UPDATE `item` SET `body` = '%s', `edited` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
dbesc($body),
|
||||
dbesc(datetime_convert()),
|
||||
intval($post_id),
|
||||
intval($profile_uid)
|
||||
);
|
||||
|
||||
proc_run('php', "include/notifier.php", 'edit_post', "$post_id");
|
||||
if((x($_POST,'return')) && strlen($_POST['return'])) {
|
||||
logger('return: ' . $_POST['return']);
|
||||
goaway($a->get_baseurl() . "/" . $_POST['return'] );
|
||||
}
|
||||
killme();
|
||||
}
|
||||
else
|
||||
$post_id = 0;
|
||||
|
||||
|
||||
$r = q("INSERT INTO `item` (`uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`,
|
||||
`author-name`, `author-link`, `author-avatar`, `created`, `edited`, `changed`, `uri`, `title`, `body`, `location`, `coord`,
|
||||
`tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private` )
|
||||
VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d )",
|
||||
`tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail` )
|
||||
VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )",
|
||||
intval($datarray['uid']),
|
||||
dbesc($datarray['type']),
|
||||
intval($datarray['wall']),
|
||||
|
|
@ -375,7 +430,8 @@ function item_post(&$a) {
|
|||
dbesc($datarray['allow_gid']),
|
||||
dbesc($datarray['deny_cid']),
|
||||
dbesc($datarray['deny_gid']),
|
||||
intval($datarray['private'])
|
||||
intval($datarray['private']),
|
||||
intval($datarray['pubmail'])
|
||||
);
|
||||
|
||||
$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1",
|
||||
|
|
@ -408,21 +464,7 @@ function item_post(&$a) {
|
|||
if(($user['notify-flags'] & NOTIFY_COMMENT) && ($contact_record != $author)) {
|
||||
require_once('bbcode.php');
|
||||
$from = $author['name'];
|
||||
/*
|
||||
$tpl = load_view_file('view/cmnt_received_eml.tpl');
|
||||
$email_tpl = replace_macros($tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
'$username' => $user['username'],
|
||||
'$email' => $user['email'],
|
||||
'$from' => $from,
|
||||
'$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
|
||||
'$body' => strip_tags(bbcode($datarray['body']))
|
||||
));
|
||||
|
||||
$res = mail($user['email'], $from . t(" commented on your item at ") . $a->config['sitename'],
|
||||
$email_tpl,t("From: Administrator@") . $a->get_hostname() );
|
||||
*/
|
||||
// name of the automated email sender
|
||||
$msg['notificationfromname'] = stripslashes($datarray['author-name']);;
|
||||
// noreply address to send from
|
||||
|
|
@ -439,7 +481,7 @@ function item_post(&$a) {
|
|||
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
|
||||
|
||||
// load the template for private message notifications
|
||||
$tpl = load_view_file('view/cmnt_received_html_body_eml.tpl');
|
||||
$tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
|
||||
$email_html_body_tpl = replace_macros($tpl,array(
|
||||
'$sitename' => $a->config['sitename'], // name of this site
|
||||
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
|
||||
|
|
@ -452,7 +494,7 @@ function item_post(&$a) {
|
|||
));
|
||||
|
||||
// load the template for private message notifications
|
||||
$tpl = load_view_file('view/cmnt_received_text_body_eml.tpl');
|
||||
$tpl = get_intltext_template('cmnt_received_text_body_eml.tpl');
|
||||
$email_text_body_tpl = replace_macros($tpl,array(
|
||||
'$sitename' => $a->config['sitename'], // name of this site
|
||||
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
|
||||
|
|
@ -485,22 +527,6 @@ function item_post(&$a) {
|
|||
if(($user['notify-flags'] & NOTIFY_WALL) && ($contact_record != $author)) {
|
||||
require_once('bbcode.php');
|
||||
$from = $author['name'];
|
||||
/*
|
||||
$tpl = load_view_file('view/wall_received_eml.tpl');
|
||||
$email_tpl = replace_macros($tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
'$username' => $user['username'],
|
||||
'$email' => $user['email'],
|
||||
'$from' => $from,
|
||||
'$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
|
||||
'$body' => strip_tags(bbcode($datarray['body']))
|
||||
));
|
||||
|
||||
$res = mail($user['email'], $from . t(" posted on your profile wall at ") . $a->config['sitename'],
|
||||
$email_tpl,t("From: Administrator@") . $a->get_hostname() );
|
||||
*/
|
||||
|
||||
|
||||
// name of the automated email sender
|
||||
$msg['notificationfromname'] = $from;
|
||||
|
|
@ -583,7 +609,8 @@ function item_post(&$a) {
|
|||
|
||||
proc_run('php', "include/notifier.php", $notify_type, "$post_id");
|
||||
|
||||
$datarray['id'] = $post_id;
|
||||
$datarray['id'] = $post_id;
|
||||
$datarray['plink'] = $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id;
|
||||
|
||||
call_hooks('post_local_end', $datarray);
|
||||
|
||||
|
|
@ -594,13 +621,12 @@ function item_post(&$a) {
|
|||
$addr = trim($recip);
|
||||
if(! strlen($addr))
|
||||
continue;
|
||||
$disclaimer = '<hr />' . t('This message was sent to you by ') . $a->user['username']
|
||||
. t(', a member of the Friendika social network.') . '<br />';
|
||||
$disclaimer .= t('You may visit them online at') . ' '
|
||||
. $a->get_baseurl() . '/profile/' . $a->user['nickname'] . '<br />';
|
||||
$disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . '<br />';
|
||||
$disclaimer = '<hr />' . sprintf( t('This message was sent to you by %s, a member of the Friendika social network.'),$a->user['username'])
|
||||
. '<br />';
|
||||
$disclaimer .= sprintf( t('You may visit them online at %s'), $a->get_baseurl() . '/profile/' . $a->user['nickname']) . EOL;
|
||||
$disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL;
|
||||
|
||||
$subject = '[Friendika]' . ' ' . $a->user['username'] . ' ' . t('posted an update.');
|
||||
$subject = '[Friendika]' . ' ' . sprintf( t('%s posted an update.'),$a->user['username']);
|
||||
$headers = 'From: ' . $a->user['username'] . ' <' . $a->user['email'] . '>' . "\n";
|
||||
$headers .= 'MIME-Version: 1.0' . "\n";
|
||||
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
|
||||
|
|
@ -640,7 +666,7 @@ function item_content(&$a) {
|
|||
|
||||
require_once('include/security.php');
|
||||
|
||||
$uid = $_SESSION['uid'];
|
||||
$uid = local_user();
|
||||
|
||||
if(($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
|
||||
|
||||
|
|
@ -716,7 +742,8 @@ function item_content(&$a) {
|
|||
// send the notification upstream/downstream as the case may be
|
||||
|
||||
proc_run('php',"include/notifier.php","drop","$drop_id");
|
||||
|
||||
// We seem to lose the return url occasionally. Have not been able to reliably duplicate
|
||||
// logger('drop_return_url: ' . $_SESSION['return_url']);
|
||||
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
|
||||
//NOTREACHED
|
||||
}
|
||||
|
|
@ -726,4 +753,4 @@ function item_content(&$a) {
|
|||
//NOTREACHED
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
16
mod/like.php
|
|
@ -124,9 +124,9 @@ function like_content(&$a) {
|
|||
</object>
|
||||
EOT;
|
||||
if($verb === 'like')
|
||||
$bodyverb = t('likes');
|
||||
$bodyverb = t('%1$s likes %2$s\'s %3$s');
|
||||
if($verb === 'dislike')
|
||||
$bodyverb = t('doesn\'t like');
|
||||
$bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
|
||||
|
||||
if(! isset($bodyverb))
|
||||
return;
|
||||
|
|
@ -147,9 +147,11 @@ EOT;
|
|||
$arr['author-name'] = $contact['name'];
|
||||
$arr['author-link'] = $contact['url'];
|
||||
$arr['author-avatar'] = $contact['thumb'];
|
||||
$arr['body'] = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]' . ' ' . $bodyverb . ' '
|
||||
. '[url=' . $item['author-link'] . ']' . $item['author-name'] . t('\'s') . '[/url]' . ' '
|
||||
. '[url=' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]' ;
|
||||
|
||||
$ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
|
||||
$alink = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]';
|
||||
$plink = '[url=' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]';
|
||||
$arr['body'] = sprintf( $bodyverb, $ulink, $alink, $plink );
|
||||
|
||||
$arr['verb'] = $activity;
|
||||
$arr['object-type'] = $objtype;
|
||||
|
|
@ -171,6 +173,10 @@ EOT;
|
|||
);
|
||||
}
|
||||
|
||||
$arr['id'] = $post_id;
|
||||
|
||||
call_hooks('post_local_end', $arr);
|
||||
|
||||
proc_run('php',"include/notifier.php","like","$post_id");
|
||||
|
||||
return; // NOTREACHED
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ function lostpass_post(&$a) {
|
|||
intval($uid)
|
||||
);
|
||||
if($r)
|
||||
notice("Password reset request issued. Check your email.");
|
||||
notice( t('Password reset request issued. Check your email.') . EOL);
|
||||
|
||||
$email_tpl = load_view_file("view/lostpass_eml.tpl");
|
||||
$email_tpl = get_intltext_template("lostpass_eml.tpl");
|
||||
$email_tpl = replace_macros($email_tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
|
|
@ -35,8 +35,12 @@ function lostpass_post(&$a) {
|
|||
'$reset_link' => $a->get_baseurl() . '/lostpass?verify=' . $new_password
|
||||
));
|
||||
|
||||
$res = mail($email, t('Password reset requested at ') . $a->config['sitename'],
|
||||
$email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER[SERVER_NAME]);
|
||||
$res = mail($email, sprintf( t('Password reset requested at %s'),$a->config['sitename']),
|
||||
$email_tpl,
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
|
||||
|
||||
goaway($a->get_baseurl());
|
||||
}
|
||||
|
|
@ -53,7 +57,7 @@ function lostpass_content(&$a) {
|
|||
dbesc($hash)
|
||||
);
|
||||
if(! count($r)) {
|
||||
notice("Request could not be verified. (You may have previously submitted it.) Password reset failed." . EOL);
|
||||
notice( t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.") . EOL);
|
||||
goaway($a->get_baseurl());
|
||||
return;
|
||||
}
|
||||
|
|
@ -69,16 +73,23 @@ function lostpass_content(&$a) {
|
|||
intval($uid)
|
||||
);
|
||||
if($r) {
|
||||
$tpl = load_view_file('view/pwdreset.tpl');
|
||||
$tpl = get_markup_template('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' => '<a href="' . $a->get_baseurl() . '">' . t('click here to login') . '</a>.',
|
||||
'$lbl6' => t('Your password may be changed from the <em>Settings</em> page after successful login.'),
|
||||
'$newpass' => $new_password,
|
||||
'$baseurl' => $a->get_baseurl()
|
||||
|
||||
));
|
||||
notice("Your password has been reset." . EOL);
|
||||
|
||||
|
||||
|
||||
$email_tpl = load_view_file("view/passchanged_eml.tpl");
|
||||
$email_tpl = get_intltext_template("passchanged_eml.tpl");
|
||||
$email_tpl = replace_macros($email_tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
|
|
@ -87,16 +98,24 @@ function lostpass_content(&$a) {
|
|||
'$new_password' => $new_password,
|
||||
'$uid' => $newuid ));
|
||||
|
||||
$res = mail($email,"Your password has changed at {$a->config['sitename']}",$email_tpl,"From: Administrator@{$_SERVER[SERVER_NAME]}");
|
||||
$res = mail($email,"Your password has changed at {$a->config['sitename']}",$email_tpl,
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
$tpl = load_view_file('view/lostpass.tpl');
|
||||
$tpl = get_markup_template('lostpass.tpl');
|
||||
|
||||
$o .= $tpl;
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$title' => t('Forgot your Password?'),
|
||||
'$desc' => t('Enter your email address and submit to have your password reset. Then check your email for further instructions.'),
|
||||
'$name' => t('Nickname or Email: '),
|
||||
'$submit' => t('Reset')
|
||||
));
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ function manage_post(&$a) {
|
|||
$_SESSION['page_flags'] = $r[0]['page-flags'];
|
||||
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $r[0]['nickname'];
|
||||
|
||||
notice( t("Welcome back ") . $r[0]['username'] . EOL);
|
||||
notice( sprintf( t("Welcome back %s") , $r[0]['username']) . EOL);
|
||||
$a->user = $r[0];
|
||||
|
||||
if(strlen($a->user['timezone'])) {
|
||||
|
|
|
|||
57
mod/match.php
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
|
||||
function match_content(&$a) {
|
||||
|
||||
$o = '';
|
||||
if(! local_user())
|
||||
return;
|
||||
|
||||
$o .= '<h2>' . t('Profile Match') . '</h2>';
|
||||
|
||||
$r = q("SELECT `pub_keywords`, `prv_keywords` FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1",
|
||||
intval(local_user())
|
||||
);
|
||||
if(! count($r))
|
||||
return;
|
||||
if(! $r[0]['pub_keywords'] && (! $r[0]['prv_keywords'])) {
|
||||
notice('No keywords to match. Please add keywords to your default profile.');
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
$params = array();
|
||||
$tags = trim($r[0]['pub_keywords'] . ' ' . $r[0]['prv_keywords']);
|
||||
if($tags) {
|
||||
$params['s'] = $tags;
|
||||
if($a->pager['page'] != 1)
|
||||
$params['p'] = $a->pager['page'];
|
||||
|
||||
$x = post_url('http://dir.friendika.com/msearch', $params);
|
||||
|
||||
$j = json_decode($x);
|
||||
|
||||
if($j->total) {
|
||||
$a->set_pager_total($j->total);
|
||||
$a->set_pager_itemspage($j->items_page);
|
||||
}
|
||||
|
||||
if(count($j->results)) {
|
||||
foreach($j->results as $jj) {
|
||||
$o .= '<div class="profile-match-wrapper"><div class="profile-match-photo">';
|
||||
$o .= '<a href="' . $jj->url . '">' . '<img src="' . $jj->photo . '" alt="' . $jj->name . '" title="' . $jj->name . '[' . $jj->url . ']' . '" /></a></div>';
|
||||
$o .= '<div class="profile-match-break"></div>';
|
||||
$o .= '<div class="profile-match-name"><a href="' . $jj->url . '" title="' . $jj->name . '[' . $jj->url .']' . '">' . $jj->name . '</a></div>';
|
||||
$o .= '<div class="profile-match-end"></div></div>';
|
||||
}
|
||||
$o .= '<div id="profile-match-wrapper-end"></div>';
|
||||
}
|
||||
else {
|
||||
notice( t('No matches') . EOL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$o .= paginate($a);
|
||||
return $o;
|
||||
}
|
||||
|
|
@ -120,7 +120,7 @@ function message_content(&$a) {
|
|||
$myprofile = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
|
||||
|
||||
|
||||
$tpl = load_view_file('view/mail_head.tpl');
|
||||
$tpl = get_markup_template('mail_head.tpl');
|
||||
$header = replace_macros($tpl, array(
|
||||
'$messages' => t('Messages'),
|
||||
'$inbox' => t('Inbox'),
|
||||
|
|
@ -164,15 +164,18 @@ function message_content(&$a) {
|
|||
|
||||
if(($a->argc > 1) && ($a->argv[1] === 'new')) {
|
||||
|
||||
$tpl = load_view_file('view/msg-header.tpl');
|
||||
$tpl = get_markup_template('msg-header.tpl');
|
||||
|
||||
$a->page['htmlhead'] .= replace_macros($tpl, array(
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$nickname' => $a->user['nickname']
|
||||
'$nickname' => $a->user['nickname'],
|
||||
'$linkurl' => t('Please enter a link URL:')
|
||||
));
|
||||
|
||||
$select = contact_select('messageto','message-to-select', false, 4, true);
|
||||
$tpl = load_view_file('view/prv_message.tpl');
|
||||
$preselect = (isset($a->argv[2])?array($a->argv[2]):false);
|
||||
|
||||
$select = contact_select('messageto','message-to-select', $preselect, 4, true);
|
||||
$tpl = get_markup_template('prv_message.tpl');
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$header' => t('Send Private Message'),
|
||||
'$to' => t('To:'),
|
||||
|
|
@ -222,7 +225,7 @@ function message_content(&$a) {
|
|||
return $o;
|
||||
}
|
||||
|
||||
$tpl = load_view_file('view/mail_list.tpl');
|
||||
$tpl = get_markup_template('mail_list.tpl');
|
||||
foreach($r as $rr) {
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$id' => $rr['id'],
|
||||
|
|
@ -234,7 +237,7 @@ function message_content(&$a) {
|
|||
'$delete' => t('Delete conversation'),
|
||||
'$body' => $rr['body'],
|
||||
'$to_name' => $rr['name'],
|
||||
'$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'],'D, d M Y - g:i A')
|
||||
'$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'], t('D, d M Y - g:i A'))
|
||||
));
|
||||
}
|
||||
$o .= paginate($a);
|
||||
|
|
@ -272,7 +275,7 @@ function message_content(&$a) {
|
|||
|
||||
require_once("include/bbcode.php");
|
||||
|
||||
$tpl = load_view_file('view/msg-header.tpl');
|
||||
$tpl = get_markup_template('msg-header.tpl');
|
||||
|
||||
$a->page['htmlhead'] .= replace_macros($tpl, array(
|
||||
'$nickname' => $a->user['nickname'],
|
||||
|
|
@ -280,7 +283,7 @@ function message_content(&$a) {
|
|||
));
|
||||
|
||||
|
||||
$tpl = load_view_file('view/mail_conv.tpl');
|
||||
$tpl = get_markup_template('mail_conv.tpl');
|
||||
foreach($messages as $message) {
|
||||
if($message['from-url'] == $myprofile) {
|
||||
$from_url = $myprofile;
|
||||
|
|
@ -306,7 +309,7 @@ function message_content(&$a) {
|
|||
}
|
||||
$select = $message['name'] . '<input type="hidden" name="messageto" value="' . $contact_id . '" />';
|
||||
$parent = '<input type="hidden" name="replyto" value="' . $message['parent-uri'] . '" />';
|
||||
$tpl = load_view_file('view/prv_message.tpl');
|
||||
$tpl = get_markup_template('prv_message.tpl');
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$header' => t('Send Reply'),
|
||||
'$to' => t('To:'),
|
||||
|
|
|
|||
436
mod/network.php
|
|
@ -15,25 +15,25 @@ function network_init(&$a) {
|
|||
$a->page['aside'] .= '<div id="network-new-link">';
|
||||
|
||||
if(($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new'))
|
||||
$a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . '">' . t('Normal View') . '</a>';
|
||||
$a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' . t('Normal View') . '</a>';
|
||||
else
|
||||
$a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . $a->cmd . '/new' . '">' . t('New Item View') . '</a>';
|
||||
$a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . $a->cmd . '/new' . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' . t('New Item View') . '</a>';
|
||||
|
||||
$a->page['aside'] .= '</div>';
|
||||
|
||||
$a->page['aside'] .= group_side('network','network');
|
||||
$a->page['aside'] .= group_side('network','network',true);
|
||||
}
|
||||
|
||||
|
||||
function network_content(&$a, $update = 0) {
|
||||
|
||||
require_once('include/conversation.php');
|
||||
|
||||
if(! local_user())
|
||||
return login(false);
|
||||
|
||||
$o = '';
|
||||
|
||||
require_once("include/bbcode.php");
|
||||
|
||||
$contact_id = $a->cid;
|
||||
|
||||
$group = 0;
|
||||
|
|
@ -41,6 +41,8 @@ function network_content(&$a, $update = 0) {
|
|||
$nouveau = false;
|
||||
require_once('include/acl_selectors.php');
|
||||
|
||||
$cid = ((x($_GET['cid'])) ? intval($_GET['cid']) : 0);
|
||||
|
||||
if(($a->argc > 2) && $a->argv[2] === 'new')
|
||||
$nouveau = true;
|
||||
|
||||
|
|
@ -49,67 +51,41 @@ function network_content(&$a, $update = 0) {
|
|||
$nouveau = true;
|
||||
else {
|
||||
$group = intval($a->argv[1]);
|
||||
$group_acl = array('allow_gid' => '<' . $group . '>');
|
||||
$def_acl = array('allow_gid' => '<' . $group . '>');
|
||||
}
|
||||
}
|
||||
|
||||
if($cid)
|
||||
$def_acl = array('allow_cid' => '<' . intval($cid) . '>');
|
||||
|
||||
if(! $update) {
|
||||
if(group) {
|
||||
if(($t = group_public_members($group)) && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
|
||||
$plural_form = sprintf( tt('%d member', '%d members', $t), $t);
|
||||
notice( sprintf( t('Warning: This group contains %s from an insecure network.'), $plural_form ) . EOL);
|
||||
notice( t('Private messages to this group are at risk of public disclosure.') . EOL);
|
||||
}
|
||||
}
|
||||
|
||||
$o .= '<script> $(document).ready(function() { $(\'#nav-network-link\').addClass(\'nav-selected\'); });</script>';
|
||||
|
||||
$_SESSION['return_url'] = $a->cmd;
|
||||
|
||||
$geotag = (($a->user['allow_location']) ? load_view_file('view/jot_geotag.tpl') : '');
|
||||
|
||||
$tpl = load_view_file('view/jot-header.tpl');
|
||||
|
||||
$a->page['htmlhead'] .= replace_macros($tpl, array(
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$geotag' => $geotag,
|
||||
'$nickname' => $a->user['nickname']
|
||||
));
|
||||
|
||||
|
||||
$tpl = load_view_file("view/jot.tpl");
|
||||
|
||||
if(($group) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))))
|
||||
$lockstate = 'lock';
|
||||
else
|
||||
$lockstate = 'unlock';
|
||||
|
||||
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
|
||||
|
||||
$jotplugins = '';
|
||||
$jotnets = '';
|
||||
call_hooks('jot_tool', $jotplugins);
|
||||
call_hooks('jot_networks', $jotnets);
|
||||
|
||||
$tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$return_path' => $a->cmd,
|
||||
'$action' => 'item',
|
||||
'$share' => t('Share'),
|
||||
'$upload' => t('Upload photo'),
|
||||
'$weblink' => t('Insert web link'),
|
||||
'$youtube' => t('Insert YouTube video'),
|
||||
'$setloc' => t('Set your location'),
|
||||
'$noloc' => t('Clear browser location'),
|
||||
'$wait' => t('Please wait'),
|
||||
'$permset' => t('Permission settings'),
|
||||
'$content' => '',
|
||||
'$post_id' => '',
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$defloc' => $a->user['default-location'],
|
||||
'$visitor' => 'block',
|
||||
'$emailcc' => t('CC: email addresses'),
|
||||
'$jotnets' => $jotnets,
|
||||
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
|
||||
'$lockstate' => $lockstate,
|
||||
'$acl' => populate_acl((($group) ? $group_acl : $a->user), $celeb),
|
||||
'$bang' => (($group) ? '!' : ''),
|
||||
'$profile_uid' => $_SESSION['uid']
|
||||
));
|
||||
$x = array(
|
||||
'is_owner' => true,
|
||||
'allow_location' => $a->user['allow_location'],
|
||||
'default_location' => $a->user['default_location'],
|
||||
'nickname' => $a->user['nickname'],
|
||||
'lockstate' => ((($group) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'),
|
||||
'acl' => populate_acl((($group || $cid) ? $def_acl : $a->user), $celeb),
|
||||
'bang' => (($group || $cid) ? '!' : ''),
|
||||
'visitor' => 'block',
|
||||
'profile_uid' => local_user()
|
||||
);
|
||||
|
||||
$o .= status_editor($a,$x);
|
||||
|
||||
// The special div is needed for liveUpdate to kick in for this page.
|
||||
// We only launch liveUpdate if you are on the front page, you aren't
|
||||
|
|
@ -119,18 +95,21 @@ function network_content(&$a, $update = 0) {
|
|||
$o .= '<div id="live-network"></div>' . "\r\n";
|
||||
$o .= "<script> var profile_uid = " . $_SESSION['uid']
|
||||
. "; var netargs = '" . substr($a->cmd,8)
|
||||
. ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '')
|
||||
. "'; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
|
||||
|
||||
}
|
||||
|
||||
// We aren't going to try and figure out at the item, group, and page level
|
||||
// which items you've seen and which you haven't. You're looking at some
|
||||
// subset of items, so just mark everything seen.
|
||||
// We aren't going to try and figure out at the item, group, and page
|
||||
// level which items you've seen and which you haven't. If you're looking
|
||||
// at the top level network page just mark everything seen.
|
||||
|
||||
$r = q("UPDATE `item` SET `unseen` = 0
|
||||
WHERE `unseen` = 1 AND `uid` = %d",
|
||||
intval($_SESSION['uid'])
|
||||
);
|
||||
if((! $group) && (! $cid)) {
|
||||
$r = q("UPDATE `item` SET `unseen` = 0
|
||||
WHERE `unseen` = 1 AND `uid` = %d",
|
||||
intval($_SESSION['uid'])
|
||||
);
|
||||
}
|
||||
|
||||
// We don't have to deal with ACL's on this page. You're looking at everything
|
||||
// that belongs to you, hence you can see all of it. We will filter by group if
|
||||
|
|
@ -148,7 +127,7 @@ function network_content(&$a, $update = 0) {
|
|||
killme();
|
||||
notice( t('No such group') . EOL );
|
||||
goaway($a->get_baseurl() . '/network');
|
||||
return; // NOTREACHED
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
$contacts = expand_groups(array($group));
|
||||
|
|
@ -160,28 +139,56 @@ function network_content(&$a, $update = 0) {
|
|||
notice( t('Group is empty'));
|
||||
}
|
||||
|
||||
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( $contact_str )) ";
|
||||
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' )) ";
|
||||
$o = '<h2>' . t('Group: ') . $r[0]['name'] . '</h2>' . $o;
|
||||
}
|
||||
elseif($cid) {
|
||||
|
||||
if((! $group) && (! $update))
|
||||
$r = q("SELECT `id`,`name`,`network`,`writable` FROM `contact` WHERE `id` = %d
|
||||
AND `blocked` = 0 AND `pending` = 0 LIMIT 1",
|
||||
intval($cid)
|
||||
);
|
||||
if(count($r)) {
|
||||
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( " . intval($cid) . " )) ";
|
||||
$o = '<h2>' . t('Contact: ') . $r[0]['name'] . '</h2>' . $o;
|
||||
if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
|
||||
notice( t('Private messages to this person are at risk of public disclosure.') . EOL);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
notice( t('Invalid contact.') . EOL);
|
||||
goaway($a->get_baseurl() . '/network');
|
||||
// NOTREACHED
|
||||
}
|
||||
}
|
||||
|
||||
if((! $group) && (! $cid) && (! $update))
|
||||
$o .= get_birthdays();
|
||||
|
||||
$sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` ");
|
||||
|
||||
$r = q("SELECT COUNT(*) AS `total`
|
||||
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
|
||||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
$sql_extra2
|
||||
$sql_extra ",
|
||||
intval($_SESSION['uid'])
|
||||
);
|
||||
|
||||
if(count($r))
|
||||
if(count($r)) {
|
||||
$a->set_pager_total($r[0]['total']);
|
||||
$a->set_pager_itemspage(40);
|
||||
}
|
||||
|
||||
|
||||
if($nouveau) {
|
||||
|
||||
// "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`
|
||||
|
|
@ -194,282 +201,65 @@ function network_content(&$a, $update = 0) {
|
|||
intval($a->pager['start']),
|
||||
intval($a->pager['itemspage'])
|
||||
);
|
||||
|
||||
}
|
||||
else {
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
|
||||
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
|
||||
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
|
||||
FROM `item`, (SELECT `p`.`id`,`p`.`created` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact`
|
||||
|
||||
// Normal conversation view
|
||||
// First fetch a known number of parent items
|
||||
|
||||
$r = q("SELECT `item`.`id` AS `item_id`, `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
|
||||
AND `contact`.`id` = `item`.`contact-id`
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`parent` = `parentitem`.`id`
|
||||
AND `item`.`parent` = `item`.`id`
|
||||
$sql_extra
|
||||
ORDER BY `parentitem`.`created` DESC, `item`.`gravity` ASC, `item`.`created` ASC LIMIT %d ,%d ",
|
||||
ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
|
||||
intval(local_user()),
|
||||
intval($a->pager['start']),
|
||||
intval($a->pager['itemspage'])
|
||||
);
|
||||
}
|
||||
|
||||
$author_contacts = extract_item_authors($r,local_user());
|
||||
|
||||
$cmnt_tpl = load_view_file('view/comment_item.tpl');
|
||||
$like_tpl = load_view_file('view/like.tpl');
|
||||
$tpl = load_view_file('view/wall_item.tpl');
|
||||
$wallwall = load_view_file('view/wallwall_item.tpl');
|
||||
|
||||
$alike = array();
|
||||
$dlike = array();
|
||||
|
||||
if(count($r)) {
|
||||
|
||||
if($nouveau) {
|
||||
|
||||
$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']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
|
||||
$coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
|
||||
if($coord) {
|
||||
if($location)
|
||||
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
|
||||
else
|
||||
$location = '<span class="smalltext">' . $coord . '</span>';
|
||||
}
|
||||
|
||||
$drop = replace_macros($droptpl,array('$id' => $item['id']));
|
||||
$lock = '<div class="wall-item-lock"></div>';
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$id' => $item['item_id'],
|
||||
'$linktitle' => t('View $name\'s profile'),
|
||||
'$profile_url' => $profile_link,
|
||||
'$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' => '<a href="' . $a->get_baseurl() . '/display/' . $a->user['nickname'] . '/' . $item['id'] . '">' . t('View in context') . '</a>'
|
||||
));
|
||||
|
||||
}
|
||||
$o .= paginate($a);
|
||||
|
||||
return $o;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Then fetch all the children of the parents that are on this page
|
||||
|
||||
foreach($r as $item) {
|
||||
like_puller($a,$item,$alike,'like');
|
||||
like_puller($a,$item,$dlike,'dislike');
|
||||
}
|
||||
$parents_arr = array();
|
||||
$parents_str = '';
|
||||
|
||||
foreach($r as $item) {
|
||||
|
||||
$comment = '';
|
||||
$template = $tpl;
|
||||
$commentww = '';
|
||||
$sparkle = '';
|
||||
$owner_url = $owner_photo = $owner_name = '';
|
||||
|
||||
if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE))) && ($item['id'] != $item['parent']))
|
||||
continue;
|
||||
|
||||
$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']))))
|
||||
? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,' . $item['id'] . ');" /></div>'
|
||||
: '<div class="wall-item-lock"></div>');
|
||||
|
||||
|
||||
// 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($like_tpl,array(
|
||||
'$id' => $item['id'],
|
||||
'$likethis' => t("I like this \x28toggle\x29"),
|
||||
'$nolike' => t("I don't like this \x28toggle\x29"),
|
||||
'$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
|
||||
));
|
||||
}
|
||||
|
||||
$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']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
|
||||
$coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
|
||||
if($coord) {
|
||||
if($location)
|
||||
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
|
||||
else
|
||||
$location = '<span class="smalltext">' . $coord . '</span>';
|
||||
}
|
||||
|
||||
$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,
|
||||
'$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),
|
||||
'$drop' => $drop,
|
||||
'$vote' => $likebuttons,
|
||||
'$like' => $like,
|
||||
'$dislike' => $dislike,
|
||||
'$comment' => $comment
|
||||
));
|
||||
|
||||
$arr = array('item' => $item, 'output' => $tmp_item);
|
||||
call_hooks('display_item', $arr);
|
||||
|
||||
$o .= $arr['output'];
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
$parents_arr[] = $rr['item_id'];
|
||||
$parents_str = implode(', ', $parents_arr);
|
||||
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`,
|
||||
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
|
||||
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
|
||||
FROM `item`, (SELECT `p`.`id`,`p`.`created` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact`
|
||||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND `contact`.`id` = `item`.`contact-id`
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`parent` = `parentitem`.`id` AND `item`.`parent` IN ( %s )
|
||||
$sql_extra
|
||||
ORDER BY `parentitem`.`created` DESC, `item`.`gravity` ASC, `item`.`created` ASC ",
|
||||
intval(local_user()),
|
||||
dbesc($parents_str)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Set this so that the conversation function can find out contact info for our wall-wall items
|
||||
$a->page_contact = $a->contact;
|
||||
|
||||
$mode = (($nouveau) ? 'network-new' : 'network');
|
||||
|
||||
$o .= conversation($a,$r,$mode,$update);
|
||||
|
||||
if(! $update) {
|
||||
|
||||
$o .= paginate($a);
|
||||
$o .= '<div class="cc-license">' . t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.') . '</div>';
|
||||
}
|
||||
|
||||
return $o;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
129
mod/notes.php
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
<?php
|
||||
|
||||
function notes_init(&$a) {
|
||||
|
||||
if(! local_user())
|
||||
return;
|
||||
|
||||
$profile = 0;
|
||||
|
||||
$which = $a->user['nickname'];
|
||||
|
||||
// profile_load($a,$which,$profile);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function notes_content(&$a) {
|
||||
|
||||
if(! local_user()) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
require_once("include/bbcode.php");
|
||||
require_once('include/security.php');
|
||||
require_once('include/conversation.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
$groups = array();
|
||||
|
||||
|
||||
$o = '';
|
||||
|
||||
$remote_contact = false;
|
||||
|
||||
$contact_id = $_SESSION['cid'];
|
||||
$contact = $a->contact;
|
||||
|
||||
$is_owner = true;
|
||||
|
||||
|
||||
$o .= '<h3>' . t('Private Notes') . '</h3>';
|
||||
|
||||
$commpage = false;
|
||||
$commvisitor = false;
|
||||
|
||||
$celeb = false;
|
||||
|
||||
|
||||
|
||||
$x = array(
|
||||
'is_owner' => $is_owner,
|
||||
'allow_location' => (($a->user['allow_location']) ? true : false),
|
||||
'default_location' => $a->user['default-location'],
|
||||
'nickname' => $a->user['nickname'],
|
||||
'lockstate' => 'lock',
|
||||
'acl' => '',
|
||||
'bang' => '',
|
||||
'visitor' => 'block',
|
||||
'profile_uid' => local_user(),
|
||||
'button' => t('Save')
|
||||
|
||||
);
|
||||
|
||||
$o .= status_editor($a,$x,$a->contact['id']);
|
||||
|
||||
|
||||
// Construct permissions
|
||||
|
||||
// default permissions - anonymous user
|
||||
|
||||
$sql_extra = " AND `allow_cid` = '<" . $a->contact['id'] . ">' ";
|
||||
|
||||
$r = q("SELECT COUNT(*) AS `total`
|
||||
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
|
||||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 0
|
||||
$sql_extra ",
|
||||
intval(local_user())
|
||||
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
$a->set_pager_total($r[0]['total']);
|
||||
$a->set_pager_itemspage(40);
|
||||
}
|
||||
|
||||
$r = q("SELECT `item`.`id` AS `item_id`, `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
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 0
|
||||
$sql_extra
|
||||
ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
|
||||
intval(local_user()),
|
||||
intval($a->pager['start']),
|
||||
intval($a->pager['itemspage'])
|
||||
|
||||
);
|
||||
|
||||
$parents_arr = array();
|
||||
$parents_str = '';
|
||||
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
$parents_arr[] = $rr['item_id'];
|
||||
$parents_str = implode(', ', $parents_arr);
|
||||
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
|
||||
`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
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`parent` IN ( %s )
|
||||
$sql_extra
|
||||
ORDER BY `parent` DESC, `gravity` ASC, `item`.`id` ASC ",
|
||||
intval(local_user()),
|
||||
dbesc($parents_str)
|
||||
);
|
||||
}
|
||||
|
||||
$o .= conversation($a,$r,'notes',$update);
|
||||
|
||||
|
||||
$o .= paginate($a);
|
||||
return $o;
|
||||
}
|
||||
|
|
@ -65,12 +65,11 @@ function notifications_content(&$a) {
|
|||
else
|
||||
$sql_extra = " AND `ignore` = 0 ";
|
||||
|
||||
|
||||
$tpl = load_view_file('view/intros-top.tpl');
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$hide_url' => ((strlen($sql_extra)) ? 'notifications/all' : 'notifications' ),
|
||||
'$hide_text' => ((strlen($sql_extra)) ? t('Show Ignored Requests') : t('Hide Ignored Requests'))
|
||||
));
|
||||
$o .= '<h1>' . t('Pending Friend/Connect Notifications') . '</h1>' . "\r\n";
|
||||
|
||||
$o .= '<div id="notification-show-hide-wrapper" >';
|
||||
$o .= '<a href="' . ((strlen($sql_extra)) ? 'notifications/all' : 'notifications' ) . '" id="notifications-show-hide-link" >'
|
||||
. ((strlen($sql_extra)) ? t('Show Ignored Requests') : t('Hide Ignored Requests')) . '</a></div>' . "\r\n";
|
||||
|
||||
|
||||
$r = q("SELECT COUNT(*) AS `total` FROM `intro`
|
||||
|
|
@ -90,13 +89,13 @@ function notifications_content(&$a) {
|
|||
if(($r !== false) && (count($r))) {
|
||||
|
||||
|
||||
$tpl = load_view_file("view/intros.tpl");
|
||||
$tpl = get_markup_template("intros.tpl");
|
||||
|
||||
foreach($r as $rr) {
|
||||
|
||||
$friend_selected = (($rr['network'] !== 'stat') ? ' checked="checked" ' : ' disabled ');
|
||||
$fan_selected = (($rr['network'] === 'stat') ? ' checked="checked" disabled ' : '');
|
||||
$dfrn_tpl = load_view_file('view/netfriend.tpl');
|
||||
$dfrn_tpl = get_markup_template('netfriend.tpl');
|
||||
|
||||
$knowyou = '';
|
||||
$dfrn_text = '';
|
||||
|
|
@ -141,24 +140,20 @@ function notifications_content(&$a) {
|
|||
|
||||
if ($a->config['register_policy'] == REGISTER_APPROVE &&
|
||||
$a->config['admin_email'] === $a->user['email']){
|
||||
$o .= load_view_file('view/registrations-top.tpl');
|
||||
$o .= '<h1>' . t('User registrations waiting for confirm') . '</h1>' . "\r\n";
|
||||
|
||||
$r = q("SELECT `register`.*, `contact`.`name`, `user`.`email`
|
||||
FROM `register`
|
||||
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 .= '<ul>';
|
||||
foreach($r as $rr) {
|
||||
$o .= "<ul>";
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$fullname' => $rr['name'],
|
||||
'$email' => $rr['email'],
|
||||
'$approvelink' => "regmod/allow/".$rr['hash'],
|
||||
'$denylink' => "regmod/deny/".$rr['hash'],
|
||||
));
|
||||
$o .= "</ul>";
|
||||
$o .= '<li>' . sprintf('%s (%s) : ', $rr['name'],$rr['email'])
|
||||
. '<a href="regmod/allow/' . $rr['hash'] .'">' . t('Approve')
|
||||
. '</a> - <a href="regmod/deny/' . $rr['hash'] . '">' . t('Deny') . '</a></li>' . "\r\n";
|
||||
}
|
||||
$o .= "</ul>";
|
||||
}
|
||||
else
|
||||
notice( t('No registrations.') . EOL);
|
||||
|
|
|
|||
53
mod/oexchange.php
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
|
||||
function oexchange_init(&$a) {
|
||||
|
||||
if(($a->argc > 1) && ($a->argv[1] === 'xrd')) {
|
||||
$tpl = get_markup_template('oexchange_xrd.tpl');
|
||||
|
||||
$o = replace_macros($tpl, array('$base' => $a->get_baseurl()));
|
||||
echo $o;
|
||||
killme();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function oexchange_content(&$a) {
|
||||
|
||||
if(! local_user()) {
|
||||
$o = login(false);
|
||||
return $o;
|
||||
}
|
||||
|
||||
if(($a->argc > 1) && $a->argv[1] === 'done') {
|
||||
notice( t('Post successful.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$url = (((x($_GET,'url')) && strlen($_GET['url'])) ? notags(trim($_GET['url'])) : '');
|
||||
|
||||
$s = fetch_url($a->get_baseurl() . '/parse_url&url=' . $url);
|
||||
|
||||
if(! strlen($s))
|
||||
return;
|
||||
|
||||
require_once('include/html2bbcode.php');
|
||||
|
||||
$post = array();
|
||||
|
||||
$post['profile_uid'] = local_user();
|
||||
$post['return'] = '/oexchange/done' ;
|
||||
$post['body'] = html2bbcode($s);
|
||||
$post['type'] = 'wall';
|
||||
|
||||
$_POST = $post;
|
||||
require_once('mod/item.php');
|
||||
item_post($a);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -70,9 +70,18 @@ function openid_content(&$a) {
|
|||
$_SESSION['page_flags'] = $r[0]['page-flags'];
|
||||
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $r[0]['nickname'];
|
||||
|
||||
notice( t("Welcome back ") . $r[0]['username'] . EOL);
|
||||
$a->user = $r[0];
|
||||
|
||||
if($a->user['login_date'] === '0000-00-00 00:00:00') {
|
||||
$_SESSION['return_url'] = 'profile_photo/new';
|
||||
$a->module = 'profile_photo';
|
||||
notice( t("Welcome ") . $a->user['username'] . EOL);
|
||||
notice( t('Please upload a profile photo.') . EOL);
|
||||
}
|
||||
else
|
||||
notice( t("Welcome back ") . $a->user['username'] . EOL);
|
||||
|
||||
|
||||
if(strlen($a->user['timezone'])) {
|
||||
date_default_timezone_set($a->user['timezone']);
|
||||
$a->timezone = $a->user['timezone'];
|
||||
|
|
|
|||
18
mod/opensearch.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
function opensearch_content(&$a) {
|
||||
|
||||
$tpl = get_markup_template('opensearch.tpl');
|
||||
|
||||
header("Content-type: application/opensearchdescription+xml");
|
||||
|
||||
$o = replace_macros($tpl, array(
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$nodename' => $a->get_hostname(),
|
||||
));
|
||||
|
||||
echo $o;
|
||||
|
||||
killme();
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
@ -5,11 +5,15 @@ 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;
|
||||
|
||||
$template = "<a href=\"%s\" >%s</a>%s";
|
||||
$template = "<a href=\"%s\" >%s</a>\n%s";
|
||||
|
||||
|
||||
$arr = array('url' => $url, 'text' => '');
|
||||
|
|
@ -57,6 +61,8 @@ function parse_url_content(&$a) {
|
|||
$items = $div->getElementsByTagName('p');
|
||||
if($items) {
|
||||
foreach($items as $item) {
|
||||
if($item->getElementsByTagName('script'))
|
||||
continue;
|
||||
$text = $item->textContent;
|
||||
$text = strip_tags($text);
|
||||
if(strlen($text) < 100)
|
||||
|
|
@ -73,6 +79,8 @@ function parse_url_content(&$a) {
|
|||
$items = $dom->getElementsByTagName('p');
|
||||
if($items) {
|
||||
foreach($items as $item) {
|
||||
if($item->getElementsByTagName('script'))
|
||||
continue;
|
||||
$text = $item->textContent;
|
||||
$text = strip_tags($text);
|
||||
if(strlen($text) < 100)
|
||||
|
|
|
|||
|
|
@ -19,6 +19,11 @@ function photo_init(&$a) {
|
|||
$default = 'images/default-profile.jpg';
|
||||
|
||||
if(isset($type)) {
|
||||
|
||||
/**
|
||||
* Profile photos
|
||||
*/
|
||||
|
||||
switch($type) {
|
||||
|
||||
case 'profile':
|
||||
|
|
@ -50,6 +55,10 @@ function photo_init(&$a) {
|
|||
}
|
||||
else {
|
||||
|
||||
/**
|
||||
* Other photos
|
||||
*/
|
||||
|
||||
$resolution = 0;
|
||||
$photo = str_replace('.jpg','',$photo);
|
||||
|
||||
|
|
@ -114,7 +123,7 @@ function photo_init(&$a) {
|
|||
// but who should otherwise be able to view it. Show a default image to let
|
||||
// them know permissions was denied. It may be possible to view the image
|
||||
// through an authenticated profile visit.
|
||||
// There won't be many complete unauthorised people seeing this because
|
||||
// There won't be many completely unauthorised people seeing this because
|
||||
// they won't have the photo link, so there's a reasonable chance that the person
|
||||
// might be able to obtain permission to view it.
|
||||
|
||||
|
|
|
|||
176
mod/photos.php
|
|
@ -6,6 +6,10 @@ require_once('include/bbcode.php');
|
|||
|
||||
function photos_init(&$a) {
|
||||
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
return;
|
||||
}
|
||||
$o = '';
|
||||
|
||||
if($a->argc > 1) {
|
||||
|
|
@ -310,6 +314,7 @@ foreach($_FILES AS $key => $val) {
|
|||
$arr['deny_gid'] = $p[0]['deny_gid'];
|
||||
$arr['last-child'] = 1;
|
||||
$arr['visible'] = $visibility;
|
||||
|
||||
$arr['body'] = '[url=' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $p[0]['resource-id'] . ']'
|
||||
. '[img]' . $a->get_baseurl() . '/photo/' . $p[0]['resource-id'] . '-' . $p[0]['scale'] . '.jpg' . '[/img]'
|
||||
. '[/url]';
|
||||
|
|
@ -557,6 +562,8 @@ foreach($_FILES AS $key => $val) {
|
|||
if(($maximagesize) && ($filesize > $maximagesize)) {
|
||||
notice( t('Image exceeds size limit of ') . $maximagesize . EOL);
|
||||
@unlink($src);
|
||||
$foo = 0;
|
||||
call_hooks('photo_post_end',$foo);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -569,6 +576,8 @@ foreach($_FILES AS $key => $val) {
|
|||
logger('mod/photos.php: photos_post(): unable to process image' , 'LOGGER_DEBUG');
|
||||
notice( t('Unable to process image.') . EOL );
|
||||
@unlink($src);
|
||||
$foo = 0;
|
||||
call_hooks('photo_post_end',$foo);
|
||||
killme();
|
||||
}
|
||||
|
||||
|
|
@ -634,6 +643,17 @@ foreach($_FILES AS $key => $val) {
|
|||
|
||||
$item_id = item_store($arr);
|
||||
|
||||
if($item_id) {
|
||||
q("UPDATE `item` SET `plink` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
|
||||
dbesc($a->get_baseurl() . '/display/' . $owner_record['nickname'] . '/' . $item_id),
|
||||
intval($page_owner_uid),
|
||||
intval($item_id)
|
||||
);
|
||||
}
|
||||
|
||||
if($visible)
|
||||
proc_run('php', "include/notifier.php", 'wall-new', $item_id);
|
||||
|
||||
call_hooks('photo_post_end',intval($item_id));
|
||||
|
||||
// addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook
|
||||
|
|
@ -656,6 +676,16 @@ function photos_content(&$a) {
|
|||
// photos/name/image/xxxxx/edit
|
||||
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
require_once('include/bbcode.php');
|
||||
require_once('include/security.php');
|
||||
require_once('include/conversation.php');
|
||||
|
||||
if(! x($a->data,'user')) {
|
||||
notice( t('No photos selected') . EOL );
|
||||
return;
|
||||
|
|
@ -802,7 +832,7 @@ function photos_content(&$a) {
|
|||
|
||||
|
||||
|
||||
$tpl = load_view_file('view/photos_upload.tpl');
|
||||
$tpl = get_markup_template('photos_upload.tpl');
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$pagename' => t('Upload Photos'),
|
||||
'$sessid' => session_id(),
|
||||
|
|
@ -848,7 +878,7 @@ function photos_content(&$a) {
|
|||
if($cmd === 'edit') {
|
||||
if(($album != t('Profile Photos')) && ($album != t('Contact Photos'))) {
|
||||
if($can_post) {
|
||||
$edit_tpl = load_view_file('view/album_edit.tpl');
|
||||
$edit_tpl = get_markup_template('album_edit.tpl');
|
||||
$o .= replace_macros($edit_tpl,array(
|
||||
'$nametext' => t('New album name: '),
|
||||
'$nickname' => $a->data['user']['nickname'],
|
||||
|
|
@ -869,7 +899,7 @@ function photos_content(&$a) {
|
|||
}
|
||||
}
|
||||
}
|
||||
$tpl = load_view_file('view/photo_album.tpl');
|
||||
$tpl = get_markup_template('photo_album.tpl');
|
||||
if(count($r))
|
||||
foreach($r as $rr) {
|
||||
$o .= replace_macros($tpl,array(
|
||||
|
|
@ -892,10 +922,9 @@ function photos_content(&$a) {
|
|||
|
||||
if($datatype === 'image') {
|
||||
|
||||
require_once('security.php');
|
||||
require_once('bbcode.php');
|
||||
|
||||
$o = '<div id="live-display"></div>' . "\r\n";
|
||||
|
||||
$o = '';
|
||||
// fetch image, item containing image, then comments
|
||||
|
||||
$ph = q("SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
|
||||
|
|
@ -948,34 +977,36 @@ function photos_content(&$a) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
$o .= '<h3>' . '<a href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']) . '">' . $ph[0]['album'] . '</a></h3>';
|
||||
$album_link = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']);
|
||||
$tools = Null;
|
||||
$lock = Null;
|
||||
|
||||
if($can_post && ($ph[0]['uid'] == $owner_uid)) {
|
||||
$o .= '<div id="photo-edit-link-wrap" ><a id="photo-edit-link" href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit' . '">' . t('Edit photo') . '</a>';
|
||||
|
||||
$o .= ' - <a id="photo-toprofile-link" href="' . $a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'].'">'.t('Use as profile photo').'</a>';
|
||||
$tools = array(
|
||||
'edit' => array($a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit', t('Edit photo')),
|
||||
'profile'=>array($a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'], t('Use as profile photo')),
|
||||
);
|
||||
|
||||
// lock
|
||||
$o .= ( ( ($ph[0]['uid'] == local_user()) && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid'])
|
||||
$lock = ( ( ($ph[0]['uid'] == local_user()) && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid'])
|
||||
|| strlen($ph[0]['deny_cid']) || strlen($ph[0]['deny_gid'])) )
|
||||
? ' - <img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,\'photo/' . $ph[0]['id'] . '\');" />'
|
||||
: '');
|
||||
? t('Private Message')
|
||||
: Null);
|
||||
|
||||
$o .= '</div>';
|
||||
|
||||
}
|
||||
|
||||
if($prevlink)
|
||||
$o .= '<div id="photo-prev-link"><a href="' . $prevlink .'">' . t('<< Prev') . '</a></div>' ;
|
||||
$prevlink = array($prevlink, t('<< Prev')) ;
|
||||
|
||||
$o .= '<div id="photo-photo"><a href="' . $a->get_baseurl() . '/photo/'
|
||||
. $hires['resource-id'] . '-' . $hires['scale'] . '.jpg" title="'
|
||||
. t('View Full Size') . '" ><img src="' . $a->get_baseurl() . '/photo/'
|
||||
. $lores['resource-id'] . '-' . $lores['scale'] . '.jpg' . '" /></a></div>';
|
||||
$photo = array(
|
||||
'href' => $a->get_baseurl() . '/photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg',
|
||||
'title'=> t('View Full Size'),
|
||||
'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg'
|
||||
);
|
||||
|
||||
if($nextlink)
|
||||
$o .= '<div id="photo-next-link"><a href="' . $nextlink .'">' . t('Next >>') . '</a></div>';
|
||||
|
||||
$o .= '<div id="photo-photo-end"></div>';
|
||||
$nextlink = array($nextlink, t('Next >>'));
|
||||
|
||||
|
||||
// Do we have an item for this photo?
|
||||
|
|
@ -1027,28 +1058,27 @@ function photos_content(&$a) {
|
|||
}
|
||||
}
|
||||
|
||||
$o .= '<div id="photo-caption" >' . $ph[0]['desc'] . '</div>';
|
||||
|
||||
$tags=Null;
|
||||
if(count($linked_items) && strlen($link_item['tag'])) {
|
||||
$arr = explode(',',$link_item['tag']);
|
||||
// parse tags and add links
|
||||
$o .= '<div id="in-this-photo-text">' . t('Tags: ') . '</div>';
|
||||
$o .= '<div id="in-this-photo">';
|
||||
// parse tags and add links
|
||||
$tag_str = '';
|
||||
foreach($arr as $t) {
|
||||
if(strlen($tag_str))
|
||||
$tag_str .= ', ';
|
||||
$tag_str .= bbcode($t);
|
||||
}
|
||||
$o .= $tag_str . '</div>';
|
||||
$tags = array(t('Tags: '), $tag_str);
|
||||
if($cmd === 'edit')
|
||||
$o .= '<div id="tag-remove"><a href="' . $a->get_baseurl() . '/tagrm/' . $link_item['id'] . '">' . t('[Remove any tag]') . '</a></div>';
|
||||
$tags[] = $a->get_baseurl() . '/tagrm/' . $link_item['id'];
|
||||
$tags[] = t('[Remove any tag]');
|
||||
}
|
||||
|
||||
|
||||
$edit = Null;
|
||||
if(($cmd === 'edit') && ($can_post)) {
|
||||
$edit_tpl = load_view_file('view/photo_edit.tpl');
|
||||
$o .= replace_macros($edit_tpl, array(
|
||||
$edit_tpl = get_markup_template('photo_edit.tpl');
|
||||
$edit = replace_macros($edit_tpl, array(
|
||||
'$id' => $ph[0]['id'],
|
||||
'$album' => $ph[0]['album'],
|
||||
'$newalbum' => t('New album name'),
|
||||
|
|
@ -1069,31 +1099,29 @@ function photos_content(&$a) {
|
|||
|
||||
if(count($linked_items)) {
|
||||
|
||||
$cmnt_tpl = load_view_file('view/comment_item.tpl');
|
||||
$tpl = load_view_file('view/photo_item.tpl');
|
||||
$cmnt_tpl = get_markup_template('comment_item.tpl');
|
||||
$tpl = get_markup_template('photo_item.tpl');
|
||||
$return_url = $a->cmd;
|
||||
|
||||
$like_tpl = load_view_file('view/like.tpl');
|
||||
$like_tpl = get_markup_template('like_noshare.tpl');
|
||||
|
||||
$likebuttons = '';
|
||||
|
||||
if($can_post || can_write_wall($a,$owner_uid)) {
|
||||
$likebuttons = replace_macros($like_tpl,array(
|
||||
'$id' => $item['id'],
|
||||
'$id' => $link_item['id'],
|
||||
'$likethis' => t("I like this \x28toggle\x29"),
|
||||
'$nolike' => t("I don't like this \x28toggle\x29"),
|
||||
'$wait' => t('Please wait')
|
||||
'$share' => t('Share'),
|
||||
'$wait' => t('Please wait')
|
||||
));
|
||||
}
|
||||
|
||||
$comments = '';
|
||||
if(! count($r)) {
|
||||
$o .= '<div id="photo-like-div">';
|
||||
$o .= $likebuttons;
|
||||
$o .= '</div>';
|
||||
|
||||
if($can_post || can_write_wall($a,$owner_uid)) {
|
||||
if($link_item['last-child']) {
|
||||
$o .= replace_macros($cmnt_tpl,array(
|
||||
$comments .= replace_macros($cmnt_tpl,array(
|
||||
'$return_path' => '',
|
||||
'$jsreload' => $return_url,
|
||||
'$type' => 'wall-comment',
|
||||
|
|
@ -1103,6 +1131,8 @@ function photos_content(&$a) {
|
|||
'$mylink' => $contact['url'],
|
||||
'$mytitle' => t('This is you'),
|
||||
'$myphoto' => $contact['thumb'],
|
||||
'$comment' => t('Comment'),
|
||||
'$submit' => t('Submit'),
|
||||
'$ww' => ''
|
||||
));
|
||||
}
|
||||
|
|
@ -1111,6 +1141,9 @@ function photos_content(&$a) {
|
|||
|
||||
$alike = array();
|
||||
$dlike = array();
|
||||
|
||||
$like = '';
|
||||
$dislike = '';
|
||||
|
||||
// display comments
|
||||
if(count($r)) {
|
||||
|
|
@ -1123,17 +1156,11 @@ function photos_content(&$a) {
|
|||
$like = ((isset($alike[$link_item['id']])) ? format_like($alike[$link_item['id']],$alike[$link_item['id'] . '-l'],'like',$link_item['id']) : '');
|
||||
$dislike = ((isset($dlike[$link_item['id']])) ? format_like($dlike[$link_item['id']],$dlike[$link_item['id'] . '-l'],'dislike',$link_item['id']) : '');
|
||||
|
||||
$o .= '<div id="photo-like-div">';
|
||||
$o .= $likebuttons;
|
||||
$o .= $like;
|
||||
$o .= $dislike;
|
||||
$o .= '</div>';
|
||||
|
||||
|
||||
|
||||
if($can_post || can_write_wall($a,$owner_uid)) {
|
||||
if($link_item['last-child']) {
|
||||
$o .= replace_macros($cmnt_tpl,array(
|
||||
$comments .= replace_macros($cmnt_tpl,array(
|
||||
'$return_path' => '',
|
||||
'$jsreload' => $return_url,
|
||||
'$type' => 'wall-comment',
|
||||
|
|
@ -1143,6 +1170,8 @@ function photos_content(&$a) {
|
|||
'$mylink' => $contact['url'],
|
||||
'$mytitle' => t('This is you'),
|
||||
'$myphoto' => $contact['thumb'],
|
||||
'$comment' => t('Comment'),
|
||||
'$submit' => t('Submit'),
|
||||
'$ww' => ''
|
||||
));
|
||||
}
|
||||
|
|
@ -1162,7 +1191,7 @@ function photos_content(&$a) {
|
|||
if($can_post || can_write_wall($a,$owner_uid)) {
|
||||
|
||||
if($item['last-child']) {
|
||||
$comment = replace_macros($cmnt_tpl,array(
|
||||
$comments .= replace_macros($cmnt_tpl,array(
|
||||
'$return_path' => '',
|
||||
'$jsreload' => $return_url,
|
||||
'$type' => 'wall-comment',
|
||||
|
|
@ -1172,6 +1201,8 @@ function photos_content(&$a) {
|
|||
'$mylink' => $contact['url'],
|
||||
'$mytitle' => t('This is you'),
|
||||
'$myphoto' => $contact['thumb'],
|
||||
'$comment' => t('Comment'),
|
||||
'$submit' => t('Submit'),
|
||||
'$ww' => ''
|
||||
));
|
||||
}
|
||||
|
|
@ -1198,10 +1229,10 @@ function photos_content(&$a) {
|
|||
$drop = '';
|
||||
|
||||
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')));
|
||||
$drop = replace_macros(get_markup_template('wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
|
||||
|
||||
|
||||
$o .= replace_macros($template,array(
|
||||
$comments .= replace_macros($template,array(
|
||||
'$id' => $item['item_id'],
|
||||
'$profile_url' => $profile_link,
|
||||
'$name' => $profile_name,
|
||||
|
|
@ -1217,8 +1248,28 @@ function photos_content(&$a) {
|
|||
}
|
||||
}
|
||||
|
||||
$o .= paginate($a);
|
||||
$paginate = paginate($a);
|
||||
}
|
||||
|
||||
$photo_tpl = get_markup_template('photo_view.tpl');
|
||||
$o .= replace_macros($photo_tpl, array(
|
||||
'$id' => $ph[0]['id'],
|
||||
'$album' => array($album_link,$ph[0]['album']),
|
||||
'$tools' => $tools,
|
||||
'$lock' => $lock,
|
||||
'$photo' => $photo,
|
||||
'$prevlink' => $prevlink,
|
||||
'$nextlink' => $nextlink,
|
||||
'$desc' => $ph[0]['desc'],
|
||||
'$tags' => $tags,
|
||||
'$edit' => $edit,
|
||||
'$likebuttons' => $likebuttons,
|
||||
'$like' => $like,
|
||||
'$dislike' => $dislike,
|
||||
'$comments' => $comments,
|
||||
'$paginate' => $paginate,
|
||||
));
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
|
|
@ -1251,21 +1302,18 @@ function photos_content(&$a) {
|
|||
. $a->data['user']['nickname'] . '/upload' . '">' . t('Upload New Photos') . '</a></div>';
|
||||
}
|
||||
|
||||
$tpl = load_view_file('view/photo_top.tpl');
|
||||
$tpl = get_markup_template('photo_top.tpl');
|
||||
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']
|
||||
));
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ function ping_init(&$a) {
|
|||
$network = $r[0]['total'];
|
||||
|
||||
$r = q("SELECT COUNT(*) AS `total` FROM `item`
|
||||
WHERE `unseen` = 1 AND `visible` = 1 AND `deleted` = 0 AND `uid` = %d AND `type` != 'remote' ",
|
||||
WHERE `unseen` = 1 AND `visible` = 1 AND `deleted` = 0 AND `uid` = %d AND `wall` = 1 ",
|
||||
intval(local_user())
|
||||
);
|
||||
$home = $r[0]['total'];
|
||||
|
|
|
|||
292
mod/profile.php
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
function profile_init(&$a) {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user()))
|
||||
return;
|
||||
|
||||
if($a->argc > 1)
|
||||
$which = $a->argv[1];
|
||||
else {
|
||||
|
|
@ -28,6 +31,11 @@ function profile_init(&$a) {
|
|||
$a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n";
|
||||
}
|
||||
|
||||
$keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
|
||||
$keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords);
|
||||
if(strlen($keywords))
|
||||
$a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
|
||||
|
||||
$a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ;
|
||||
$a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . $a->get_baseurl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ;
|
||||
$uri = urlencode('acct:' . $a->profile['nickname'] . '@' . $a->get_hostname() . (($a->path) ? '/' . $a->path : ''));
|
||||
|
|
@ -43,9 +51,16 @@ function profile_init(&$a) {
|
|||
|
||||
function profile_content(&$a, $update = 0) {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
return login();
|
||||
}
|
||||
|
||||
|
||||
|
||||
require_once("include/bbcode.php");
|
||||
require_once('include/security.php');
|
||||
|
||||
require_once('include/conversation.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
$groups = array();
|
||||
|
||||
$tab = 'posts';
|
||||
|
|
@ -89,25 +104,21 @@ function profile_content(&$a, $update = 0) {
|
|||
if(x($_GET,'tab'))
|
||||
$tab = notags(trim($_GET['tab']));
|
||||
|
||||
$tpl = load_view_file('view/profile_tabs.tpl');
|
||||
$tpl = get_markup_template('profile_tabs.tpl');
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$url' => $a->get_baseurl() . '/' . $a->cmd,
|
||||
'$phototab' => $a->get_baseurl() . '/photos/' . $a->profile['nickname']
|
||||
'$phototab' => $a->get_baseurl() . '/photos/' . $a->profile['nickname'],
|
||||
'$status' => t('Status'),
|
||||
'$profile' => t('Profile'),
|
||||
'$photos' => t('Photos')
|
||||
));
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -118,57 +129,19 @@ function profile_content(&$a, $update = 0) {
|
|||
|
||||
if(can_write_wall($a,$a->profile['profile_uid'])) {
|
||||
|
||||
$geotag = ((($is_owner || $commvisitor) && $a->profile['allow_location']) ? load_view_file('view/jot_geotag.tpl') : '');
|
||||
$x = array(
|
||||
'is_owner' => $is_owner,
|
||||
'allow_location' => ((($is_owner || $commvisitor) && $a->profile['allow_location']) ? true : false),
|
||||
'default_location' => (($is_owner) ? $a->user['default-location'] : ''),
|
||||
'nickname' => $a->profile['nickname'],
|
||||
'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'),
|
||||
'acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''),
|
||||
'bang' => '',
|
||||
'visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
|
||||
'profile_uid' => $a->profile['profile_uid']
|
||||
);
|
||||
|
||||
$tpl = load_view_file('view/jot-header.tpl');
|
||||
|
||||
$a->page['htmlhead'] .= replace_macros($tpl, array(
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$geotag' => $geotag,
|
||||
'$nickname' => $a->profile['nickname']
|
||||
));
|
||||
|
||||
require_once('include/acl_selectors.php');
|
||||
|
||||
$tpl = load_view_file('view/jot.tpl');
|
||||
|
||||
if(is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))
|
||||
$lockstate = 'lock';
|
||||
else
|
||||
$lockstate = 'unlock';
|
||||
|
||||
$jotplugins = '';
|
||||
$jotnets = '';
|
||||
call_hooks('jot_tool', $jotplugins);
|
||||
|
||||
call_hooks('jot_networks', $jotnets);
|
||||
|
||||
$tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$action' => 'item',
|
||||
'$share' => t('Share'),
|
||||
'$upload' => t('Upload photo'),
|
||||
'$weblink' => t('Insert web link'),
|
||||
'$youtube' => t('Insert YouTube video'),
|
||||
'$setloc' => t('Set your location'),
|
||||
'$noloc' => t('Clear browser location'),
|
||||
'$wait' => t('Please wait'),
|
||||
'$permset' => t('Permission settings'),
|
||||
'$content' => '',
|
||||
'$post_id' => '',
|
||||
'$defloc' => (($is_owner) ? $a->user['default-location'] : ''),
|
||||
'$return_path' => $a->cmd,
|
||||
'$visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
|
||||
'$lockstate' => $lockstate,
|
||||
'$emailcc' => t('CC: email addresses'),
|
||||
'$jotnets' => $jotnets,
|
||||
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
|
||||
'$bang' => '',
|
||||
'$acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''),
|
||||
'$profile_uid' => $a->profile['profile_uid']
|
||||
));
|
||||
$o .= status_editor($a,$x);
|
||||
}
|
||||
|
||||
// This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
|
||||
|
|
@ -195,7 +168,7 @@ function profile_content(&$a, $update = 0) {
|
|||
// Oh - while we're here... reset the Unseen messages
|
||||
|
||||
$r = q("UPDATE `item` SET `unseen` = 0
|
||||
WHERE `type` != 'remote' AND `unseen` = 1 AND `uid` = %d",
|
||||
WHERE `wall` = 1 AND `unseen` = 1 AND `uid` = %d",
|
||||
intval($_SESSION['uid'])
|
||||
);
|
||||
|
||||
|
|
@ -228,191 +201,66 @@ function profile_content(&$a, $update = 0) {
|
|||
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
|
||||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `wall` = 1 )
|
||||
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1
|
||||
$sql_extra ",
|
||||
intval($a->profile['profile_uid'])
|
||||
|
||||
);
|
||||
|
||||
if(count($r))
|
||||
if(count($r)) {
|
||||
$a->set_pager_total($r[0]['total']);
|
||||
$a->set_pager_itemspage(40);
|
||||
}
|
||||
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
|
||||
`contact`.`thumb`, `contact`.`self`,
|
||||
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
|
||||
$r = q("SELECT `item`.`id` AS `item_id`, `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
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `wall` = 1 )
|
||||
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1
|
||||
$sql_extra
|
||||
ORDER BY `parent` DESC, `gravity` ASC, `id` ASC LIMIT %d ,%d ",
|
||||
ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
|
||||
intval($a->profile['profile_uid']),
|
||||
intval($a->pager['start']),
|
||||
intval($a->pager['itemspage'])
|
||||
|
||||
);
|
||||
|
||||
$parents_arr = array();
|
||||
$parents_str = '';
|
||||
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
$parents_arr[] = $rr['item_id'];
|
||||
$parents_str = implode(', ', $parents_arr);
|
||||
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
|
||||
`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
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`parent` IN ( %s )
|
||||
$sql_extra
|
||||
ORDER BY `parent` DESC, `gravity` ASC, `item`.`id` ASC ",
|
||||
intval($a->profile['profile_uid']),
|
||||
dbesc($parents_str)
|
||||
);
|
||||
}
|
||||
|
||||
if($is_owner && ! $update)
|
||||
$o .= get_birthdays();
|
||||
|
||||
$cmnt_tpl = load_view_file('view/comment_item.tpl');
|
||||
|
||||
$like_tpl = load_view_file('view/like.tpl');
|
||||
|
||||
$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)) {
|
||||
|
||||
foreach($r as $item) {
|
||||
like_puller($a,$item,$alike,'like');
|
||||
like_puller($a,$item,$dlike,'dislike');
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
$lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
|
||||
|| strlen($item['deny_cid']) || strlen($item['deny_gid']))))
|
||||
? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,' . $item['id'] . ');" /></div>'
|
||||
: '<div class="wall-item-lock"></div>');
|
||||
|
||||
if(can_write_wall($a,$a->profile['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"),
|
||||
'$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'] == $_SESSION['uid'])
|
||||
&& ($item['network'] === 'dfrn') && (! $item['self'] )) {
|
||||
$profile_url = $redirect_url;
|
||||
$sparkle = ' sparkle';
|
||||
}
|
||||
else
|
||||
$sparkle = '';
|
||||
|
||||
// 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')));
|
||||
$o .= conversation($a,$r,'profile',$update);
|
||||
|
||||
|
||||
$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']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
|
||||
$coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
|
||||
if($coord) {
|
||||
if($location)
|
||||
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
|
||||
else
|
||||
$location = '<span class="smalltext">' . $coord . '</span>';
|
||||
}
|
||||
|
||||
$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,
|
||||
'$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),
|
||||
'$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 .= '<div class="cc-license">' . t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.') . '</div>';
|
||||
|
||||
$o .= paginate($a);
|
||||
$o .= '<div class="cc-license">' . t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.') . '</div>';
|
||||
}
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,21 +58,21 @@ function profile_photo_post(&$a) {
|
|||
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 4, 1);
|
||||
|
||||
if($r === false)
|
||||
notice ( t('Image size reduction [175] failed.') . EOL );
|
||||
notice ( sprintf(t('Image size reduction [%s] failed.'),"175") . EOL );
|
||||
|
||||
$im->scaleImage(80);
|
||||
|
||||
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 5, 1);
|
||||
|
||||
if($r === false)
|
||||
notice( t('Image size reduction [80] failed.') . EOL );
|
||||
notice( sprintf(t('Image size reduction [%s] failed.'),"80") . EOL );
|
||||
|
||||
$im->scaleImage(48);
|
||||
|
||||
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 6, 1);
|
||||
|
||||
if($r === false)
|
||||
notice( t('Image size reduction [48] failed.') . EOL );
|
||||
notice( sprintf(t('Image size reduction [%s] failed.'),"48") . EOL );
|
||||
|
||||
// Unset the profile photo flag from any other photos I own
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ function profile_photo_post(&$a) {
|
|||
);
|
||||
|
||||
// Update global directory in background
|
||||
$url = $_SESSION['my_url'];
|
||||
$url = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
|
||||
if($url && strlen(get_config('system','directory_submit_url')))
|
||||
proc_run('php',"include/directory.php","$url");
|
||||
}
|
||||
|
|
@ -106,7 +106,7 @@ function profile_photo_post(&$a) {
|
|||
$maximagesize = get_config('system','maximagesize');
|
||||
|
||||
if(($maximagesize) && ($filesize > $maximagesize)) {
|
||||
notice( t('Image exceeds size limit of ') . $maximagesize . EOL);
|
||||
notice( sprintf(t('Image exceeds size limit of %d'), $maximagesize) . EOL);
|
||||
@unlink($src);
|
||||
return;
|
||||
}
|
||||
|
|
@ -134,6 +134,11 @@ function profile_photo_content(&$a) {
|
|||
return;
|
||||
}
|
||||
|
||||
$newuser = false;
|
||||
|
||||
if($a->argc == 2 && $a->argv[1] === 'new')
|
||||
$newuser = true;
|
||||
|
||||
if( $a->argv[1]=='use'){
|
||||
if ($a->argc<3){
|
||||
notice( t('Permission denied.') . EOL );
|
||||
|
|
@ -181,10 +186,14 @@ function profile_photo_content(&$a) {
|
|||
|
||||
if(! x($a->config,'imagecrop')) {
|
||||
|
||||
$tpl = load_view_file('view/profile_photo.tpl');
|
||||
$tpl = get_markup_template('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'), ($newuser) ? '<a href="' . $a->get_baseurl() . '">' . t('skip this step') . '</a>' : '<a href="'. $a->get_baseurl() . '/photos/' . $a->user['nickname'] . '">' . t('select a photo from your photo albums') . '</a>')
|
||||
));
|
||||
|
||||
return $o;
|
||||
|
|
@ -192,13 +201,15 @@ function profile_photo_content(&$a) {
|
|||
else {
|
||||
$filename = $a->config['imagecrop'] . '-' . $a->config['imagecrop_resolution'] . '.jpg';
|
||||
$resolution = $a->config['imagecrop_resolution'];
|
||||
$tpl = load_view_file("view/cropbody.tpl");
|
||||
$tpl = get_markup_template("cropbody.tpl");
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$filename' => $filename,
|
||||
'$resource' => $a->config['imagecrop'] . '-' . $a->config['imagecrop_resolution'],
|
||||
'$image_url' => $a->get_baseurl() . '/photo/' . $filename
|
||||
));
|
||||
|
||||
'$image_url' => $a->get_baseurl() . '/photo/' . $filename,
|
||||
'$title' => t('Crop Image'),
|
||||
'$desc' => t('Please adjust the image cropping for optimum viewing.'),
|
||||
'$done' => t('Done Editing')
|
||||
));
|
||||
return $o;
|
||||
}
|
||||
|
||||
|
|
@ -234,14 +245,14 @@ function profile_photo_crop_ui_head(&$a, $ph){
|
|||
$r = $ph->store(local_user(), 0 , $hash, $filename, t('Profile Photos'), 1 );
|
||||
|
||||
if($r === false)
|
||||
notice( t('Image size reduction [640] failed.') . EOL );
|
||||
notice( sprintf(t('Image size reduction [%s] failed.'),"640") . EOL );
|
||||
else
|
||||
$smallest = 1;
|
||||
}
|
||||
|
||||
$a->config['imagecrop'] = $hash;
|
||||
$a->config['imagecrop_resolution'] = $smallest;
|
||||
$a->page['htmlhead'] .= load_view_file("view/crophead.tpl");
|
||||
$a->page['htmlhead'] .= get_markup_template("crophead.tpl");
|
||||
return;
|
||||
}}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,8 @@ function profiles_post(&$a) {
|
|||
$region = notags(trim($_POST['region']));
|
||||
$postal_code = notags(trim($_POST['postal_code']));
|
||||
$country_name = notags(trim($_POST['country_name']));
|
||||
$keywords = notags(trim($_POST['keywords']));
|
||||
$pub_keywords = notags(trim($_POST['pub_keywords']));
|
||||
$prv_keywords = notags(trim($_POST['prv_keywords']));
|
||||
$marital = notags(trim($_POST['marital']));
|
||||
if($marital != $orig[0]['marital'])
|
||||
$maritalchanged = true;
|
||||
|
|
@ -147,7 +148,8 @@ function profiles_post(&$a) {
|
|||
`homepage` = '%s',
|
||||
`politic` = '%s',
|
||||
`religion` = '%s',
|
||||
`keywords` = '%s',
|
||||
`pub_keywords` = '%s',
|
||||
`prv_keywords` = '%s',
|
||||
`about` = '%s',
|
||||
`interest` = '%s',
|
||||
`contact` = '%s',
|
||||
|
|
@ -176,7 +178,8 @@ function profiles_post(&$a) {
|
|||
dbesc($homepage),
|
||||
dbesc($politic),
|
||||
dbesc($religion),
|
||||
dbesc($keywords),
|
||||
dbesc($pub_keywords),
|
||||
dbesc($prv_keywords),
|
||||
dbesc($about),
|
||||
dbesc($interest),
|
||||
dbesc($contact),
|
||||
|
|
@ -344,10 +347,13 @@ function profiles_content(&$a) {
|
|||
|
||||
require_once('include/profile_selectors.php');
|
||||
|
||||
$tpl = load_view_file('view/profed_head.tpl');
|
||||
$tpl = get_markup_template('profed_head.tpl');
|
||||
|
||||
$opt_tpl = load_view_file("view/profile-hide-friends.tpl");
|
||||
$opt_tpl = get_markup_template("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\" " : "")
|
||||
));
|
||||
|
|
@ -358,8 +364,46 @@ function profiles_content(&$a) {
|
|||
|
||||
|
||||
$is_default = (($r[0]['is-default']) ? 1 : 0);
|
||||
$tpl = load_view_file("view/profile_edit.tpl");
|
||||
$tpl = get_markup_template("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('<span class="heart">♥</span> 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'],
|
||||
|
|
@ -383,7 +427,8 @@ function profiles_content(&$a) {
|
|||
'$homepage' => $r[0]['homepage'],
|
||||
'$politic' => $r[0]['politic'],
|
||||
'$religion' => $r[0]['religion'],
|
||||
'$keywords' => $r[0]['keywords'],
|
||||
'$pub_keywords' => $r[0]['pub_keywords'],
|
||||
'$prv_keywords' => $r[0]['prv_keywords'],
|
||||
'$music' => $r[0]['music'],
|
||||
'$book' => $r[0]['book'],
|
||||
'$tv' => $r[0]['tv'],
|
||||
|
|
@ -406,17 +451,24 @@ function profiles_content(&$a) {
|
|||
local_user());
|
||||
if(count($r)) {
|
||||
|
||||
$o .= load_view_file('view/profile_listing_header.tpl');
|
||||
$tpl_default = load_view_file('view/profile_entry_default.tpl');
|
||||
$tpl = load_view_file('view/profile_entry.tpl');
|
||||
$tpl_header = get_markup_template('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 = get_markup_template('profile_entry.tpl');
|
||||
|
||||
foreach($r as $rr) {
|
||||
$template = (($rr['is-default']) ? $tpl_default : $tpl);
|
||||
$o .= replace_macros($template, array(
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$photo' => $rr['thumb'],
|
||||
'$id' => $rr['id'],
|
||||
'$alt' => t('Profile Image'),
|
||||
'$profile_name' => $rr['profile-name']
|
||||
'$profile_name' => $rr['profile-name'],
|
||||
'$visible' => (($rr['is-default']) ? '<strong>' . t('Visible to everybody') . '</strong>'
|
||||
: '<a href="' . $a->get_baseurl() . '/profperm/' . $rr['id'] . '" />' . t('Edit visibility') . '</a>')
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
141
mod/profperm.php
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
<?php
|
||||
|
||||
function profperm_init(&$a) {
|
||||
|
||||
if(! local_user())
|
||||
return;
|
||||
|
||||
$which = $a->user['nickname'];
|
||||
$profile = $a->argv[1];
|
||||
|
||||
profile_load($a,$which,$profile);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function profperm_content(&$a) {
|
||||
|
||||
if(! local_user()) {
|
||||
notice( t('Permission denied') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if($a->argc < 2) {
|
||||
notice( t('Invalid profile identifier.') . EOL );
|
||||
return;
|
||||
}
|
||||
|
||||
if(($a->argc > 2) && intval($a->argv[1]) && intval($a->argv[2])) {
|
||||
$r = q("SELECT `id` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `self` = 0
|
||||
AND `network` = 'dfrn' AND `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($a->argv[2]),
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r))
|
||||
$change = intval($a->argv[2]);
|
||||
}
|
||||
|
||||
|
||||
if(($a->argc > 1) && (intval($a->argv[1]))) {
|
||||
$r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 LIMIT 1",
|
||||
intval($a->argv[1]),
|
||||
intval(local_user())
|
||||
);
|
||||
if(! count($r)) {
|
||||
notice( t('Invalid profile identifier.') . EOL );
|
||||
return;
|
||||
}
|
||||
$profile = $r[0];
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `profile-id` = %d",
|
||||
intval(local_user()),
|
||||
intval($a->argv[1])
|
||||
);
|
||||
|
||||
$ingroup = array();
|
||||
if(count($r))
|
||||
foreach($r as $member)
|
||||
$ingroup[] = $member['id'];
|
||||
|
||||
$members = $r;
|
||||
|
||||
if($change) {
|
||||
if(in_array($change,$ingroup)) {
|
||||
q("UPDATE `contact` SET `profile-id` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($change),
|
||||
intval(local_user())
|
||||
);
|
||||
}
|
||||
else {
|
||||
q("UPDATE `contact` SET `profile-id` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($a->argv[1]),
|
||||
intval($change),
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `profile-id` = %d",
|
||||
intval(local_user()),
|
||||
intval($a->argv[1])
|
||||
);
|
||||
|
||||
$members = $r;
|
||||
|
||||
$ingroup = array();
|
||||
if(count($r))
|
||||
foreach($r as $member)
|
||||
$ingroup[] = $member['id'];
|
||||
}
|
||||
|
||||
$o .= '<h2>' . t('Profile Visibility Editor') . '</h2>';
|
||||
|
||||
$o .= '<h3>' . t('Profile') . ' \'' . $profile['profile-name'] . '\'</h3>';
|
||||
|
||||
$o .= '<div id="prof-edit-desc">' . t('Click on a contact to add or remove.') . '</div>';
|
||||
|
||||
}
|
||||
|
||||
$o .= '<div id="prof-update-wrapper">';
|
||||
if($change)
|
||||
$o = '';
|
||||
|
||||
$o .= '<div id="prof-members">';
|
||||
$o .= '<h3>' . t('Visible To') . '</h3>';
|
||||
foreach($members as $member) {
|
||||
if($member['url']) {
|
||||
$member['click'] = 'profChangeMember(' . $profile['id'] . ',' . $member['id'] . '); return true;';
|
||||
$o .= micropro($member,true,'mpprof');
|
||||
}
|
||||
}
|
||||
$o .= '</div><div id="prof-members-end"></div>';
|
||||
$o .= '<hr id="prof-separator" />';
|
||||
$o .= '<div id="prof-all-contacts">';
|
||||
|
||||
$o .= '<h3>' . t("All Contacts \x28with secure profile access\x29") . '</h3>';
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 and `pending` = 0 and `self` = 0
|
||||
AND `network` = 'dfrn' ORDER BY `name` ASC",
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
foreach($r as $member) {
|
||||
if(! in_array($member['id'],$ingroup)) {
|
||||
$member['click'] = 'profChangeMember(' . $profile['id'] . ',' . $member['id'] . '); return true;';
|
||||
$o .= micropro($member,true,'mpprof');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$o .= '</div><div id="prof-all-contacts-end"></div>';
|
||||
|
||||
if($change) {
|
||||
echo $o;
|
||||
killme();
|
||||
}
|
||||
$o .= '</div>';
|
||||
return $o;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -5,6 +5,7 @@ function redir_init(&$a) {
|
|||
if((! local_user()) || (! ($a->argc == 2)) || (! intval($a->argv[1])))
|
||||
goaway($a->get_baseurl());
|
||||
$cid = $a->argv[1];
|
||||
$url = ((x($_GET,'url')) ? $_GET['url'] : '');
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($cid),
|
||||
|
|
@ -37,8 +38,8 @@ function redir_init(&$a) {
|
|||
);
|
||||
|
||||
logger('mod_redir: ' . $r[0]['name'] . ' ' . $sec, LOGGER_DEBUG);
|
||||
|
||||
$dest = (($url) ? '&destination_url=' . $url : '');
|
||||
goaway ($r[0]['poll'] . '?dfrn_id=' . $dfrn_id
|
||||
. '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec);
|
||||
. '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec . $dest );
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,9 +70,9 @@ function register_post(&$a) {
|
|||
$err = '';
|
||||
|
||||
|
||||
if(strlen($username) > 48)
|
||||
if(mb_strlen($username) > 48)
|
||||
$err .= t('Please use a shorter name.') . EOL;
|
||||
if(strlen($username) < 3)
|
||||
if(mb_strlen($username) < 3)
|
||||
$err .= t('Name too short.') . EOL;
|
||||
|
||||
// I don't really like having this rule, but it cuts down
|
||||
|
|
@ -85,8 +85,11 @@ function register_post(&$a) {
|
|||
// So now we are just looking for a space in the full name.
|
||||
|
||||
$loose_reg = get_config('system','no_regfullname');
|
||||
if((! $loose_reg) && (! strpos($username,' ')))
|
||||
$err .= t("That doesn\'t appear to be your full \x28First Last\x29 name.") . EOL;
|
||||
if(! $loose_reg) {
|
||||
$username = mb_convert_case($username,MB_CASE_TITLE,'UTF-8');
|
||||
if(! strpos($username,' '))
|
||||
$err .= t("That doesn't appear to be your full \x28First Last\x29 name.") . EOL;
|
||||
}
|
||||
|
||||
if(! allowed_email($email))
|
||||
$err .= t('Your email domain is not among those allowed on this site.') . EOL;
|
||||
|
|
@ -199,6 +202,24 @@ function register_post(&$a) {
|
|||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* if somebody clicked submit twice very quickly, they could end up with two accounts
|
||||
* due to race condition. Remove this one.
|
||||
*/
|
||||
|
||||
$r = q("SELECT `uid` FROM `user`
|
||||
WHERE `nickname` = '%s' ",
|
||||
dbesc($nickname)
|
||||
);
|
||||
if((count($r) > 1) && $newuid) {
|
||||
$err .= t('Nickname is already registered. Please choose another.') . EOL;
|
||||
q("DELETE FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
intval($newuid)
|
||||
);
|
||||
notice ($err);
|
||||
return;
|
||||
}
|
||||
|
||||
if(x($newuid) !== false) {
|
||||
$r = q("INSERT INTO `profile` ( `uid`, `profile-name`, `is-default`, `name`, `photo`, `thumb`, `publish`, `net-publish` )
|
||||
VALUES ( %d, '%s', %d, '%s', '%s', '%s', %d, %d ) ",
|
||||
|
|
@ -298,7 +319,7 @@ function register_post(&$a) {
|
|||
|
||||
|
||||
if( $a->config['register_policy'] == REGISTER_OPEN ) {
|
||||
$email_tpl = load_view_file("view/register_open_eml.tpl");
|
||||
$email_tpl = get_intltext_template("register_open_eml.tpl");
|
||||
$email_tpl = replace_macros($email_tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
|
|
@ -307,8 +328,11 @@ function register_post(&$a) {
|
|||
'$password' => $new_password,
|
||||
'$uid' => $newuid ));
|
||||
|
||||
$res = mail($email, t('Registration details for ') . $a->config['sitename'],
|
||||
$email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME']);
|
||||
$res = mail($email, sprintf(t('Registration details for %s'), $a->config['sitename']),
|
||||
$email_tpl,
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
|
||||
|
||||
if($res) {
|
||||
|
|
@ -333,7 +357,7 @@ function register_post(&$a) {
|
|||
dbesc($new_password)
|
||||
);
|
||||
|
||||
$email_tpl = load_view_file("view/register_verify_eml.tpl");
|
||||
$email_tpl = get_intltext_template("register_verify_eml.tpl");
|
||||
$email_tpl = replace_macros($email_tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
|
|
@ -344,9 +368,11 @@ function register_post(&$a) {
|
|||
'$hash' => $hash
|
||||
));
|
||||
|
||||
$res = mail($a->config['admin_email'], t('Registration request at ') . $a->config['sitename'],
|
||||
$email_tpl,'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME']);
|
||||
|
||||
$res = mail($a->config['admin_email'], sprintf(t('Registration request at %s'), $a->config['sitename']),
|
||||
$email_tpl,
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
if($res) {
|
||||
notice( t('Your registration is pending approval by the site owner.') . EOL ) ;
|
||||
goaway($a->get_baseurl());
|
||||
|
|
@ -409,7 +435,7 @@ function register_content(&$a) {
|
|||
$profile_publish_reg = '<input type="hidden" name="profile_publish_reg" value="1" />';
|
||||
}
|
||||
else {
|
||||
$publish_tpl = load_view_file("view/profile_publish.tpl");
|
||||
$publish_tpl = get_markup_template("profile_publish.tpl");
|
||||
$profile_publish = replace_macros($publish_tpl,array(
|
||||
'$instance' => 'reg',
|
||||
'$pubdesc' => t('Include your profile in member directory?'),
|
||||
|
|
@ -424,7 +450,7 @@ function register_content(&$a) {
|
|||
$license = t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.');
|
||||
|
||||
|
||||
$o = load_view_file("view/register.tpl");
|
||||
$o = get_markup_template("register.tpl");
|
||||
$o = replace_macros($o, array(
|
||||
'$oidhtml' => $oidhtml,
|
||||
'$realpeople' => $realpeople,
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ function regmod_content(&$a) {
|
|||
$r = q("DELETE FROM `register` WHERE `hash` = '%s' LIMIT 1",
|
||||
dbesc($register[0]['hash'])
|
||||
);
|
||||
notice( t('Registration revoked for ') . $user[0]['username'] . EOL);
|
||||
notice( sprintf(t('Registration revoked for %s'), $user[0]['username']) . EOL);
|
||||
return;
|
||||
|
||||
}
|
||||
|
|
@ -79,7 +79,7 @@ function regmod_content(&$a) {
|
|||
proc_run('php',"include/directory.php","$url");
|
||||
}
|
||||
|
||||
$email_tpl = load_view_file("view/register_open_eml.tpl");
|
||||
$email_tpl = get_intltext_template("register_open_eml.tpl");
|
||||
$email_tpl = replace_macros($email_tpl, array(
|
||||
'$sitename' => $a->config['sitename'],
|
||||
'$siteurl' => $a->get_baseurl(),
|
||||
|
|
@ -89,8 +89,11 @@ function regmod_content(&$a) {
|
|||
'$uid' => $user[0]['uid']
|
||||
));
|
||||
|
||||
$res = mail($user[0]['email'], t('Registration details for '). $a->config['sitename'],
|
||||
$email_tpl,'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
|
||||
$res = mail($user[0]['email'], sprintf(t('Registration details for %s'), $a->config['sitename']),
|
||||
$email_tpl,
|
||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||
. 'Content-transfer-encoding: 8bit' );
|
||||
|
||||
if($res) {
|
||||
notice( t('Account approved.') . EOL );
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ function removeme_content(&$a) {
|
|||
|
||||
$_SESSION['remove_account_verify'] = $hash;
|
||||
|
||||
$tpl = load_view_file('view/removeme.tpl');
|
||||
$tpl = get_markup_template('removeme.tpl');
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$basedir' => $a->get_baseurl(),
|
||||
'$hash' => $hash,
|
||||
|
|
|
|||
24
mod/rsd_xml.php
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
|
||||
|
||||
function rsd_xml_content(&$a) {
|
||||
header ("Content-Type: text/xml");
|
||||
echo '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">
|
||||
<service>
|
||||
<engineName>Friendika</engineName>
|
||||
<engineLink>http://friendika.com/</engineLink>
|
||||
<apis>
|
||||
<api name="Twitter" preferred="true" apiLink="'.$a->get_baseurl().'/api/" blogID="">
|
||||
<settings>
|
||||
<docs>http://status.net/wiki/TwitterCompatibleAPI</docs>
|
||||
<setting name="OAuth">false</setting>
|
||||
</settings>
|
||||
</api>
|
||||
</apis>
|
||||
</service>
|
||||
</rsd>
|
||||
';
|
||||
die();
|
||||
}
|
||||
|
|
@ -89,7 +89,7 @@ function salmon_post(&$a) {
|
|||
|
||||
// Create a fake feed wrapper so simplepie doesn't choke
|
||||
|
||||
$tpl = load_view_file('view/fake_feed.tpl');
|
||||
$tpl = get_markup_template('fake_feed.tpl');
|
||||
|
||||
$base = substr($data,strpos($data,'<entry'));
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,15 @@ function search_post(&$a) {
|
|||
|
||||
function search_content(&$a) {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
require_once("include/bbcode.php");
|
||||
require_once('include/security.php');
|
||||
require_once('include/conversation.php');
|
||||
|
||||
if(x($_SESSION,'theme'))
|
||||
unset($_SESSION['theme']);
|
||||
|
||||
|
|
@ -26,8 +35,6 @@ function search_content(&$a) {
|
|||
if(! $search)
|
||||
return $o;
|
||||
|
||||
require_once("include/bbcode.php");
|
||||
require_once('include/security.php');
|
||||
|
||||
$sql_extra = "
|
||||
AND `item`.`allow_cid` = ''
|
||||
|
|
@ -36,12 +43,20 @@ function search_content(&$a) {
|
|||
AND `item`.`deny_gid` = ''
|
||||
";
|
||||
|
||||
$s_bool = "AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )";
|
||||
$s_regx = "AND `item`.`body` REGEXP '%s' ";
|
||||
|
||||
if(mb_strlen($search) >= 3)
|
||||
$search_alg = $s_bool;
|
||||
else
|
||||
$search_alg = $s_regx;
|
||||
|
||||
$r = q("SELECT COUNT(*) AS `total`
|
||||
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
|
||||
WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND ( `wall` = 1 OR `contact`.`uid` = %d )
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )
|
||||
$search_alg
|
||||
$sql_extra ",
|
||||
intval(local_user()),
|
||||
dbesc($search)
|
||||
|
|
@ -57,7 +72,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`
|
||||
|
|
@ -65,74 +80,16 @@ function search_content(&$a) {
|
|||
WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND ( `wall` = 1 OR `contact`.`uid` = %d )
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )
|
||||
$search_alg
|
||||
$sql_extra
|
||||
ORDER BY `parent` DESC ",
|
||||
intval(local_user()),
|
||||
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;
|
||||
|
||||
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']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
|
||||
$coord = (($item['coord']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
|
||||
if($coord) {
|
||||
if($location)
|
||||
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
|
||||
else
|
||||
$location = '<span class="smalltext">' . $coord . '</span>';
|
||||
}
|
||||
|
||||
$drop = replace_macros($droptpl,array('$id' => $item['id']));
|
||||
$lock = '<div class="wall-item-lock"></div>';
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$id' => $item['item_id'],
|
||||
'$linktitle' => t('View $name\'s profile'),
|
||||
'$profile_url' => $profile_link,
|
||||
'$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' => '<a href="' . $a->get_baseurl() . '/display/' . $item['nickname'] . '/' . $item['id'] . '">' . t('View in context') . '</a>'
|
||||
));
|
||||
|
||||
}
|
||||
}
|
||||
$o .= conversation($a,$r,'search',false);
|
||||
|
||||
$o .= paginate($a);
|
||||
|
||||
|
|
|
|||
175
mod/settings.php
|
|
@ -5,6 +5,7 @@ function settings_init(&$a) {
|
|||
if(local_user()) {
|
||||
profile_load($a,$a->user['nickname']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -63,12 +64,54 @@ function settings_post(&$a) {
|
|||
$defloc = ((x($_POST,'defloc')) ? notags(trim($_POST['defloc'])) : '');
|
||||
$openid = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url'])) : '');
|
||||
$maxreq = ((x($_POST,'maxreq')) ? intval($_POST['maxreq']) : 0);
|
||||
$expire = ((x($_POST,'expire')) ? intval($_POST['expire']) : 0);
|
||||
|
||||
$allow_location = (((x($_POST,'allow_location')) && (intval($_POST['allow_location']) == 1)) ? 1: 0);
|
||||
$publish = (((x($_POST,'profile_in_directory')) && (intval($_POST['profile_in_directory']) == 1)) ? 1: 0);
|
||||
$net_publish = (((x($_POST,'profile_in_netdirectory')) && (intval($_POST['profile_in_netdirectory']) == 1)) ? 1: 0);
|
||||
$old_visibility = (((x($_POST,'visibility')) && (intval($_POST['visibility']) == 1)) ? 1 : 0);
|
||||
$page_flags = (((x($_POST,'page-flags')) && (intval($_POST['page-flags']))) ? intval($_POST['page-flags']) : 0);
|
||||
$blockwall = (((x($_POST,'blockwall')) && (intval($_POST['blockwall']) == 1)) ? 0: 1); // this setting is inverted!
|
||||
|
||||
$mail_server = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : '');
|
||||
$mail_port = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : '');
|
||||
$mail_ssl = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : '');
|
||||
$mail_user = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : '');
|
||||
$mail_pass = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : '');
|
||||
$mail_replyto = ((x($_POST,'mail_replyto')) ? $_POST['mail_replyto'] : '');
|
||||
$mail_pubmail = ((x($_POST,'mail_pubmail')) ? $_POST['mail_pubmail'] : '');
|
||||
|
||||
|
||||
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
|
||||
|
||||
if(! $mail_disabled) {
|
||||
$r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
|
||||
intval(local_user())
|
||||
);
|
||||
if(! count($r)) {
|
||||
q("INSERT INTO `mailacct` (`uid`) VALUES (%d)",
|
||||
intval(local_user())
|
||||
);
|
||||
}
|
||||
if(strlen($mail_pass)) {
|
||||
$pass = '';
|
||||
openssl_public_encrypt($mail_pass,$pass,$a->user['pubkey']);
|
||||
q("UPDATE `mailacct` SET `pass` = '%s' WHERE `uid` = %d LIMIT 1",
|
||||
dbesc(bin2hex($pass)),
|
||||
intval(local_user())
|
||||
);
|
||||
}
|
||||
$r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s',
|
||||
`mailbox` = 'INBOX', `reply_to` = '%s', `pubmail` = %d WHERE `uid` = %d LIMIT 1",
|
||||
dbesc($mail_server),
|
||||
intval($mail_port),
|
||||
dbesc($mail_ssl),
|
||||
dbesc($mail_user),
|
||||
dbesc($mail_replyto),
|
||||
intval($mail_pubmail),
|
||||
intval(local_user())
|
||||
);
|
||||
}
|
||||
|
||||
$notify = 0;
|
||||
|
||||
|
|
@ -139,7 +182,7 @@ function settings_post(&$a) {
|
|||
$openidserver = '';
|
||||
}
|
||||
|
||||
$r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `theme` = '%s', `maxreq` = %d, `openidserver` = '%s' WHERE `uid` = %d LIMIT 1",
|
||||
$r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `theme` = '%s', `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `blockwall` = %d WHERE `uid` = %d LIMIT 1",
|
||||
dbesc($username),
|
||||
dbesc($email),
|
||||
dbesc($openid),
|
||||
|
|
@ -154,7 +197,9 @@ function settings_post(&$a) {
|
|||
intval($allow_location),
|
||||
dbesc($theme),
|
||||
intval($maxreq),
|
||||
intval($expire),
|
||||
dbesc($openidserver),
|
||||
intval($blockwall),
|
||||
intval(local_user())
|
||||
);
|
||||
if($r)
|
||||
|
|
@ -238,11 +283,34 @@ function settings_content(&$a) {
|
|||
$defloc = $a->user['default-location'];
|
||||
$openid = $a->user['openid'];
|
||||
$maxreq = $a->user['maxreq'];
|
||||
$expire = ((intval($a->user['expire'])) ? $a->user['expire'] : '');
|
||||
$blockwall = $a->user['blockwall'];
|
||||
|
||||
if(! strlen($a->user['timezone']))
|
||||
$timezone = date_default_timezone_get();
|
||||
|
||||
$pageset_tpl = load_view_file('view/pagetypes.tpl');
|
||||
|
||||
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
|
||||
|
||||
if(! $mail_disabled) {
|
||||
$r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
|
||||
local_user()
|
||||
);
|
||||
}
|
||||
else {
|
||||
$r = null;
|
||||
$imap_disabled = (($mail_disabled) ? ' disabled="disabled" ' : '');
|
||||
}
|
||||
|
||||
$mail_server = ((count($r)) ? $r[0]['server'] : '');
|
||||
$mail_port = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : '');
|
||||
$mail_ssl = ((count($r)) ? $r[0]['ssltype'] : '');
|
||||
$mail_user = ((count($r)) ? $r[0]['user'] : '');
|
||||
$mail_replyto = ((count($r)) ? $r[0]['reply_to'] : '');
|
||||
$mail_pubmail = ((count($r)) ? $r[0]['pubmail'] : 0);
|
||||
|
||||
|
||||
$pageset_tpl = get_markup_template('pagetypes.tpl');
|
||||
$pagetype = replace_macros($pageset_tpl,array(
|
||||
'$normal' => (($a->user['page-flags'] == PAGE_NORMAL) ? " checked=\"checked\" " : ""),
|
||||
'$soapbox' => (($a->user['page-flags'] == PAGE_SOAPBOX) ? " checked=\"checked\" " : ""),
|
||||
|
|
@ -251,7 +319,15 @@ function settings_content(&$a) {
|
|||
'$page_normal' => PAGE_NORMAL,
|
||||
'$page_soapbox' => PAGE_SOAPBOX,
|
||||
'$page_community' => PAGE_COMMUNITY,
|
||||
'$page_freelove' => PAGE_FREELOVE
|
||||
'$page_freelove' => PAGE_FREELOVE,
|
||||
'$n_l' => t('Normal Account'),
|
||||
'$n_d' => t('This account is a normal personal profile'),
|
||||
'$s_l' => t('Soapbox Account'),
|
||||
'$s_d' => t('Automatically approve all connection/friend requests as read-only fans'),
|
||||
'$c_l' => t('Community/Celebrity Account'),
|
||||
'$c_d' => t('Automatically approve all connection/friend requests as read-write fans'),
|
||||
'$f_l' => t('Automatic Friend Account'),
|
||||
'$f_d' => t('Automatically approve all connection/friend requests as friends')
|
||||
));
|
||||
|
||||
$noid = get_config('system','no_openid');
|
||||
|
|
@ -268,17 +344,23 @@ function settings_content(&$a) {
|
|||
$profile_in_dir = '<input type="hidden" name="profile_in_directory" value="1" />';
|
||||
}
|
||||
else {
|
||||
$opt_tpl = load_view_file("view/profile-in-directory.tpl");
|
||||
$opt_tpl = get_markup_template("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\" " : "")
|
||||
));
|
||||
}
|
||||
|
||||
if(strlen(get_config('system','directory_submit_url'))) {
|
||||
$opt_tpl = load_view_file("view/profile-in-netdir.tpl");
|
||||
$opt_tpl = get_markup_template("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\" " : "")
|
||||
));
|
||||
|
|
@ -294,18 +376,7 @@ function settings_content(&$a) {
|
|||
if($invisible)
|
||||
notice( t('Profile is <strong>not published</strong>.') . 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 = '<select name="theme" id="theme-select" >';
|
||||
$files = glob('view/theme/*');
|
||||
|
||||
|
|
@ -321,28 +392,64 @@ function settings_content(&$a) {
|
|||
$theme_selector .= '<option val="' . basename($file) . '"' . $selected . '>' . basename($file) . '</option>';
|
||||
}
|
||||
}
|
||||
|
||||
$theme_selector .= '</select>';
|
||||
|
||||
$subdir = ((strlen($a->get_path())) ? '<br />' . t('or') . ' ' . $a->get_baseurl() . '/profile/' . $nickname : '');
|
||||
|
||||
$nickname_block = replace_macros($nickname_block,array(
|
||||
$tpl_addr = get_markup_template("settings_nick_set.tpl");
|
||||
|
||||
$prof_addr = replace_macros($tpl_addr,array(
|
||||
'$desc' => t('Your Identity 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');
|
||||
$stpl = get_markup_template('settings.tpl');
|
||||
|
||||
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
|
||||
|
||||
$uexport = '<div id="uexport-link"><a href="uexport" >' . t('Export Personal Data') . '</a></div>';
|
||||
|
||||
|
||||
$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,
|
||||
'$uid' => local_user(),
|
||||
'$username' => $username,
|
||||
'$openid' => $openid,
|
||||
'$email' => $email,
|
||||
'$nickname_block' => $nickname_block,
|
||||
'$nickname_block' => $prof_addr,
|
||||
'$timezone' => $timezone,
|
||||
'$zoneselect' => select_timezone($timezone),
|
||||
'$defloc' => $defloc,
|
||||
|
|
@ -350,6 +457,7 @@ function settings_content(&$a) {
|
|||
'$profile_in_dir' => $profile_in_dir,
|
||||
'$profile_in_net_dir' => $profile_in_net_dir,
|
||||
'$permissions' => t('Default Post Permissions'),
|
||||
'$permdesc' => t("\x28click to open/close\x29"),
|
||||
'$visibility' => $profile['net-publish'],
|
||||
'$aclselect' => populate_acl($a->user,$celeb),
|
||||
'$sel_notify1' => (($notify & NOTIFY_INTRO) ? ' checked="checked" ' : ''),
|
||||
|
|
@ -358,8 +466,27 @@ function settings_content(&$a) {
|
|||
'$sel_notify4' => (($notify & NOTIFY_COMMENT) ? ' checked="checked" ' : ''),
|
||||
'$sel_notify5' => (($notify & NOTIFY_MAIL) ? ' checked="checked" ' : ''),
|
||||
'$maxreq' => $maxreq,
|
||||
'$expire' => $expire,
|
||||
'$blockw_checked' => (($blockwall) ? '' : ' checked="checked" ' ),
|
||||
'$theme' => $theme_selector,
|
||||
'$pagetype' => $pagetype
|
||||
'$pagetype' => $pagetype,
|
||||
'$lbl_imap0' => t('Email/Mailbox Setup'),
|
||||
'$imap_desc' => t("If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."),
|
||||
'$lbl_imap1' => t('IMAP server name:'),
|
||||
'$imap_server' => $mail_server,
|
||||
'$lbl_imap2' => t('IMAP port:'),
|
||||
'$imap_port' => $mail_port,
|
||||
'$lbl_imap3' => t("Security \x28TLS or SSL\x29:"),
|
||||
'$imap_ssl' => $mail_ssl,
|
||||
'$lbl_imap4' => t('Email login name:'),
|
||||
'$imap_user' => $mail_user,
|
||||
'$lbl_imap5' => t('Email password:'),
|
||||
'$lbl_imap6' => t("Reply-to address \x28Optional\x29:"),
|
||||
'$imap_replyto' => $mail_replyto,
|
||||
'$lbl_imap7' => t('Send public posts to all email contacts:'),
|
||||
'$pubmail_checked' => (($mail_pubmail) ? ' checked="checked" ' : ''),
|
||||
'$mail_disabled' => (($mail_disabled) ? '<div class="error-message">' . t('Email access is disabled on this site.') . '</div>' : ''),
|
||||
'$imap_disabled' => $imap_disabled
|
||||
));
|
||||
|
||||
call_hooks('settings_form',$o);
|
||||
|
|
|
|||
23
mod/share.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
require_once('bbcode.php');
|
||||
|
||||
function share_init(&$a) {
|
||||
|
||||
$post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);
|
||||
if((! $post_id) || (! local_user()))
|
||||
killme();
|
||||
|
||||
$r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
|
||||
intval($post_id)
|
||||
);
|
||||
if(! count($r) || $r[0]['private'])
|
||||
killme();
|
||||
|
||||
$o = '';
|
||||
|
||||
$o .= '♲ <a href="' . $r[0]['author-link'] . '">' . $r[0]['author-name'] . '</a><br />';
|
||||
$o .= bbcode($r[0]['body'], true);
|
||||
echo $o . '<br />';
|
||||
killme();
|
||||
}
|
||||
72
mod/uexport.php
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
<?php
|
||||
|
||||
function uexport_init(&$a) {
|
||||
|
||||
if(! local_user())
|
||||
killme();
|
||||
|
||||
$user = array();
|
||||
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
local_user()
|
||||
);
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
foreach($rr as $k => $v)
|
||||
$user[$k] = $v;
|
||||
|
||||
}
|
||||
$contact = array();
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d ",
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
foreach($rr as $k => $v)
|
||||
$contact[][$k] = $v;
|
||||
|
||||
}
|
||||
|
||||
$profile = array();
|
||||
$r = q("SELECT * FROM `profile` WHERE `uid` = %d ",
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
foreach($rr as $k => $v)
|
||||
$profile[][$k] = $v;
|
||||
}
|
||||
|
||||
$output = array('user' => $user, 'contact' => $contact, 'profile' => $profile );
|
||||
|
||||
header("Content-type: application/json");
|
||||
echo str_replace('\\/','/',json_encode($output));
|
||||
|
||||
$r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
|
||||
intval(local_user())
|
||||
);
|
||||
if(count($r))
|
||||
$total = $r[0]['total'];
|
||||
|
||||
// chunk the output to avoid exhausting memory
|
||||
|
||||
for($x = 0; $x < $total; $x += 500) {
|
||||
$item = array();
|
||||
$r = q("SELECT * FROM `item` WHERE `uid` = %d LIMIT %d, %d",
|
||||
intval(local_user()),
|
||||
intval($x),
|
||||
intval(500)
|
||||
);
|
||||
if(count($r)) {
|
||||
foreach($r as $rr)
|
||||
foreach($rr as $k => $v)
|
||||
$item[][$k] = $v;
|
||||
}
|
||||
|
||||
$output = array('item' => $item);
|
||||
echo str_replace('\\/','/',json_encode($output));
|
||||
}
|
||||
|
||||
|
||||
killme();
|
||||
|
||||
}
|
||||
|
|
@ -19,6 +19,17 @@ function update_network_content(&$a) {
|
|||
$replace = "<img\${1} dst=\"\${2}\"";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
|
||||
$replace = '<br />' . t('[Embedded content - reload page to view]') . '<br />';
|
||||
$pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
$pattern = "/<\s*video[^>]*>(.*?)<\s*\/\s*video>/i";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
$pattern = "/<\s*embed[^>]*>(.*?)<\s*\/\s*embed>/i";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
$pattern = "/<\s*iframe[^>]*>(.*?)<\s*\/\s*iframe>/i";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
|
||||
|
||||
echo str_replace("\t",' ',$text);
|
||||
echo (($_GET['msie'] == 1) ? '</div>' : '</section>');
|
||||
echo "</body></html>\r\n";
|
||||
|
|
|
|||
|
|
@ -38,6 +38,16 @@ function update_profile_content(&$a) {
|
|||
$replace = "<img\${1} dst=\"\${2}\"";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
|
||||
$replace = '<br />' . t('[Embedded content - reload page to view]') . '<br />';
|
||||
$pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
$pattern = "/<\s*video[^>]*>(.*?)<\s*\/\s*video>/i";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
$pattern = "/<\s*embed[^>]*>(.*?)<\s*\/\s*embed>/i";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
$pattern = "/<\s*iframe[^>]*>(.*?)<\s*\/\s*iframe>/i";
|
||||
$text = preg_replace($pattern, $replace, $text);
|
||||
|
||||
/**
|
||||
* reportedly some versions of MSIE don't handle tabs in XMLHttpRequest documents very well
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2,13 +2,21 @@
|
|||
|
||||
function viewcontacts_init(&$a) {
|
||||
|
||||
profile_load($a,$a->argv[1]);
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
return;
|
||||
}
|
||||
|
||||
profile_load($a,$a->argv[1]);
|
||||
}
|
||||
|
||||
|
||||
function viewcontacts_content(&$a) {
|
||||
|
||||
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
|
||||
notice( t('Public access denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
if(((! count($a->profile)) || ($a->profile['hide-friends']))) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return;
|
||||
|
|
@ -33,7 +41,7 @@ function viewcontacts_content(&$a) {
|
|||
return $o;
|
||||
}
|
||||
|
||||
$tpl = load_view_file("view/viewcontact_template.tpl");
|
||||
$tpl = get_markup_template("viewcontact_template.tpl");
|
||||
|
||||
foreach($r as $rr) {
|
||||
if($rr['self'])
|
||||
|
|
@ -41,9 +49,10 @@ function viewcontacts_content(&$a) {
|
|||
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$id' => $rr['id'],
|
||||
'$alt_text' => t('Visit ') . $rr['name'] . t('\'s profile'),
|
||||
'$alt_text' => t('Visit $username\'s profile'),
|
||||
'$thumb' => $rr['thumb'],
|
||||
'$name' => substr($rr['name'],0,20),
|
||||
'$username' => $rr['name'],
|
||||
'$url' => $rr['url']
|
||||
));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ function wall_upload_post(&$a) {
|
|||
$maximagesize = get_config('system','maximagesize');
|
||||
|
||||
if(($maximagesize) && ($filesize > $maximagesize)) {
|
||||
notice( t('Image exceeds size limit of ') . $maximagesize . EOL);
|
||||
notice( sprintf(t('Image exceeds size limit of %d'), $maximagesize) . EOL);
|
||||
@unlink($src);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ function xrd_content(&$a) {
|
|||
|
||||
header("Content-type: text/xml");
|
||||
|
||||
$tpl = load_view_file('view/xrd_person.tpl');
|
||||
$tpl = file_get_contents('view/xrd_person.tpl');
|
||||
|
||||
$o = replace_macros($tpl, array(
|
||||
'$accturi' => $uri,
|
||||
|
|
|
|||
105
update.php
|
|
@ -326,7 +326,7 @@ function update_1033() {
|
|||
`k` CHAR( 255 ) NOT NULL PRIMARY KEY ,
|
||||
`v` TEXT NOT NULL,
|
||||
`updated` DATETIME NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;");
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -377,3 +377,106 @@ function update_1038() {
|
|||
function update_1039() {
|
||||
q("ALTER TABLE `addon` ADD `timestamp` BIGINT NOT NULL DEFAULT '0'");
|
||||
}
|
||||
|
||||
|
||||
function update_1040() {
|
||||
|
||||
q("CREATE TABLE IF NOT EXISTS `fcontact` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`url` CHAR( 255 ) NOT NULL ,
|
||||
`name` CHAR( 255 ) NOT NULL ,
|
||||
`photo` CHAR( 255 ) NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
|
||||
|
||||
q("CREATE TABLE IF NOT EXISTS `ffinder` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`uid` INT UNSIGNED NOT NULL ,
|
||||
`cid` INT UNSIGNED NOT NULL ,
|
||||
`fid` INT UNSIGNED NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
|
||||
|
||||
}
|
||||
|
||||
function update_1041() {
|
||||
q("ALTER TABLE `profile` CHANGE `keywords` `prv_keywords` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ");
|
||||
q("ALTER TABLE `profile` ADD `pub_keywords` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `religion` ");
|
||||
}
|
||||
|
||||
function update_1042() {
|
||||
q("ALTER TABLE `user` ADD `expire` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `maxreq` ");
|
||||
}
|
||||
|
||||
|
||||
function update_1043() {
|
||||
q("ALTER TABLE `user` ADD `blockwall` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `blocked` ");
|
||||
}
|
||||
|
||||
function update_1044() {
|
||||
q("ALTER TABLE `profile` ADD FULLTEXT ( `pub_keywords` ) ");
|
||||
q("ALTER TABLE `profile` ADD FULLTEXT ( `prv_keywords` ) ");
|
||||
}
|
||||
|
||||
function update_1045() {
|
||||
q("ALTER TABLE `user` ADD `language` CHAR( 16 ) NOT NULL DEFAULT 'en' AFTER `timezone` ");
|
||||
}
|
||||
|
||||
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 ");
|
||||
}
|
||||
|
||||
function update_1050() {
|
||||
q("CREATE TABLE `attach` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`uid` INT NOT NULL ,
|
||||
`filetype` CHAR( 64 ) NOT NULL ,
|
||||
`filesize` INT NOT NULL ,
|
||||
`data` LONGBLOB NOT NULL ,
|
||||
`created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`edited` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`allow_cid` MEDIUMTEXT NOT NULL ,
|
||||
`allow_gid` MEDIUMTEXT NOT NULL ,
|
||||
`deny_cid` MEDIUMTEXT NOT NULL ,
|
||||
`deny_gid` MEDIUMTEXT NOT NULL
|
||||
) ENGINE = MYISAM ");
|
||||
|
||||
}
|
||||
|
||||
function update_1051() {
|
||||
q("ALTER TABLE `mailacct` ADD `port` INT NOT NULL AFTER `server` ,
|
||||
ADD `ssltype` CHAR( 16 ) NOT NULL AFTER `port` ,
|
||||
ADD `mailbox` CHAR( 255 ) NOT NULL AFTER `ssltype` ");
|
||||
|
||||
q("ALTER TABLE `contact` ADD `addr` CHAR( 255 ) NOT NULL AFTER `url` ");
|
||||
}
|
||||
|
||||
function update_1052() {
|
||||
q("ALTER TABLE `mailacct` CHANGE `pass` `pass` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL");
|
||||
q("ALTER TABLE `mailacct` ADD `pubmail` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `reply_to` ");
|
||||
q("ALTER TABLE `item` ADD `pubmail` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `private` ");
|
||||
}
|
||||
|
||||
|
||||
function update_1053() {
|
||||
q("ALTER TABLE `item` ADD `extid` CHAR( 255 ) NOT NULL AFTER `parent-uri` , ADD INDEX ( `extid` ) ");
|
||||
}
|
||||
|
||||
|
|
|
|||
5
util/.htaccess
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
Options -Indexes
|
||||
|
||||
# Remove the following line or modify it to run the string translator utility
|
||||
Deny from all
|
||||
|
||||
78
util/README
|
|
@ -44,5 +44,83 @@ then relocate the files to the view directory. The files in the top-level view
|
|||
directory are template files which do not require translation.
|
||||
|
||||
|
||||
Placeholders
|
||||
|
||||
Do not translate placeholders in strings! Things like %s, %d, %1$s and $somename
|
||||
are used to add dynamic content to the string.
|
||||
|
||||
%s represents a dynamic string, like in "Welcome to %s"
|
||||
%d represents a dynamic number, like in "%d new messages"
|
||||
$somename is a variable like in php
|
||||
In %1$s %2$s, the numbers are the position index of multiple dynamic content.
|
||||
You could swap position in string of indexed placeholders.
|
||||
e.g.
|
||||
"%1$s's %2$s" => "John's photo", "John's item"
|
||||
"%2$s di %1$s" => "foto di John", "elemento di John"
|
||||
|
||||
|
||||
Plural
|
||||
|
||||
The tt() function supports plural form. Script extract.php write this in
|
||||
strings.php as an array, one string for every plural form language supports:
|
||||
|
||||
$a->string["%d message sent"] = Array(
|
||||
0 => "%d message sent",
|
||||
1 => "%d messages sent",
|
||||
);
|
||||
|
||||
The function string_plural_select($n) defined in strings.php, return the string
|
||||
index to use, related to the numbers of item (value of $n).
|
||||
|
||||
This is modelled after ngettext function of GNU gettext.
|
||||
More info at http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
|
||||
|
||||
|
||||
Xgettext and .po workflow
|
||||
|
||||
1. Run util/run_xgettext.sh script (on *unix sistems, with GNU xgettext installed)
|
||||
This script runs xgettext on source tree, extracting strings from t() and tt()
|
||||
functions, and creates a util/messages.po file.
|
||||
|
||||
% cd util; ./run_xgettext.sh ../view/{language}/messages.po
|
||||
|
||||
Replace {language} with the language you are working on - e.g. 'es', 'fr', 'de', etc.
|
||||
|
||||
2. copy util/messages.po to view/<langauage>/messages.po
|
||||
3. open view/<langauage>/messages.po with a text editor and fill in infos in
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
|
||||
(eg:
|
||||
"Last-Translator: Guybrush Threepwood <gb@host.com>"
|
||||
"Language-Team: Pirate Friendika <pirate-friendika-ml@host.com>\n"
|
||||
"Language: pi\n"
|
||||
)
|
||||
|
||||
For the line
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
read GNU gettext manual at
|
||||
http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
|
||||
|
||||
4. You could then translate the strings in text editor, but I suggest to use one
|
||||
of the many .po editors out there, like QtLinguist
|
||||
|
||||
5. run
|
||||
$ php util/po2php.php view/<language>/messages.po
|
||||
to create the strings.php file
|
||||
|
||||
When strings are added or modified in source, you could run
|
||||
$ cd util; ./run_xgettext.sh ../view/<language>/messages.po
|
||||
to extract strings from source files and join them with the existing .po file:
|
||||
new strings are added, the existing are not overwritten.
|
||||
|
||||
If you already translated Friendika using strings.php, you could import your old
|
||||
translation to messages.po. Run:
|
||||
$ php util/php2po.php view/<language>/strings.php
|
||||
|
||||
|
||||
You may also use the util/string_translator.php web interface to translate the string file, but it is disabled for website security reasons. The web server will need write permission to your language directories and the "Deny ..." line in util/.htaccess will need to be modified or commented to use the utility.
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -10,25 +10,50 @@
|
|||
$str = file_get_contents($file);
|
||||
|
||||
$pat = '| t\(([^\)]*)\)|';
|
||||
$patt = '| tt\(([^\)]*)\)|';
|
||||
|
||||
preg_match_all($pat,$str,$matches);
|
||||
preg_match_all($patt, $str, $matchestt);
|
||||
|
||||
|
||||
if(! count($matches))
|
||||
continue;
|
||||
|
||||
foreach($matches[1] as $match) {
|
||||
if(! in_array($match,$arr))
|
||||
$arr[] = $match;
|
||||
if(count($matches)){
|
||||
foreach($matches[1] as $match) {
|
||||
if(! in_array($match,$arr))
|
||||
$arr[] = $match;
|
||||
}
|
||||
}
|
||||
if(count($matchestt)){
|
||||
foreach($matchestt[1] as $match) {
|
||||
$matchtkns = preg_split("|[ \t\r\n]*,[ \t\r\n]*|",$match);
|
||||
if (count($matchtkns)==3 && !in_array($matchtkns,$arr)){
|
||||
$arr[] = $matchtkns;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$s = '<?php' . "\n";
|
||||
foreach($arr as $a) {
|
||||
if(substr($a,0,1) == '$')
|
||||
continue;
|
||||
$s .= '
|
||||
function string_plural_select($n){
|
||||
return ($n != 1);
|
||||
}
|
||||
|
||||
$s .= '$a->strings[' . $a . '] = ' . $a . ';' . "\n";
|
||||
';
|
||||
|
||||
foreach($arr as $a) {
|
||||
if (is_array($a)){
|
||||
if(substr($a[1],0,1) == '$')
|
||||
continue;
|
||||
$s .= '$a->strings[' . $a[0] . "] = array(\n";
|
||||
$s .= "\t0 => ". $a[0]. ",\n";
|
||||
$s .= "\t1 => ". $a[1]. ",\n";
|
||||
$s .= ");\n";
|
||||
} else {
|
||||
if(substr($a,0,1) == '$')
|
||||
continue;
|
||||
$s .= '$a->strings[' . $a . '] = '. $a . ';' . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
$zones = timezone_identifiers_list();
|
||||
|
|
|
|||
3429
util/messages.po
Normal file
|
|
@ -0,0 +1,3429 @@
|
|||
# FRIENDIKA Distributed Social Network
|
||||
# Copyright (C) 2010, 2011 Mike Macgirvin
|
||||
# This file is distributed under the same license as the Friendika package.
|
||||
# Mike Macgirvin, 2010
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 2.2.975\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-05-10 14:13+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"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"
|
||||
|
||||
#: ../../index.php:210
|
||||
msgid "Not Found"
|
||||
msgstr ""
|
||||
|
||||
#: ../../index.php:211
|
||||
msgid "Page not found."
|
||||
msgstr ""
|
||||
|
||||
#: ../../index.php:266 ../../mod/profperm.php:19 ../../mod/group.php:67
|
||||
msgid "Permission denied"
|
||||
msgstr ""
|
||||
|
||||
#: ../../index.php:267 ../../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:144
|
||||
#: ../../mod/profile_photo.php:155 ../../mod/regmod.php:16
|
||||
#: ../../mod/profiles.php:7 ../../mod/profiles.php:227
|
||||
#: ../../mod/settings.php:15 ../../mod/settings.php:20
|
||||
#: ../../mod/settings.php:251 ../../mod/photos.php:89 ../../mod/photos.php:798
|
||||
#: ../../mod/display.php:138 ../../mod/editpost.php:10 ../../mod/invite.php:13
|
||||
#: ../../mod/invite.php:54 ../../mod/contacts.php:106
|
||||
#: ../../mod/register.php:25 ../../mod/install.php:93 ../../mod/network.php:6
|
||||
#: ../../mod/notifications.php:56 ../../mod/crepair.php:54
|
||||
#: ../../mod/item.php:57 ../../mod/item.php:680 ../../mod/message.php:8
|
||||
#: ../../mod/message.php:116 ../../mod/dfrn_confirm.php:53
|
||||
#: ../../mod/viewcontacts.php:21 ../../mod/group.php:19
|
||||
#: ../../addon/facebook/facebook.php:246
|
||||
msgid "Permission denied."
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:385
|
||||
msgid "Delete this item?"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:386 ../../mod/photos.php:1130 ../../mod/photos.php:1169
|
||||
#: ../../mod/photos.php:1200 ../../include/conversation.php:375
|
||||
msgid "Comment"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:834
|
||||
msgid "Create a New Account"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:835 ../../mod/register.php:471 ../../include/nav.php:59
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:841
|
||||
msgid "Nickname or Email address: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:842
|
||||
msgid "Password: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:843 ../../boot.php:849 ../../include/nav.php:44
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:847
|
||||
msgid "Nickname/Email/OpenID: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:848
|
||||
msgid "Password (if not OpenID): "
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:851
|
||||
msgid "Forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:852 ../../mod/lostpass.php:78
|
||||
msgid "Password Reset"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:865 ../../include/nav.php:41
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:1106
|
||||
msgid "prev"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:1108
|
||||
msgid "first"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:1137
|
||||
msgid "last"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:1140
|
||||
msgid "next"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2001
|
||||
msgid "No contacts"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2009
|
||||
#, php-format
|
||||
msgid "%d Contact"
|
||||
msgid_plural "%d Contacts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../../boot.php:2014 ../../mod/viewcontacts.php:25
|
||||
msgid "View Contacts"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2060 ../../mod/search.php:26 ../../include/nav.php:71
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2216 ../../mod/profile.php:11
|
||||
msgid "No profile"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2275
|
||||
msgid "Connect"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2290
|
||||
msgid "Location:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2294
|
||||
msgid ", "
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2302 ../../include/profile_advanced.php:23
|
||||
msgid "Gender:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2306
|
||||
msgid "Status:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2308 ../../include/profile_advanced.php:103
|
||||
msgid "Homepage:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Monday"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Tuesday"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Wednesday"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Thursday"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Friday"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Saturday"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Sunday"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2418
|
||||
msgid "g A l F d"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2435
|
||||
msgid "Birthday Reminders"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2436
|
||||
msgid "Birthdays this week:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2437
|
||||
msgid "(Adjusted for local time)"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2448
|
||||
msgid "[today]"
|
||||
msgstr ""
|
||||
|
||||
#: ../../boot.php:2654
|
||||
msgid "link to source"
|
||||
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/profiles.php:370
|
||||
#: ../../mod/settings.php:426 ../../mod/photos.php:826
|
||||
#: ../../mod/photos.php:883 ../../mod/photos.php:1091
|
||||
#: ../../mod/photos.php:1131 ../../mod/photos.php:1170
|
||||
#: ../../mod/photos.php:1201 ../../mod/invite.php:68
|
||||
#: ../../mod/contacts.php:264 ../../mod/install.php:133
|
||||
#: ../../mod/crepair.php:100 ../../mod/group.php:76 ../../mod/group.php:159
|
||||
#: ../../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:293
|
||||
#: ../../addon/randplace/randplace.php:179 ../../include/conversation.php:376
|
||||
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:575
|
||||
msgid "Unable to process image."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88
|
||||
#: ../../mod/wall_upload.php:95 ../../mod/item.php:214
|
||||
#: ../../mod/message.php:93
|
||||
msgid "Wall Photos"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/wall_upload.php:82 ../../mod/profile_photo.php:241
|
||||
#: ../../mod/photos.php:593
|
||||
msgid "Image upload failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_notify.php:189 ../../mod/dfrn_notify.php:405
|
||||
#: ../../mod/dfrn_notify.php:495 ../../mod/regmod.php:94
|
||||
#: ../../mod/register.php:333 ../../mod/register.php:373
|
||||
#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:40
|
||||
#: ../../mod/lostpass.php:102 ../../mod/item.php:480 ../../mod/item.php:506
|
||||
#: ../../mod/dfrn_confirm.php:657 ../../include/items.php:1435
|
||||
msgid "Administrator"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_notify.php:191
|
||||
msgid "noreply"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_notify.php:249
|
||||
msgid "New mail received at "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_notify.php:403 ../../mod/dfrn_notify.php:493
|
||||
#, php-format
|
||||
msgid "%s commented on an item at %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile.php:112
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile.php:113 ../../mod/profperm.php:94
|
||||
#: ../../include/profile_advanced.php:7
|
||||
msgid "Profile"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile.php:114
|
||||
msgid "Photos"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile.php:262 ../../mod/display.php:147
|
||||
#: ../../mod/register.php:450 ../../mod/network.php:259
|
||||
msgid ""
|
||||
"Shared content is covered by the <a href=\"http://creativecommons.org/"
|
||||
"licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/follow.php:16 ../../mod/dfrn_request.php:340
|
||||
msgid "Disallowed profile URL."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/follow.php:39
|
||||
msgid "The profile address specified does not provide adequate information."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/follow.php:45
|
||||
msgid ""
|
||||
"Limited profile. This person will be unable to receive direct/personal "
|
||||
"notifications from you."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/follow.php:100
|
||||
msgid "Unable to retrieve contact information."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/follow.php:146
|
||||
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:160
|
||||
#: ../../mod/profile_photo.php:236 ../../mod/profile_photo.php:245
|
||||
#: ../../mod/photos.php:110 ../../mod/photos.php:535 ../../mod/photos.php:875
|
||||
#: ../../mod/photos.php:890 ../../mod/register.php:288
|
||||
#: ../../mod/register.php:295 ../../mod/register.php:302
|
||||
msgid "Profile Photos"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:61 ../../mod/profile_photo.php:68
|
||||
#: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:248
|
||||
#, php-format
|
||||
msgid "Image size reduction [%s] failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:95
|
||||
msgid "Unable to process image"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:193
|
||||
msgid "Upload File:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:194
|
||||
msgid "Upload Profile Photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:195
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:196 ../../mod/settings.php:398
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:196
|
||||
msgid "skip this step"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:196
|
||||
msgid "select a photo from your photo albums"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:209
|
||||
msgid "Crop Image"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:210
|
||||
msgid "Please adjust the image cropping for optimum viewing."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:211
|
||||
msgid "Done Editing"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profile_photo.php:239
|
||||
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:331
|
||||
#, php-format
|
||||
msgid "Registration details for %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/regmod.php:99
|
||||
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:350
|
||||
#: ../../mod/settings.php:362 ../../mod/register.php:444
|
||||
#: ../../mod/dfrn_request.php:634
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profiles.php:356 ../../mod/settings.php:351
|
||||
#: ../../mod/settings.php:363 ../../mod/register.php:445
|
||||
#: ../../mod/dfrn_request.php:635
|
||||
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 "<span class=\"heart\">♥</span> 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 <strong>public</strong> profile.<br />It <strong>may</strong> "
|
||||
"be visible to anybody using the internet."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profiles.php:421 ../../mod/directory.php:97
|
||||
msgid "Age: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profiles.php:456 ../../include/nav.php:109
|
||||
msgid "Profiles"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profiles.php:457
|
||||
msgid "Change profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profiles.php:458
|
||||
msgid "Create New Profile"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profiles.php:468
|
||||
msgid "Profile Image"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profiles.php:470
|
||||
msgid "Visible to everybody"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profiles.php:471
|
||||
msgid "Edit visibility"
|
||||
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:138
|
||||
msgid " Please use a shorter name."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:140
|
||||
msgid " Name too short."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:146
|
||||
msgid " Not valid email."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:148
|
||||
msgid " Cannot change to that email."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:206
|
||||
msgid "Settings updated."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:256 ../../mod/settings.php:418
|
||||
msgid "Plugin Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:257 ../../mod/settings.php:417
|
||||
msgid "Account Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:263
|
||||
msgid "No Plugin settings configured"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:323
|
||||
msgid "Normal Account"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:324
|
||||
msgid "This account is a normal personal profile"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:325
|
||||
msgid "Soapbox Account"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:326
|
||||
msgid "Automatically approve all connection/friend requests as read-only fans"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:327
|
||||
msgid "Community/Celebrity Account"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:328
|
||||
msgid "Automatically approve all connection/friend requests as read-write fans"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:329
|
||||
msgid "Automatic Friend Account"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:330
|
||||
msgid "Automatically approve all connection/friend requests as friends"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:339
|
||||
msgid "OpenID: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:339
|
||||
msgid " (Optional) Allow this OpenID to login to this account."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:349
|
||||
msgid "Publish your default profile in site directory?"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:361
|
||||
msgid "Publish your default profile in global social directory?"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:377
|
||||
msgid "Profile is <strong>not published</strong>."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:403
|
||||
msgid "Your Identity Address is"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:413
|
||||
msgid "Export Personal Data"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:419
|
||||
msgid "Basic Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:420 ../../include/profile_advanced.php:10
|
||||
msgid "Full Name:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:421
|
||||
msgid "Email Address:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:422
|
||||
msgid "Your Timezone:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:423
|
||||
msgid "Default Post Location:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:424
|
||||
msgid "Use Browser Location:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:425
|
||||
msgid "Display Theme:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:427
|
||||
msgid "Security and Privacy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:428
|
||||
msgid "Maximum Friend Requests/Day:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:429
|
||||
msgid "(to prevent spam abuse)"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:430
|
||||
msgid "Allow friends to post to your profile page:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:431
|
||||
msgid "Automatically expire (delete) posts older than"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:432 ../../include/datetime.php:154
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:433
|
||||
msgid "Notification Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:434
|
||||
msgid "Send a notification email when:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:435
|
||||
msgid "You receive an introduction"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:436
|
||||
msgid "Your introductions are confirmed"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:437
|
||||
msgid "Someone writes on your profile wall"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:438
|
||||
msgid "Someone writes a followup comment"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:439
|
||||
msgid "You receive a private message"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:440
|
||||
msgid "Password Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:441
|
||||
msgid "Leave password fields blank unless changing"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:442
|
||||
msgid "New Password:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:443
|
||||
msgid "Confirm:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:444
|
||||
msgid "Advanced Page Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:459
|
||||
msgid "Default Post Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:460
|
||||
msgid "(click to open/close)"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:473
|
||||
msgid "Email/Mailbox Setup"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:474
|
||||
msgid ""
|
||||
"If you wish to communicate with email contacts using this service "
|
||||
"(optional), please specify how to connect to your mailbox."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:475
|
||||
msgid "IMAP server name:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:477
|
||||
msgid "IMAP port:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:479
|
||||
msgid "Security (TLS or SSL):"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:481
|
||||
msgid "Email login name:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:483
|
||||
msgid "Email password:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:484
|
||||
msgid "Reply-to address (Optional):"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:486
|
||||
msgid "Send public posts to all email contacts:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/settings.php:488
|
||||
msgid "Email access is disabled on this site."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/search.php:13 ../../mod/photos.php:676 ../../mod/display.php:7
|
||||
#: ../../mod/dfrn_request.php:591 ../../mod/directory.php:18
|
||||
#: ../../mod/viewcontacts.php:16
|
||||
msgid "Public access denied."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/search.php:69
|
||||
msgid "No results."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:34
|
||||
msgid "Photo Albums"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:38 ../../mod/photos.php:110 ../../mod/photos.php:806
|
||||
#: ../../mod/photos.php:875 ../../mod/photos.php:890 ../../mod/photos.php:1278
|
||||
#: ../../mod/photos.php:1289 ../../include/Photo.php:233
|
||||
#: ../../include/Photo.php:240 ../../include/Photo.php:247
|
||||
#: ../../include/items.php:1027 ../../include/items.php:1030
|
||||
#: ../../include/items.php:1033
|
||||
msgid "Contact Photos"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:99
|
||||
msgid "Contact information unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:120
|
||||
msgid "Album not found."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:138 ../../mod/photos.php:884
|
||||
msgid "Delete Album"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:201 ../../mod/photos.php:1092
|
||||
msgid "Delete Photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:473
|
||||
msgid "was tagged in a"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:473 ../../mod/like.php:110
|
||||
#: ../../include/conversation.php:20
|
||||
msgid "photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:473
|
||||
msgid "by"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:563 ../../addon/js_upload/js_upload.php:306
|
||||
msgid "Image exceeds size limit of "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:686
|
||||
msgid "No photos selected"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:833
|
||||
msgid "Upload Photos"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:836 ../../mod/photos.php:879
|
||||
msgid "New album name: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:837
|
||||
msgid "or existing album name: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:839 ../../mod/photos.php:1087
|
||||
msgid "Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:894
|
||||
msgid "Edit Album"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:904 ../../mod/photos.php:1307
|
||||
msgid "View Photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:933
|
||||
msgid "Photo not available"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:982
|
||||
msgid "Edit photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:983
|
||||
msgid "Use as profile photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:989 ../../include/conversation.php:309
|
||||
msgid "Private Message"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:996
|
||||
msgid "<< Prev"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1000
|
||||
msgid "View Full Size"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1005
|
||||
msgid "Next >>"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1067
|
||||
msgid "Tags: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1070
|
||||
msgid "[Remove any tag]"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1080
|
||||
msgid "New album name"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1083
|
||||
msgid "Caption"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1085
|
||||
msgid "Add a Tag"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1089
|
||||
msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1109 ../../include/conversation.php:357
|
||||
msgid "I like this (toggle)"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1110 ../../include/conversation.php:358
|
||||
msgid "I don't like this (toggle)"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1111 ../../include/conversation.php:359
|
||||
#: ../../include/conversation.php:718
|
||||
msgid "Share"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1112 ../../mod/editpost.php:96
|
||||
#: ../../mod/message.php:190 ../../mod/message.php:324
|
||||
#: ../../include/conversation.php:360 ../../include/conversation.php:727
|
||||
msgid "Please wait"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1128 ../../mod/photos.php:1167
|
||||
#: ../../mod/photos.php:1198 ../../include/conversation.php:373
|
||||
msgid "This is you"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1228 ../../mod/group.php:146
|
||||
#: ../../include/conversation.php:174 ../../include/conversation.php:386
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1294
|
||||
msgid "Recent Photos"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1298
|
||||
msgid "Upload New Photos"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/photos.php:1311
|
||||
msgid "View Album"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/display.php:25 ../../mod/display.php:142 ../../mod/item.php:609
|
||||
msgid "Item not found."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/display.php:135
|
||||
msgid "Item has been removed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:17 ../../mod/editpost.php:27
|
||||
msgid "Item not found"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:32
|
||||
msgid "Edit post"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:38 ../../include/conversation.php:673
|
||||
msgid "Visible to <strong>everybody</strong>"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:75 ../../include/conversation.php:707
|
||||
msgid "Post to Email"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:88 ../../include/conversation.php:384
|
||||
#: ../../include/group.php:169
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:89 ../../mod/message.php:188
|
||||
#: ../../mod/message.php:322 ../../include/conversation.php:719
|
||||
msgid "Upload photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:90 ../../mod/message.php:189
|
||||
#: ../../mod/message.php:323 ../../include/conversation.php:720
|
||||
msgid "Insert web link"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:91 ../../include/conversation.php:721
|
||||
msgid "Insert YouTube video"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:92 ../../include/conversation.php:722
|
||||
msgid "Insert Vorbis [.ogg] video"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:93 ../../include/conversation.php:723
|
||||
msgid "Insert Vorbis [.ogg] audio"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:94 ../../include/conversation.php:724
|
||||
msgid "Set your location"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:95 ../../include/conversation.php:725
|
||||
msgid "Clear browser location"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:97 ../../include/conversation.php:728
|
||||
msgid "Permission settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:103 ../../include/conversation.php:734
|
||||
msgid "CC: email addresses"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/editpost.php:105 ../../include/conversation.php:736
|
||||
msgid "Example: bob@example.com, mary@example.com"
|
||||
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:42
|
||||
#, php-format
|
||||
msgid "%s : Message delivery failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/invite.php:46
|
||||
#, php-format
|
||||
msgid "%d message sent."
|
||||
msgid_plural "%d messages sent."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../../mod/invite.php:61
|
||||
msgid "Send invitations"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/invite.php:62
|
||||
msgid "Enter email addresses, one per line:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/invite.php:63 ../../mod/message.php:185 ../../mod/message.php:319
|
||||
msgid "Your message:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/invite.php:64
|
||||
#, php-format
|
||||
msgid "Please join my social network on %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/invite.php:65
|
||||
msgid "To accept this invitation, please visit:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/invite.php:66
|
||||
msgid ""
|
||||
"Once you have registered, please connect with me via my profile page at:"
|
||||
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:90 ../../mod/dfrn_request.php:406
|
||||
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/crepair.php:68
|
||||
#: ../../mod/dfrn_confirm.php:114
|
||||
msgid "Contact not found."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:228 ../../mod/contacts.php:363
|
||||
msgid "Mutual Friendship"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:232 ../../mod/contacts.php:367
|
||||
msgid "is a fan of yours"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:237 ../../mod/contacts.php:371
|
||||
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 <em>reputation</em> 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 "Repair contact URL settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:276
|
||||
msgid "Repair contact URL settings (WARNING: Advanced)"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:277
|
||||
msgid "View conversations"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:278
|
||||
msgid "Delete contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:280
|
||||
msgid "Last updated: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:281
|
||||
msgid "Update public posts: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:283
|
||||
msgid "Update now"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:286
|
||||
msgid "Unblock this contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:286
|
||||
msgid "Block this contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:287
|
||||
msgid "Unignore this contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:287
|
||||
msgid "Ignore this contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:290
|
||||
msgid "Currently blocked"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:291
|
||||
msgid "Currently ignored"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:322 ../../include/acl_selectors.php:141
|
||||
#: ../../include/acl_selectors.php:156 ../../include/nav.php:110
|
||||
msgid "Contacts"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:324
|
||||
msgid "Show Blocked Connections"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:324
|
||||
msgid "Hide Blocked Connections"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:326 ../../mod/directory.php:44
|
||||
msgid "Finding: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:327 ../../mod/directory.php:46
|
||||
msgid "Find"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:387 ../../mod/viewcontacts.php:52
|
||||
msgid "Visit $username's profile"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/contacts.php:388 ../../include/conversation.php:587
|
||||
msgid "Edit contact"
|
||||
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:91
|
||||
msgid "That doesn't appear to be your full (First Last) name."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:95
|
||||
msgid "Your email domain is not among those allowed on this site."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:98
|
||||
msgid "Not a valid email address."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:104
|
||||
msgid "Cannot use that email."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:109
|
||||
msgid ""
|
||||
"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
|
||||
"must also begin with a letter."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:115 ../../mod/register.php:215
|
||||
msgid "Nickname is already registered. Please choose another."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:134
|
||||
msgid "SERIOUS ERROR: Generation of security keys failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:201
|
||||
msgid "An error occurred during registration. Please try again."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:237
|
||||
msgid "An error occurred creating your default profile. Please try again."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:339
|
||||
msgid ""
|
||||
"Registration successful. Please check your email for further instructions."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:343
|
||||
msgid "Failed to send email message. Here is the message that failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:348
|
||||
msgid "Your registration can not be processed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:371
|
||||
#, php-format
|
||||
msgid "Registration request at %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:377
|
||||
msgid "Your registration is pending approval by the site owner."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:425
|
||||
msgid ""
|
||||
"You may (optionally) fill in this form via OpenID by supplying your OpenID "
|
||||
"and clicking 'Register'."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:426
|
||||
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:427
|
||||
msgid "Your OpenID (optional): "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:441
|
||||
msgid "Include your profile in member directory?"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:457
|
||||
msgid "Registration"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:465
|
||||
msgid "Your Full Name (e.g. Joe Smith): "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:466
|
||||
msgid "Your Email Address: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:467
|
||||
msgid ""
|
||||
"Choose a profile nickname. This must begin with a text character. Your "
|
||||
"profile address on this site will then be '<strong>nickname@$sitename</"
|
||||
"strong>'."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/register.php:468
|
||||
msgid "Choose a nickname: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/oexchange.php:27
|
||||
msgid "Post successful."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/help.php:27
|
||||
msgid "Help:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/help.php:31 ../../include/nav.php:64
|
||||
msgid "Help"
|
||||
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:64
|
||||
#, php-format
|
||||
msgid "%d member"
|
||||
msgid_plural "%d members"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../../mod/network.php:65
|
||||
#, php-format
|
||||
msgid "Warning: This group contains %s from an insecure network."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/network.php:66
|
||||
msgid "Private messages to this group are at risk of public disclosure."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/network.php:126
|
||||
msgid "No such group"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/network.php:137
|
||||
msgid "Group is empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/network.php:141
|
||||
msgid "Group: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/network.php:151
|
||||
msgid "Contact: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/network.php:153
|
||||
msgid "Private messages to this person are at risk of public disclosure."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/network.php:158
|
||||
msgid "Invalid contact."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profperm.php:25 ../../mod/profperm.php:46
|
||||
msgid "Invalid profile identifier."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profperm.php:92
|
||||
msgid "Profile Visibility Editor"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profperm.php:96 ../../mod/group.php:156
|
||||
msgid "Click on a contact to add or remove."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profperm.php:105
|
||||
msgid "Visible To"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/profperm.php:116
|
||||
msgid "All Contacts (with secure profile access)"
|
||||
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/crepair.php:42
|
||||
msgid "Contact settings applied."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:44
|
||||
msgid "Contact update failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:74
|
||||
msgid "Repair Contact Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:76
|
||||
msgid ""
|
||||
"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect "
|
||||
"information your communications with this contact will stop working."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:77
|
||||
msgid ""
|
||||
"Please use your browser 'Back' button <strong>now</strong> if you are "
|
||||
"uncertain what to do on this page."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:85
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:86
|
||||
msgid "Account Nickname"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:87
|
||||
msgid "Account URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:88
|
||||
msgid "Friend Request URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:89
|
||||
msgid "Friend Confirm URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:90
|
||||
msgid "Notification Endpoint URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/crepair.php:91
|
||||
msgid "Poll/Feed URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:96
|
||||
msgid "This introduction has already been accepted."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:351
|
||||
msgid "Profile location is not valid or does not contain profile information."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356
|
||||
msgid "Warning: profile location has no identifiable owner name."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:358
|
||||
msgid "Warning: profile location has no profile photo."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:130 ../../mod/dfrn_request.php:361
|
||||
#, php-format
|
||||
msgid "%d required parameter was not found at the given location"
|
||||
msgid_plural "%d required parameters were not found at the given location"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:168
|
||||
msgid "Introduction complete."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:192
|
||||
msgid "Unrecoverable protocol error."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:220
|
||||
msgid "Profile unavailable."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:245
|
||||
#, php-format
|
||||
msgid "%s has received too many connection requests today."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:246
|
||||
msgid "Spam protection measures have been invoked."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:247
|
||||
msgid "Friends are advised to please try again in 24 hours."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:277
|
||||
msgid "Invalid locator"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:296
|
||||
msgid "Unable to resolve your name at the provided location."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:309
|
||||
msgid "You have already introduced yourself here."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:313
|
||||
#, php-format
|
||||
msgid "Apparently you are already friends with %s."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:334
|
||||
msgid "Invalid profile URL."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:427
|
||||
msgid "Your introduction has been sent."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:481
|
||||
msgid "Please login to confirm introduction."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:495
|
||||
msgid ""
|
||||
"Incorrect identity currently logged in. Please login to <strong>this</"
|
||||
"strong> profile."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:507
|
||||
#, php-format
|
||||
msgid "Welcome home %s."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:508
|
||||
#, php-format
|
||||
msgid "Please confirm your introduction/connection request to %s."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:509
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:542 ../../include/items.php:1426
|
||||
msgid "[Name Withheld]"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:549
|
||||
msgid "Introduction received at "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:630
|
||||
msgid "Friend/Connection Request"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:631
|
||||
msgid ""
|
||||
"Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, "
|
||||
"testuser@identi.ca"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:632
|
||||
msgid "Please answer the following:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:633
|
||||
msgid "Does $name know you?"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:636
|
||||
msgid "Add a personal note:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:637
|
||||
msgid ""
|
||||
"Please enter your 'Identity Address' from one of the following supported "
|
||||
"social networks:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:638
|
||||
msgid "Friendika"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:639
|
||||
msgid "StatusNet/Federated Social Web"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:640
|
||||
msgid "Private (secure) network"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:641
|
||||
msgid "Public (insecure) network"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:642
|
||||
msgid "Your Identity Address:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:643
|
||||
msgid "Submit Request"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_request.php:644 ../../mod/tagrm.php:11
|
||||
#: ../../mod/tagrm.php:94 ../../addon/js_upload/js_upload.php:41
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:745
|
||||
#: ../../include/conversation.php:20
|
||||
msgid "status"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:749
|
||||
#: ../../include/conversation.php:25
|
||||
#, php-format
|
||||
msgid "%1$s likes %2$s's %3$s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/like.php:129 ../../include/conversation.php:28
|
||||
#, php-format
|
||||
msgid "%1$s doesn't like %2$s's %3$s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:27
|
||||
msgid "Password reset request issued. Check your email."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:38
|
||||
#, php-format
|
||||
msgid "Password reset requested at %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:60
|
||||
msgid ""
|
||||
"Request could not be verified. (You may have previously submitted it.) "
|
||||
"Password reset failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:79
|
||||
msgid "Your password has been reset as requested."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:80
|
||||
msgid "Your new password is"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:81
|
||||
msgid "Save or copy your new password - and then"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:82
|
||||
msgid "click here to login"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:83
|
||||
msgid ""
|
||||
"Your password may be changed from the <em>Settings</em> page after "
|
||||
"successful login."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:114
|
||||
msgid "Forgot your Password?"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:115
|
||||
msgid ""
|
||||
"Enter your email address and submit to have your password reset. Then check "
|
||||
"your email for further instructions."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:116
|
||||
msgid "Nickname or Email: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/lostpass.php:117
|
||||
msgid "Reset"
|
||||
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:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/apps.php:6
|
||||
msgid "Applications"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/directory.php:38
|
||||
msgid "Global Directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/directory.php:45
|
||||
msgid "Site Directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/directory.php:100
|
||||
msgid "Gender: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/directory.php:126
|
||||
msgid "No entries (some entries may be hidden)."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/friendika.php:12
|
||||
msgid "This is Friendika version"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/friendika.php:13
|
||||
msgid "running at web location"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/friendika.php:15
|
||||
msgid ""
|
||||
"Shared content within the Friendika network is provided under the <a href="
|
||||
"\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution "
|
||||
"3.0 license</a>"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/friendika.php:17
|
||||
msgid ""
|
||||
"Please visit <a href=\"http://project.friendika.com\">Project.Friendika.com</"
|
||||
"a> to learn more about the Friendika project."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/friendika.php:19
|
||||
msgid "Bug reports and issues: please visit"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/friendika.php:20
|
||||
msgid ""
|
||||
"Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - "
|
||||
"dot com"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/friendika.php:25
|
||||
msgid "Installed plugins/addons/apps"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/friendika.php:33
|
||||
msgid "No installed plugins/addons/apps"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:37
|
||||
msgid "Unable to locate original post."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:128
|
||||
msgid "Empty post discarded."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:478
|
||||
#, php-format
|
||||
msgid "%s commented on your item at %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:504
|
||||
#, php-format
|
||||
msgid "%s posted on your profile wall at %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:534
|
||||
msgid "System error. Post not saved."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:553
|
||||
#, php-format
|
||||
msgid ""
|
||||
"This message was sent to you by %s, a member of the Friendika social network."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:555
|
||||
#, php-format
|
||||
msgid "You may visit them online at %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:556
|
||||
msgid ""
|
||||
"Please contact the sender by replying to this post if you do not wish to "
|
||||
"receive these messages."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/item.php:558
|
||||
#, php-format
|
||||
msgid "%s posted an update."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/tagrm.php:41
|
||||
msgid "Tag removed"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/tagrm.php:79
|
||||
msgid "Remove Item Tag"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/tagrm.php:81
|
||||
msgid "Select a tag to remove: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/tagrm.php:93
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:18
|
||||
msgid "No recipient selected."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:23
|
||||
msgid "[no subject]"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:34
|
||||
msgid "Unable to locate contact information."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:102
|
||||
msgid "Message sent."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:105
|
||||
msgid "Message could not be sent."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:125 ../../include/nav.php:102
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:126
|
||||
msgid "Inbox"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:127
|
||||
msgid "Outbox"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:128
|
||||
msgid "New Message"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:142
|
||||
msgid "Message deleted."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:158
|
||||
msgid "Conversation removed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:172 ../../include/conversation.php:674
|
||||
msgid "Please enter a link URL:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:180
|
||||
msgid "Send Private Message"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:181 ../../mod/message.php:315
|
||||
msgid "To:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:182 ../../mod/message.php:316
|
||||
msgid "Subject:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:224
|
||||
msgid "No messages."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:237
|
||||
msgid "Delete conversation"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:240
|
||||
msgid "D, d M Y - g:i A"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:267
|
||||
msgid "Message not available."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:304
|
||||
msgid "Delete message"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/message.php:314
|
||||
msgid "Send Reply"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:231
|
||||
msgid "Response from remote site was not understood."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:240
|
||||
msgid "Unexpected response from remote site: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:248
|
||||
msgid "Confirmation completed successfully."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:250 ../../mod/dfrn_confirm.php:264
|
||||
#: ../../mod/dfrn_confirm.php:271
|
||||
msgid "Remote site reported: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:262
|
||||
msgid "Temporary failure. Please wait and try again."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:269
|
||||
msgid "Introduction failed or was revoked."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:387
|
||||
msgid "Unable to set contact photo."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:430 ../../include/conversation.php:61
|
||||
#, php-format
|
||||
msgid "%1$s is now friends with %2$s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:501
|
||||
#, php-format
|
||||
msgid "No user record found for '%s' "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:511
|
||||
msgid "Our site encryption key is apparently messed up."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:522
|
||||
msgid "Empty site URL was provided or URL could not be decrypted by us."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:534
|
||||
msgid "Contact record was not found for you on our site."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:562
|
||||
msgid ""
|
||||
"The ID provided by your system is a duplicate on our system. It should work "
|
||||
"if you try again."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:573
|
||||
msgid "Unable to set your contact credentials on our system."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:626
|
||||
msgid "Unable to update your contact profile details on our system"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:655
|
||||
#, php-format
|
||||
msgid "Connection accepted at %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/openid.php:62 ../../mod/openid.php:118 ../../include/auth.php:114
|
||||
#: ../../include/auth.php:139 ../../include/auth.php:192
|
||||
msgid "Login failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/openid.php:78 ../../include/auth.php:208
|
||||
msgid "Welcome "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/openid.php:79 ../../include/auth.php:209
|
||||
msgid "Please upload a profile photo."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/openid.php:82 ../../include/auth.php:212
|
||||
msgid "Welcome back "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/dfrn_poll.php:84 ../../mod/dfrn_poll.php:510
|
||||
#, php-format
|
||||
msgid "%s welcomes %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/viewcontacts.php:40
|
||||
msgid "No contacts."
|
||||
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:115
|
||||
msgid "Group not found."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/group.php:56
|
||||
msgid "Group name changed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/group.php:74
|
||||
msgid "Create a group of contacts/friends."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/group.php:75 ../../mod/group.php:158
|
||||
msgid "Group Name: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/group.php:90
|
||||
msgid "Group removed."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/group.php:92
|
||||
msgid "Unable to remove group."
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/group.php:157
|
||||
msgid "Group Editor"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/group.php:169
|
||||
msgid "Members"
|
||||
msgstr ""
|
||||
|
||||
#: ../../mod/group.php:183
|
||||
msgid "All Contacts"
|
||||
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 <strong>public</strong> 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 <strong>public</strong> 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.<br />Before you register your own OAuth key "
|
||||
"pair ask the administrator if there is already a key pair for this Friendika "
|
||||
"installation at your favorited StatusNet installation."
|
||||
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 <strong>public</strong> 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 <strong>public</strong> 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
|
||||
msgid "Three Dimensional Tic-Tac-Toe"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:47
|
||||
msgid "3D Tic-Tac-Toe"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:52
|
||||
msgid "New game"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:53
|
||||
msgid "New game with handicap"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:54
|
||||
msgid ""
|
||||
"Three dimensional tic-tac-toe is just like the traditional game except that "
|
||||
"it is played on multiple levels simultaneously. "
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:55
|
||||
msgid ""
|
||||
"In this case there are three levels. You win by getting three in a row on "
|
||||
"any level, as well as up, down, and diagonally across the different levels."
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:57
|
||||
msgid ""
|
||||
"The handicap game disables the center position on the middle level because "
|
||||
"the player claiming this square often has an unfair advantage."
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:176
|
||||
msgid "You go first..."
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:181
|
||||
msgid "I'm going first this time..."
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:187
|
||||
msgid "You won!"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:193 ../../addon/tictac/tictac.php:218
|
||||
msgid "\"Cat\" game!"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/tictac/tictac.php:216
|
||||
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:252
|
||||
msgid "Facebook disabled"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:257
|
||||
msgid "Updating contacts"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:266
|
||||
msgid "Facebook API key is missing."
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:273
|
||||
msgid "Facebook Connect"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:279
|
||||
msgid "Install Facebook connector for this account."
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:286
|
||||
msgid "Remove Facebook connector"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:292
|
||||
msgid "Post to Facebook by default"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:354
|
||||
msgid "Facebook"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:355
|
||||
msgid "Facebook Connector Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:369
|
||||
msgid "Post to Facebook"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:436
|
||||
msgid ""
|
||||
"Post to Facebook cancelled because of multi-network access permission "
|
||||
"conflict."
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:491
|
||||
msgid "Image: "
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/facebook/facebook.php:551
|
||||
msgid "View on Friendika"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/randplace/randplace.php:171
|
||||
msgid "Randplace Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/randplace/randplace.php:173
|
||||
msgid "Enable Randplace Plugin"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:39
|
||||
msgid "Upload a file"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:40
|
||||
msgid "Drop files here to upload"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:42
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:288
|
||||
msgid "No files were uploaded."
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:294
|
||||
msgid "Uploaded file is empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:299
|
||||
msgid "Uploaded file is too large"
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:317
|
||||
msgid "File has an invalid extension, it should be one of "
|
||||
msgstr ""
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:328
|
||||
msgid "Upload was cancelled, or server error encountered"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/notifier.php:414
|
||||
msgid "(no subject)"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:32
|
||||
msgid "Unknown | Not categorised"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:33
|
||||
msgid "Block immediately"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:34
|
||||
msgid "Shady, spammer, self-marketer"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:35
|
||||
msgid "Known to me, but no opinion"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:36
|
||||
msgid "OK, probably harmless"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:37
|
||||
msgid "Reputable, has my trust"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:55
|
||||
msgid "Frequently"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:56
|
||||
msgid "Hourly"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:57
|
||||
msgid "Twice daily"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:58
|
||||
msgid "Daily"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:59
|
||||
msgid "Weekly"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/contact_selectors.php:60
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Male"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Female"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Currently Male"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Currently Female"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Mostly Male"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Mostly Female"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Transgender"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Intersex"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Transsexual"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Hermaphrodite"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Neuter"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Non-specific"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Other"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Undecided"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Males"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Females"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Gay"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Lesbian"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "No Preference"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Bisexual"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Autosexual"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Abstinent"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Virgin"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Deviant"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Fetish"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Oodles"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Nonsexual"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Single"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Lonely"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Available"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Dating"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Unfaithful"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Sex Addict"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Friends"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Friends/Benefits"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Casual"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Engaged"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Married"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Partners"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Cohabiting"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Happy"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Not Looking"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Swinger"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Betrayed"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Separated"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Unstable"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Divorced"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Widowed"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Uncertain"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Complicated"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Don't care"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Ask me"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/acl_selectors.php:133
|
||||
msgid "Visible To:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/acl_selectors.php:137 ../../include/acl_selectors.php:152
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/acl_selectors.php:148
|
||||
msgid "Except For:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/auth.php:27
|
||||
msgid "Logged out."
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/bbcode.php:83
|
||||
msgid "Image/photo"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:44 ../../include/datetime.php:46
|
||||
msgid "Miscellaneous"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:148
|
||||
msgid "less than a second ago"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:151
|
||||
msgid "year"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:151
|
||||
msgid "years"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:152
|
||||
msgid "month"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:152
|
||||
msgid "months"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:153
|
||||
msgid "week"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:153
|
||||
msgid "weeks"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:154
|
||||
msgid "day"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:155
|
||||
msgid "hour"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:155
|
||||
msgid "hours"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:156
|
||||
msgid "minute"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:156
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:157
|
||||
msgid "second"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:157
|
||||
msgid "seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/datetime.php:164
|
||||
msgid " ago"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:36 ../../include/items.php:1072
|
||||
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 "<span class=\"heart\">♥</span> Status:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:127
|
||||
msgid "Religion:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:138
|
||||
msgid "About:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:150
|
||||
msgid "Hobbies/Interests:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:162
|
||||
msgid "Contact information and Social Networks:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:174
|
||||
msgid "Musical interests:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:186
|
||||
msgid "Books, literature:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:198
|
||||
msgid "Television:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:210
|
||||
msgid "Film/dance/culture/entertainment:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:222
|
||||
msgid "Love/Romance:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:234
|
||||
msgid "Work/employment:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/profile_advanced.php:246
|
||||
msgid "School/education:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/nav.php:55 ../../include/nav.php:93
|
||||
msgid "Home"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/nav.php:68
|
||||
msgid "Apps"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/nav.php:81
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/nav.php:91
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/nav.php:99
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/nav.php:105
|
||||
msgid "Manage"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/nav.php:108
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:184 ../../include/conversation.php:441
|
||||
#: ../../include/conversation.php:442
|
||||
#, php-format
|
||||
msgid "View %s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:200
|
||||
msgid "View in context"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:271
|
||||
msgid "See more posts like this"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:296
|
||||
#, php-format
|
||||
msgid "See all %d comments"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:443
|
||||
msgid "to"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:444
|
||||
msgid "Wall-to-Wall"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:445
|
||||
msgid "via Wall-To-Wall:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:583
|
||||
msgid "View status"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:584
|
||||
msgid "View profile"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:585
|
||||
msgid "View photos"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:586
|
||||
msgid "View recent"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:588
|
||||
msgid "Send PM"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:638
|
||||
#, php-format
|
||||
msgid "%s likes this."
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:638
|
||||
#, php-format
|
||||
msgid "%s doesn't like this."
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:642
|
||||
#, php-format
|
||||
msgid "<span %1$s>%2$d people</span> like this."
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:644
|
||||
#, php-format
|
||||
msgid "<span %1$s>%2$d people</span> don't like this."
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:650
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:653
|
||||
#, php-format
|
||||
msgid ", and %d other people"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:654
|
||||
#, php-format
|
||||
msgid "%s like this."
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:654
|
||||
#, php-format
|
||||
msgid "%s don't like this."
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:675
|
||||
msgid "Please enter a YouTube link:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:676
|
||||
msgid "Please enter a video(.ogg) link/URL:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:677
|
||||
msgid "Please enter an audio(.ogg) link/URL:"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:678
|
||||
msgid "Where are you right now?"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:679
|
||||
msgid "Enter a title for this item"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/conversation.php:726
|
||||
msgid "Set title"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/dba.php:31
|
||||
#, php-format
|
||||
msgid "Cannot locate DNS info for database server '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/items.php:1433
|
||||
msgid "You have a new follower at "
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/group.php:146
|
||||
msgid "Create a new group"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/group.php:147
|
||||
msgid "Everybody"
|
||||
msgstr ""
|
||||
|
||||
#: ../../include/oembed.php:57
|
||||
msgid "Embedding disabled"
|
||||
msgstr ""
|
||||
71
util/php2po.php
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
if(! class_exists('App')) {
|
||||
class TmpA {
|
||||
public $strings = Array();
|
||||
}
|
||||
$a = new TmpA();
|
||||
}
|
||||
|
||||
if ($argc!=2) {
|
||||
print "Usage: ".$argv[0]." <strings.php>\n\n";
|
||||
return;
|
||||
}
|
||||
|
||||
$phpfile = $argv[1];
|
||||
$pofile = dirname($phpfile)."/messages.po";
|
||||
|
||||
if (!file_exists($phpfile)){
|
||||
print "Unable to find '$phpfile'\n";
|
||||
return;
|
||||
}
|
||||
|
||||
include_once($phpfile);
|
||||
|
||||
print "Out to '$pofile'\n";
|
||||
|
||||
$out = "";
|
||||
$infile = file($pofile);
|
||||
$k="";
|
||||
$ink = False;
|
||||
foreach ($infile as $l) {
|
||||
|
||||
if ($k!="" && substr($l,0,7)=="msgstr "){
|
||||
$ink = False;
|
||||
$v = '""';
|
||||
//echo "DBG: k:'$k'\n";
|
||||
if (isset($a->strings[$k])) {
|
||||
$v= '"'.$a->strings[$k].'"';
|
||||
//echo "DBG\n";
|
||||
//var_dump($k, $v, $a->strings[$k], $v);
|
||||
//echo "/DBG\n";
|
||||
|
||||
}
|
||||
//echo "DBG: v:'$v'\n";
|
||||
$l = "msgstr ".$v."\n";
|
||||
}
|
||||
|
||||
if (substr($l,0,6)=="msgid_" || substr($l,0,7)=="msgstr[" )$ink = False;;
|
||||
|
||||
if ($ink) {
|
||||
$k .= trim($l,"\"\r\n");
|
||||
$k = str_replace('\"','"',$k);
|
||||
}
|
||||
|
||||
if (substr($l,0,6)=="msgid "){
|
||||
$arr=False;
|
||||
$k = str_replace("msgid ","",$l);
|
||||
if ($k != '""' ) {
|
||||
$k = trim($k,"\"\r\n");
|
||||
$k = str_replace('\"','"',$k);
|
||||
} else {
|
||||
$k = "";
|
||||
}
|
||||
$ink = True;
|
||||
}
|
||||
|
||||
$out .= $l;
|
||||
}
|
||||
//echo $out;
|
||||
file_put_contents($pofile, $out);
|
||||
?>
|
||||
115
util/po2php.php
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
<?php
|
||||
|
||||
|
||||
function po2php_run($argv, $argc) {
|
||||
|
||||
if ($argc!=2) {
|
||||
print "Usage: ".$argv[0]." <file.po>\n\n";
|
||||
return;
|
||||
}
|
||||
|
||||
$pofile = $argv[1];
|
||||
$outfile = dirname($pofile)."/strings.php";
|
||||
|
||||
if (!file_exists($pofile)){
|
||||
print "Unable to find '$pofile'\n";
|
||||
return;
|
||||
}
|
||||
|
||||
print "Out to '$outfile'\n";
|
||||
|
||||
$out="<?php\n\n";
|
||||
|
||||
$infile = file($pofile);
|
||||
$k="";
|
||||
$v="";
|
||||
$arr = False;
|
||||
$ink = False;
|
||||
$inv = False;
|
||||
$escape_s_exp = '|[^\\\\]\$[a-z]|';
|
||||
function escape_s($match){
|
||||
return str_replace('$','\$',$match[0]);
|
||||
}
|
||||
foreach ($infile as $l) {
|
||||
$len = strlen($l);
|
||||
if ($l[0]=="#") $l="";
|
||||
if (substr($l,0,15)=='"Plural-Forms: '){
|
||||
$match=Array();
|
||||
preg_match("|nplurals=([0-9]*); *plural=(.*)[;\\\\]|", $l, $match);
|
||||
$cond = str_replace('n','$n',$match[2]);
|
||||
$out .= 'function string_plural_select($n){'."\n";
|
||||
$out .= ' return '.$cond.';'."\n";
|
||||
$out .= '}'."\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if ($k!="" && substr($l,0,7)=="msgstr "){
|
||||
if ($ink) { $ink = False; $out .= '$a->strings["'.$k.'"] = '; }
|
||||
if ($inv) { $inv = False; $out .= '"'.$v.'"'; }
|
||||
|
||||
$v = substr($l,8,$len-10);
|
||||
$v = preg_replace_callback($escape_s_exp,'escape_s',$v);
|
||||
$inv = True;
|
||||
//$out .= $v;
|
||||
}
|
||||
if ($k!="" && substr($l,0,7)=="msgstr["){
|
||||
if ($ink) { $ink = False; $out .= '$a->strings["'.$k.'"] = '; }
|
||||
if ($inv) { $inv = False; $out .= '"'.$v.'"'; }
|
||||
|
||||
if (!$arr) {
|
||||
$arr=True;
|
||||
$out .= "array(\n";
|
||||
}
|
||||
$match=Array();
|
||||
preg_match("|\[([0-9]*)\] (.*)|", $l, $match);
|
||||
$out .= "\t".
|
||||
preg_replace_callback($escape_s_exp,'escape_s',$match[1])
|
||||
." => "
|
||||
.preg_replace_callback($escape_s_exp,'escape_s',$match[2]) .",\n";
|
||||
}
|
||||
|
||||
if (substr($l,0,6)=="msgid_") { $ink = False; $out .= '$a->strings["'.$k.'"] = '; };
|
||||
|
||||
|
||||
if ($ink) {
|
||||
$k .= trim($l,"\"\r\n");
|
||||
$k = preg_replace_callback($escape_s_exp,'escape_s',$k);
|
||||
//$out .= '$a->strings['.$k.'] = ';
|
||||
}
|
||||
|
||||
if (substr($l,0,6)=="msgid "){
|
||||
if ($inv) { $inv = False; $out .= '"'.$v.'"'; }
|
||||
if ($k!="") $out .= $arr?");\n":";\n";
|
||||
$arr=False;
|
||||
$k = str_replace("msgid ","",$l);
|
||||
if ($k != '""' ) {
|
||||
$k = trim($k,"\"\r\n");
|
||||
} else {
|
||||
$k = "";
|
||||
}
|
||||
|
||||
$k = preg_replace_callback($escape_s_exp,'escape_s',$k);
|
||||
$ink = True;
|
||||
}
|
||||
|
||||
if ($inv && substr($l,0,6)!="msgstr") {
|
||||
$v .= trim($l,"\"\r\n");
|
||||
$v = preg_replace_callback($escape_s_exp,'escape_s',$v);
|
||||
//$out .= '$a->strings['.$k.'] = ';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if ($inv) { $inv = False; $out .= '"'.$v.'"'; }
|
||||
if ($k!="") $out .= $arr?");\n":";\n";
|
||||
|
||||
file_put_contents($outfile, $out);
|
||||
|
||||
}
|
||||
|
||||
if (array_search(__file__,get_included_files())===0){
|
||||
po2php_run($argv,$argc);
|
||||
}
|
||||
37
util/run_xgettext.sh
Executable file
|
|
@ -0,0 +1,37 @@
|
|||
#!/bin/bash
|
||||
|
||||
FULLPATH=$(dirname $(readlink -f "$0"))
|
||||
cd "$FULLPATH/../view/en/"
|
||||
|
||||
F9KVERSION=$(sed -n "s/.*'FRIENDIKA_VERSION'.*'\([0-9.]*\)'.*/\1/p" ../../boot.php);
|
||||
|
||||
echo "Friendika version $F9KVERSION"
|
||||
|
||||
OPTS=
|
||||
OUTFILE="$FULLPATH/messages.po"
|
||||
if [ "" != "$1" ]
|
||||
then
|
||||
OUTFILE="$(readlink -f ${FULLPATH}/$1)"
|
||||
if [ -e "$OUTFILE" ]
|
||||
then
|
||||
echo "join extracted strings"
|
||||
OPTS="-j"
|
||||
fi
|
||||
fi
|
||||
|
||||
KEYWORDS="-k -kt -ktt:1,2"
|
||||
|
||||
echo "extract strings to $OUTFILE.."
|
||||
find ../../ -name "*.php" | xargs xgettext $KEYWORDS $OPTS -o "$OUTFILE" --from-code=UTF-8
|
||||
|
||||
echo "setup base info.."
|
||||
sed -i "s/SOME DESCRIPTIVE TITLE./FRIENDIKA Distributed Social Network/g" "$OUTFILE"
|
||||
sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2010, 2011 Mike Macgirvin/g" "$OUTFILE"
|
||||
sed -i "s/FIRST AUTHOR <EMAIL@ADDRESS>, YEAR./Mike Macgirvin, 2010/g" "$OUTFILE"
|
||||
sed -i "s/PACKAGE VERSION/$F9KVERSION/g" "$OUTFILE"
|
||||
sed -i "s/PACKAGE/Friendika/g" "$OUTFILE"
|
||||
sed -i "s/CHARSET/UTF-8/g" "$OUTFILE"
|
||||
sed -i "s/^\"Plural-Forms/#\"Plural-Forms/g" "$OUTFILE"
|
||||
|
||||
|
||||
echo "done."
|
||||
|
|
@ -99,7 +99,7 @@ if (isset($_GET['lang'])){
|
|||
$n2 = count($strings[$lang]);
|
||||
|
||||
echo "<pre>";
|
||||
echo "Tranlsate en to $lang<br>";
|
||||
echo "Translate en to $lang<br>";
|
||||
//echo "Translated $n2 over $n1 strings<br>";
|
||||
echo "</pre><hr/>";
|
||||
|
||||
|
|
|
|||
444
util/strings.php
|
|
@ -1,8 +1,15 @@
|
|||
<?php
|
||||
|
||||
function string_plural_select($n){
|
||||
return ($n != 1);
|
||||
}
|
||||
|
||||
$a->strings['Not Found'] = 'Not Found';
|
||||
$a->strings['Page not found.' ] = 'Page not found.' ;
|
||||
$a->strings['Permission denied'] = 'Permission denied';
|
||||
$a->strings['Permission denied.'] = 'Permission denied.';
|
||||
$a->strings['Delete this item?'] = 'Delete this item?';
|
||||
$a->strings['Comment'] = 'Comment';
|
||||
$a->strings['Create a New Account'] = 'Create a New Account';
|
||||
$a->strings['Register'] = 'Register';
|
||||
$a->strings['Nickname or Email address: '] = 'Nickname or Email address: ';
|
||||
|
|
@ -17,18 +24,7 @@ $a->strings['prev'] = 'prev';
|
|||
$a->strings['first'] = 'first';
|
||||
$a->strings['last'] = 'last';
|
||||
$a->strings['next'] = 'next';
|
||||
$a->strings[' likes this.'] = ' likes this.';
|
||||
$a->strings[' doesn\'t like this.'] = ' doesn\'t like this.';
|
||||
$a->strings['people'] = 'people';
|
||||
$a->strings['like this.'] = 'like this.';
|
||||
$a->strings['don\'t like this.'] = 'don\'t like this.';
|
||||
$a->strings['and'] = 'and';
|
||||
$a->strings[', and '] = ', and ';
|
||||
$a->strings[' other people'] = ' other people';
|
||||
$a->strings[' like this.'] = ' like this.';
|
||||
$a->strings[' don\'t like this.'] = ' don\'t like this.';
|
||||
$a->strings['No contacts'] = 'No contacts';
|
||||
$a->strings['Contacts'] = 'Contacts';
|
||||
$a->strings['View Contacts'] = 'View Contacts';
|
||||
$a->strings['Search'] = 'Search';
|
||||
$a->strings['No profile'] = 'No profile';
|
||||
|
|
@ -57,36 +53,19 @@ $a->strings['September'] = 'September';
|
|||
$a->strings['October'] = 'October';
|
||||
$a->strings['November'] = 'November';
|
||||
$a->strings['December'] = 'December';
|
||||
$a->strings['g A l F d'] = 'g A l F d';
|
||||
$a->strings['Birthday Reminders'] = 'Birthday Reminders';
|
||||
$a->strings['Birthdays this week:'] = 'Birthdays this week:';
|
||||
$a->strings["\x28Adjusted for local time\x29"] = "\x28Adjusted for local time\x29";
|
||||
$a->strings['[today]'] = '[today]';
|
||||
$a->strings['link to source'] = 'link to source';
|
||||
$a->strings['No recipient selected.'] = 'No recipient selected.';
|
||||
$a->strings['[no subject]'] = '[no subject]';
|
||||
$a->strings['Unable to locate contact information.'] = 'Unable to locate contact information.';
|
||||
$a->strings['Wall Photos'] = 'Wall Photos';
|
||||
$a->strings['Message sent.'] = 'Message sent.';
|
||||
$a->strings['Message could not be sent.'] = 'Message could not be sent.';
|
||||
$a->strings['Messages'] = 'Messages';
|
||||
$a->strings['Inbox'] = 'Inbox';
|
||||
$a->strings['Outbox'] = 'Outbox';
|
||||
$a->strings['New Message'] = 'New Message';
|
||||
$a->strings['Message deleted.'] = 'Message deleted.';
|
||||
$a->strings['Conversation removed.'] = 'Conversation removed.';
|
||||
$a->strings['Send Private Message'] = 'Send Private Message';
|
||||
$a->strings['To:'] = 'To:';
|
||||
$a->strings['Subject:'] = 'Subject:';
|
||||
$a->strings['Your message:'] = 'Your message:';
|
||||
$a->strings['Upload photo'] = 'Upload photo';
|
||||
$a->strings['Insert web link'] = 'Insert web link';
|
||||
$a->strings['Please wait'] = 'Please wait';
|
||||
$a->strings['No messages.'] = 'No messages.';
|
||||
$a->strings['Delete conversation'] = 'Delete conversation';
|
||||
$a->strings['Message not available.'] = 'Message not available.';
|
||||
$a->strings['Delete message'] = 'Delete message';
|
||||
$a->strings['Send Reply'] = 'Send Reply';
|
||||
$a->strings['%d Contact'] = array(
|
||||
0 => '%d Contact',
|
||||
1 => '%d Contacts',
|
||||
);
|
||||
$a->strings['Applications'] = 'Applications';
|
||||
$a->strings["Invite Friends"] = "Invite Friends";
|
||||
$a->strings['Find People With Shared Interests'] = 'Find People With Shared Interests';
|
||||
$a->strings['Connect/Follow'] = 'Connect/Follow';
|
||||
$a->strings['Example: bob@example.com, http://example.com/barbara'] = 'Example: bob@example.com, http://example.com/barbara';
|
||||
$a->strings['Follow'] = 'Follow';
|
||||
|
|
@ -97,21 +76,36 @@ $a->strings['Failed to update contact record.'] = 'Failed to update contact reco
|
|||
$a->strings['Contact has been '] = 'Contact has been ';
|
||||
$a->strings['blocked'] = 'blocked';
|
||||
$a->strings['unblocked'] = 'unblocked';
|
||||
$a->strings['ignored'] = 'ignored';
|
||||
$a->strings['unignored'] = 'unignored';
|
||||
$a->strings['Contact has been blocked'] = 'Contact has been blocked';
|
||||
$a->strings['Contact has been unblocked'] = 'Contact has been unblocked';
|
||||
$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';
|
||||
$a->strings['Privacy Unavailable'] = 'Privacy Unavailable';
|
||||
$a->strings['Private communications are not available for this contact.'] = 'Private communications are not available for this contact.';
|
||||
$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 <em>reputation</em> to guide them.'] = 'You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them.';
|
||||
$a->strings['Please take a moment to elaborate on this selection if you feel it could be helpful to others.'] = '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';
|
||||
$a->strings['Repair contact URL settings'] = 'Repair contact URL settings';
|
||||
$a->strings["Repair contact URL settings \x28WARNING: Advanced\x29"] = "Repair contact URL settings \x28WARNING: Advanced\x29";
|
||||
$a->strings['View conversations'] = 'View conversations';
|
||||
$a->strings['Delete contact'] = 'Delete contact';
|
||||
$a->strings['Last updated: '] = 'Last updated: ';
|
||||
$a->strings['Update public posts: '] = 'Update public posts: ';
|
||||
|
|
@ -122,13 +116,25 @@ $a->strings['Unignore this contact'] = 'Unignore this contact';
|
|||
$a->strings['Ignore this contact'] = 'Ignore this contact';
|
||||
$a->strings['Currently blocked'] = 'Currently blocked';
|
||||
$a->strings['Currently ignored'] = 'Currently ignored';
|
||||
$a->strings['Contacts'] = 'Contacts';
|
||||
$a->strings['Show Blocked Connections'] = 'Show Blocked Connections';
|
||||
$a->strings['Hide Blocked Connections'] = 'Hide Blocked Connections';
|
||||
$a->strings['Finding: '] = 'Finding: ';
|
||||
$a->strings['Find'] = 'Find';
|
||||
$a->strings['Visit '] = 'Visit ';
|
||||
$a->strings['\'s profile'] = '\'s profile';
|
||||
$a->strings['Visit $username\'s profile'] = 'Visit $username\'s profile';
|
||||
$a->strings['Edit contact'] = 'Edit contact';
|
||||
$a->strings['Contact settings applied.'] = 'Contact settings applied.';
|
||||
$a->strings['Contact update failed.'] = 'Contact update failed.';
|
||||
$a->strings['Repair Contact Settings'] = 'Repair Contact Settings';
|
||||
$a->strings['<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working.'] = '<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working.';
|
||||
$a->strings['Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.'] = 'Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.';
|
||||
$a->strings['Name'] = 'Name';
|
||||
$a->strings['Account Nickname'] = 'Account Nickname';
|
||||
$a->strings['Account URL'] = 'Account URL';
|
||||
$a->strings['Friend Request URL'] = 'Friend Request URL';
|
||||
$a->strings['Friend Confirm URL'] = 'Friend Confirm URL';
|
||||
$a->strings['Notification Endpoint URL'] = 'Notification Endpoint URL';
|
||||
$a->strings['Poll/Feed URL'] = 'Poll/Feed URL';
|
||||
$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: ';
|
||||
|
|
@ -137,95 +143,132 @@ $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['No user record found for '] = 'No user record found for ';
|
||||
$a->strings['%1$s is now friends with %2$s'] = '%1$s is now friends with %2$s';
|
||||
$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 "] = "Connection accepted at ";
|
||||
$a->strings["Connection accepted at %s"] = "Connection accepted at %s";
|
||||
$a->strings['Administrator'] = 'Administrator';
|
||||
$a->strings['noreply'] = 'noreply';
|
||||
$a->strings[' commented on an item at '] = ' commented on an item at ';
|
||||
$a->strings[" commented on an item at "] = " commented on an item at ";
|
||||
$a->strings[' welcomes '] = ' welcomes ';
|
||||
$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.";
|
||||
$a->strings['Profile location is not valid or does not contain profile information.'] = 'Profile location is not valid or does not contain profile information.';
|
||||
$a->strings['Warning: profile location has no identifiable owner name.'] = 'Warning: profile location has no identifiable owner name.';
|
||||
$a->strings['Warning: profile location has no profile photo.'] = 'Warning: profile location has no profile photo.';
|
||||
$a->strings[' required parameter'] = ' required parameter';
|
||||
$a->strings[" was "] = " was ";
|
||||
$a->strings["s were "] = "s were ";
|
||||
$a->strings["not found at the given location."] = "not found at the given location.";
|
||||
$a->strings["Introduction complete."] = "Introduction complete.";
|
||||
$a->strings['Unrecoverable protocol error.'] = 'Unrecoverable protocol error.';
|
||||
$a->strings['Profile unavailable.'] = 'Profile unavailable.';
|
||||
$a->strings[' has received too many connection requests today.'] = ' has received too many connection requests today.';
|
||||
$a->strings['%s has received too many connection requests today.'] = '%s has received too many connection requests today.';
|
||||
$a->strings['Spam protection measures have been invoked.'] = 'Spam protection measures have been invoked.';
|
||||
$a->strings['Friends are advised to please try again in 24 hours.'] = 'Friends are advised to please try again in 24 hours.';
|
||||
$a->strings["Invalid locator"] = "Invalid locator";
|
||||
$a->strings["Unable to resolve your name at the provided location."] = "Unable to resolve your name at the provided location.";
|
||||
$a->strings['You have already introduced yourself here.'] = 'You have already introduced yourself here.';
|
||||
$a->strings['Apparently you are already friends with .'] = 'Apparently you are already friends with .';
|
||||
$a->strings['Apparently you are already friends with %s.'] = 'Apparently you are already friends with %s.';
|
||||
$a->strings['Invalid profile URL.'] = 'Invalid profile URL.';
|
||||
$a->strings['Disallowed profile URL.'] = 'Disallowed profile URL.';
|
||||
$a->strings['Your introduction has been sent.'] = 'Your introduction has been sent.';
|
||||
$a->strings["Please login to confirm introduction."] = "Please login to confirm introduction.";
|
||||
$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Incorrect identity currently logged in. Please login to <strong>this</strong> profile.";
|
||||
$a->strings['Welcome home %s.'] = 'Welcome home %s.';
|
||||
$a->strings['Please confirm your introduction/connection request to %s.'] = 'Please confirm your introduction/connection request to %s.';
|
||||
$a->strings['Confirm'] = 'Confirm';
|
||||
$a->strings['[Name Withheld]'] = '[Name Withheld]';
|
||||
$a->strings["Introduction received at "] = "Introduction received at ";
|
||||
$a->strings['Public access denied.'] = 'Public access denied.';
|
||||
$a->strings['Friend/Connection Request'] = 'Friend/Connection Request';
|
||||
$a->strings['Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'] = 'Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca';
|
||||
$a->strings['Please answer the following:'] = 'Please answer the following:';
|
||||
$a->strings['Does $name know you?'] = 'Does $name know you?';
|
||||
$a->strings['Yes'] = 'Yes';
|
||||
$a->strings['No'] = 'No';
|
||||
$a->strings['Add a personal note:'] = 'Add a personal note:';
|
||||
$a->strings['Please enter your profile address from one of the following supported social networks:'] = 'Please enter your profile address from one of the following supported social networks:';
|
||||
$a->strings["Please enter your 'Identity Address' from one of the following supported social networks:"] = "Please enter your 'Identity Address' from one of the following supported social networks:";
|
||||
$a->strings['Friendika'] = 'Friendika';
|
||||
$a->strings['StatusNet/Federated Social Web'] = 'StatusNet/Federated Social Web';
|
||||
$a->strings["Private \x28secure\x29 network"] = "Private \x28secure\x29 network";
|
||||
$a->strings["Public \x28insecure\x29 network"] = "Public \x28insecure\x29 network";
|
||||
$a->strings['Your profile address:'] = 'Your profile address:';
|
||||
$a->strings['Your Identity Address:'] = 'Your Identity Address:';
|
||||
$a->strings['Submit Request'] = 'Submit Request';
|
||||
$a->strings['Cancel'] = 'Cancel';
|
||||
$a->strings["%d required parameter was not found at the given location"] = array(
|
||||
0 => "%d required parameter was not found at the given location",
|
||||
1 => "%d required parameters were not found at the given location",
|
||||
);
|
||||
$a->strings['Global Directory'] = 'Global Directory';
|
||||
$a->strings['Site Directory'] = 'Site Directory';
|
||||
$a->strings['Age: '] = 'Age: ';
|
||||
$a->strings['Gender: '] = 'Gender: ';
|
||||
$a->strings["No entries \x28some entries may be hidden\x29."] = "No entries \x28some entries may be hidden\x29.";
|
||||
$a->strings['Item not found.'] = 'Item not found.';
|
||||
$a->strings['Private Message'] = 'Private Message';
|
||||
$a->strings["I like this \x28toggle\x29"] = "I like this \x28toggle\x29";
|
||||
$a->strings["I don't like this \x28toggle\x29"] = "I don't like this \x28toggle\x29";
|
||||
$a->strings['This is you'] = 'This is you';
|
||||
$a->strings['Delete'] = 'Delete';
|
||||
$a->strings['View $name\'s profile'] = 'View $name\'s profile';
|
||||
$a->strings['View $owner_name\'s profile'] = 'View $owner_name\'s profile';
|
||||
$a->strings['to'] = 'to';
|
||||
$a->strings['Wall-to-Wall'] = 'Wall-to-Wall';
|
||||
$a->strings['via Wall-To-Wall:'] = 'via Wall-To-Wall:';
|
||||
$a->strings['Item has been removed.'] = 'Item has been removed.';
|
||||
$a->strings['Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.'] = 'Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.';
|
||||
$a->strings['Item not found'] = 'Item not found';
|
||||
$a->strings['Edit post'] = 'Edit post';
|
||||
$a->strings["Post to Email"] = "Post to Email";
|
||||
$a->strings['Edit'] = 'Edit';
|
||||
$a->strings['Upload photo'] = 'Upload photo';
|
||||
$a->strings['Insert web link'] = 'Insert web link';
|
||||
$a->strings['Insert YouTube video'] = 'Insert YouTube video';
|
||||
$a->strings['Insert Vorbis [.ogg] video'] = 'Insert Vorbis [.ogg] video';
|
||||
$a->strings['Insert Vorbis [.ogg] audio'] = 'Insert Vorbis [.ogg] audio';
|
||||
$a->strings['Set your location'] = 'Set your location';
|
||||
$a->strings['Clear browser location'] = 'Clear browser location';
|
||||
$a->strings['Please wait'] = 'Please wait';
|
||||
$a->strings['Permission settings'] = 'Permission settings';
|
||||
$a->strings['CC: email addresses'] = 'CC: email addresses';
|
||||
$a->strings['Example: bob@example.com, mary@example.com'] = 'Example: bob@example.com, mary@example.com';
|
||||
$a->strings['The profile address specified does not provide adequate information.'] = 'The profile address specified does not provide adequate information.';
|
||||
$a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Limited profile. This person will be unable to receive direct/personal notifications from you.';
|
||||
$a->strings['Unable to retrieve contact information.'] = 'Unable to retrieve contact information.';
|
||||
$a->strings['following'] = 'following';
|
||||
$a->strings['This is Friendika version'] = 'This is Friendika version';
|
||||
$a->strings['running at web location'] = 'running at web location';
|
||||
$a->strings['Shared content within the Friendika network is provided under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a>'] = 'Shared content within the Friendika network is provided under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a>';
|
||||
$a->strings['Please visit <a href="http://project.friendika.com">Project.Friendika.com</a> to learn more about the Friendika project.'] = 'Please visit <a href="http://project.friendika.com">Project.Friendika.com</a> to learn more about the Friendika project.';
|
||||
$a->strings['Bug reports and issues: please visit'] = 'Bug reports and issues: please visit';
|
||||
$a->strings['Suggestions, praise, donations, etc. - please email "Info" at Friendika - dot com'] = 'Suggestions, praise, donations, etc. - please email "Info" at Friendika - dot com';
|
||||
$a->strings['Installed plugins/addons/apps'] = 'Installed plugins/addons/apps';
|
||||
$a->strings['No installed plugins/addons/apps'] = 'No installed plugins/addons/apps';
|
||||
$a->strings['Group created.'] = 'Group created.';
|
||||
$a->strings['Could not create group.'] = 'Could not create group.';
|
||||
$a->strings['Group not found.'] = 'Group not found.';
|
||||
$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['Group removed.'] = 'Group removed.';
|
||||
$a->strings['Unable to remove group.'] = 'Unable to remove group.';
|
||||
$a->strings["Welcome to "] = "Welcome to ";
|
||||
$a->strings['Delete'] = 'Delete';
|
||||
$a->strings['Click on a contact to add or remove.'] = 'Click on a contact to add or remove.';
|
||||
$a->strings['Group Editor'] = 'Group Editor';
|
||||
$a->strings['Members'] = 'Members';
|
||||
$a->strings['All Contacts'] = 'All Contacts';
|
||||
$a->strings['Help:'] = 'Help:';
|
||||
$a->strings['Help'] = 'Help';
|
||||
$a->strings["Welcome to %s"] = "Welcome to %s";
|
||||
$a->strings['Could not create/connect to database.'] = 'Could not create/connect to database.';
|
||||
$a->strings['Connected to database.'] = 'Connected to database.';
|
||||
$a->strings['Database import succeeded.'] = 'Database import succeeded.';
|
||||
$a->strings['Proceed with Installation'] = 'Proceed with Installation';
|
||||
$a->strings['Your Friendika site database has been installed.'] = 'Your Friendika site database has been installed.';
|
||||
$a->strings['IMPORTANT: You will need to [manually] setup a scheduled task for the poller.'] = 'IMPORTANT: You will need to [manually] setup a scheduled task for the poller.';
|
||||
$a->strings['Please see the file "INSTALL.txt".'] = 'Please see the file "INSTALL.txt".';
|
||||
$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['Submit'] = 'Submit';
|
||||
$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.';
|
||||
|
|
@ -243,52 +286,90 @@ $a->strings['Please check with your site documentation or support people to see
|
|||
$a->strings['If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.'] = 'If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.';
|
||||
$a->strings['The database configuration file ".htconfig.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.'] = '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.';
|
||||
$a->strings['Errors encountered creating database tables.'] = 'Errors encountered creating database tables.';
|
||||
$a->strings[' : '] = ' : ';
|
||||
$a->strings['Not a valid email address.'] = 'Not a valid email address.';
|
||||
$a->strings['Please join my network on '] = 'Please join my network on ';
|
||||
$a->strings['Message delivery failed.'] = 'Message delivery failed.';
|
||||
$a->strings[' messages sent.'] = ' messages sent.';
|
||||
$a->strings['%s : Not a valid email address.'] = '%s : Not a valid email address.';
|
||||
$a->strings['%s : Message delivery failed.'] = '%s : Message delivery failed.';
|
||||
$a->strings['Send invitations'] = 'Send invitations';
|
||||
$a->strings['Enter email addresses, one per line:'] = 'Enter email addresses, one per line:';
|
||||
$a->strings['Please join my social network on '] = 'Please join my social network on ';
|
||||
$a->strings['Your message:'] = 'Your message:';
|
||||
$a->strings['To accept this invitation, please visit:'] = 'To accept this invitation, please visit:';
|
||||
$a->strings['Once you have registered, please connect with me via my profile page at:'] = 'Once you have registered, please connect with me via my profile page at:';
|
||||
$a->strings["%d message sent."] = array(
|
||||
0 => "%d message sent.",
|
||||
1 => "%d messages sent.",
|
||||
);
|
||||
$a->strings['Unable to locate original post.'] = 'Unable to locate original post.';
|
||||
$a->strings['Empty post discarded.'] = 'Empty post discarded.';
|
||||
$a->strings[" commented on your item at "] = " commented on your item at ";
|
||||
$a->strings[" posted on your profile wall at "] = " posted on your profile wall at ";
|
||||
$a->strings['Wall Photos'] = 'Wall Photos';
|
||||
$a->strings["%s commented on your item at %s"] = "%s commented on your item at %s";
|
||||
$a->strings["%s posted on your profile wall at %s"] = "%s posted on your profile wall at %s";
|
||||
$a->strings['System error. Post not saved.'] = 'System error. Post not saved.';
|
||||
$a->strings['This message was sent to you by '] = 'This message was sent to you by ';
|
||||
$a->strings[', a member of the Friendika social network.'] = ', a member of the Friendika social network.';
|
||||
$a->strings['You may visit them online at'] = 'You may visit them online at';
|
||||
$a->strings['This message was sent to you by %s, a member of the Friendika social network.'] = 'This message was sent to you by %s, a member of the Friendika social network.';
|
||||
$a->strings['You may visit them online at %s'] = 'You may visit them online at %s';
|
||||
$a->strings['Please contact the sender by replying to this post if you do not wish to receive these messages.'] = 'Please contact the sender by replying to this post if you do not wish to receive these messages.';
|
||||
$a->strings['posted an update.'] = 'posted an update.';
|
||||
$a->strings['%s posted an update.'] = '%s posted an update.';
|
||||
$a->strings['photo'] = 'photo';
|
||||
$a->strings['status'] = 'status';
|
||||
$a->strings['likes'] = 'likes';
|
||||
$a->strings['doesn\'t like'] = 'doesn\'t like';
|
||||
$a->strings['\'s'] = '\'s';
|
||||
$a->strings['%1$s likes %2$s\'s %3$s'] = '%1$s likes %2$s\'s %3$s';
|
||||
$a->strings['%1$s doesn\'t like %2$s\'s %3$s'] = '%1$s doesn\'t like %2$s\'s %3$s';
|
||||
$a->strings['Remote privacy information not available.'] = 'Remote privacy information not available.';
|
||||
$a->strings['Visible to:'] = 'Visible to:';
|
||||
$a->strings['Password reset requested at '] = 'Password reset requested at ';
|
||||
$a->strings["Welcome back "] = "Welcome back ";
|
||||
$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 <em>Settings</em> page after successful login.'] = 'Your password may be changed from the <em>Settings</em> 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: ';
|
||||
$a->strings['Reset'] = 'Reset';
|
||||
$a->strings["Welcome back %s"] = "Welcome back %s";
|
||||
$a->strings['Manage Identities and/or Pages'] = 'Manage Identities and/or Pages';
|
||||
$a->strings["\x28Toggle between different identities or community/group pages which share your account details.\x29"] = "\x28Toggle between different identities or community/group pages which share your account details.\x29";
|
||||
$a->strings['Select an identity to manage: '] = 'Select an identity to manage: ';
|
||||
$a->strings['Profile Match'] = 'Profile Match';
|
||||
$a->strings['No matches'] = 'No matches';
|
||||
$a->strings['No recipient selected.'] = 'No recipient selected.';
|
||||
$a->strings['[no subject]'] = '[no subject]';
|
||||
$a->strings['Unable to locate contact information.'] = 'Unable to locate contact information.';
|
||||
$a->strings['Message sent.'] = 'Message sent.';
|
||||
$a->strings['Message could not be sent.'] = 'Message could not be sent.';
|
||||
$a->strings['Messages'] = 'Messages';
|
||||
$a->strings['Inbox'] = 'Inbox';
|
||||
$a->strings['Outbox'] = 'Outbox';
|
||||
$a->strings['New Message'] = 'New Message';
|
||||
$a->strings['Message deleted.'] = 'Message deleted.';
|
||||
$a->strings['Conversation removed.'] = 'Conversation removed.';
|
||||
$a->strings['Please enter a link URL:'] = 'Please enter a link URL:';
|
||||
$a->strings['Send Private Message'] = 'Send Private Message';
|
||||
$a->strings['To:'] = 'To:';
|
||||
$a->strings['Subject:'] = 'Subject:';
|
||||
$a->strings['No messages.'] = 'No messages.';
|
||||
$a->strings['Delete conversation'] = 'Delete conversation';
|
||||
$a->strings['D, d M Y - g:i A'] = 'D, d M Y - g:i A';
|
||||
$a->strings['Message not available.'] = 'Message not available.';
|
||||
$a->strings['Delete message'] = 'Delete message';
|
||||
$a->strings['Send Reply'] = 'Send Reply';
|
||||
$a->strings['Normal View'] = 'Normal View';
|
||||
$a->strings['New Item View'] = 'New Item View';
|
||||
$a->strings['Share'] = 'Share';
|
||||
$a->strings['Insert YouTube video'] = 'Insert YouTube video';
|
||||
$a->strings['Set your location'] = 'Set your location';
|
||||
$a->strings['Clear browser location'] = 'Clear browser location';
|
||||
$a->strings['Permission settings'] = 'Permission settings';
|
||||
$a->strings['Warning: This group contains %s from an insecure network.'] = 'Warning: This group contains %s from an insecure network.';
|
||||
$a->strings['Private messages to this group are at risk of public disclosure.'] = 'Private messages to this group are at risk of public disclosure.';
|
||||
$a->strings['No such group'] = 'No such group';
|
||||
$a->strings['Group is empty'] = 'Group is empty';
|
||||
$a->strings['Group: '] = 'Group: ';
|
||||
$a->strings['View in context'] = 'View in context';
|
||||
$a->strings['Contact: '] = 'Contact: ';
|
||||
$a->strings['Private messages to this person are at risk of public disclosure.'] = 'Private messages to this person are at risk of public disclosure.';
|
||||
$a->strings['Invalid contact.'] = 'Invalid contact.';
|
||||
$a->strings['%d member'] = array(
|
||||
0 => '%d member',
|
||||
1 => '%d members',
|
||||
);
|
||||
$a->strings['Invalid request identifier.'] = 'Invalid request identifier.';
|
||||
$a->strings['Discard'] = 'Discard';
|
||||
$a->strings['Ignore'] = 'Ignore';
|
||||
$a->strings['Pending Friend/Connect Notifications'] = 'Pending Friend/Connect Notifications';
|
||||
$a->strings['Show Ignored Requests'] = 'Show Ignored Requests';
|
||||
$a->strings['Hide Ignored Requests'] = 'Hide Ignored Requests';
|
||||
$a->strings['Claims to be known to you: '] = 'Claims to be known to you: ';
|
||||
|
|
@ -302,8 +383,14 @@ $a->strings['Friend/Connect Request'] = 'Friend/Connect Request';
|
|||
$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.';
|
||||
$a->strings["Welcome "] = "Welcome ";
|
||||
$a->strings['Please upload a profile photo.'] = 'Please upload a profile photo.';
|
||||
$a->strings["Welcome back "] = "Welcome back ";
|
||||
$a->strings['Photo Albums'] = 'Photo Albums';
|
||||
$a->strings['Contact Photos'] = 'Contact Photos';
|
||||
$a->strings['Contact information unavailable'] = 'Contact information unavailable';
|
||||
|
|
@ -325,49 +412,109 @@ $a->strings['Edit Album'] = 'Edit Album';
|
|||
$a->strings['View Photo'] = 'View Photo';
|
||||
$a->strings['Photo not available'] = 'Photo not available';
|
||||
$a->strings['Edit photo'] = 'Edit photo';
|
||||
$a->strings['Private Message'] = 'Private Message';
|
||||
$a->strings['<< Prev'] = '<< Prev';
|
||||
$a->strings['View Full Size'] = 'View Full Size';
|
||||
$a->strings['Next >>'] = 'Next >>';
|
||||
$a->strings['Tags: '] = 'Tags: ';
|
||||
$a->strings['[Remove any tag]'] = '[Remove any tag]';
|
||||
$a->strings['New album name'] = 'New album name';
|
||||
$a->strings['Caption'] = 'Caption';
|
||||
$a->strings['Add a Tag'] = 'Add a Tag';
|
||||
$a->strings['Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'] = 'Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping';
|
||||
$a->strings["I like this \x28toggle\x29"] = "I like this \x28toggle\x29";
|
||||
$a->strings["I don't like this \x28toggle\x29"] = "I don't like this \x28toggle\x29";
|
||||
$a->strings['Share'] = 'Share';
|
||||
$a->strings['This is you'] = 'This is you';
|
||||
$a->strings['Recent Photos'] = 'Recent Photos';
|
||||
$a->strings['Upload New Photos'] = 'Upload New Photos';
|
||||
$a->strings['View Album'] = 'View Album';
|
||||
$a->strings['Status'] = 'Status';
|
||||
$a->strings['Profile'] = 'Profile';
|
||||
$a->strings['Photos'] = 'Photos';
|
||||
$a->strings['Image uploaded but image cropping failed.'] = 'Image uploaded but image cropping failed.';
|
||||
$a->strings['Image size reduction [175] failed.'] = 'Image size reduction [175] failed.';
|
||||
$a->strings['Image size reduction [80] failed.'] = 'Image size reduction [80] failed.';
|
||||
$a->strings['Image size reduction [48] failed.'] = 'Image size reduction [48] 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['skip this step'] = 'skip this step';
|
||||
$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';
|
||||
$a->strings['Image uploaded successfully.'] = 'Image uploaded successfully.';
|
||||
$a->strings['Image size reduction [640] failed.'] = 'Image size reduction [640] failed.';
|
||||
$a->strings['Profile Name is required.'] = 'Profile Name is required.';
|
||||
$a->strings['Profile updated.'] = 'Profile updated.';
|
||||
$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['<span class="heart">♥</span> Marital Status:'] = '<span class="heart">♥</span> 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 <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.'] = 'This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.';
|
||||
$a->strings['Age: '] = 'Age: ';
|
||||
$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['Visible to everybody'] = 'Visible to everybody';
|
||||
$a->strings['Edit visibility'] = 'Edit visibility';
|
||||
$a->strings['Invalid profile identifier.'] = 'Invalid profile identifier.';
|
||||
$a->strings['Profile Visibility Editor'] = 'Profile Visibility Editor';
|
||||
$a->strings['Visible To'] = 'Visible To';
|
||||
$a->strings["All Contacts \x28with secure profile access\x29"] = "All Contacts \x28with secure profile access\x29";
|
||||
$a->strings['Invalid OpenID url'] = 'Invalid OpenID url';
|
||||
$a->strings['Please enter the required information.'] = 'Please enter the required information.';
|
||||
$a->strings['Please use a shorter name.'] = 'Please use a shorter name.';
|
||||
$a->strings['Name too short.'] = 'Name too short.';
|
||||
$a->strings["That doesn\'t appear to be your full \x28First Last\x29 name."] = "That doesn\'t appear to be your full \x28First Last\x29 name.";
|
||||
$a->strings["That doesn't appear to be your full \x28First Last\x29 name."] = "That doesn't appear to be your full \x28First Last\x29 name.";
|
||||
$a->strings['Your email domain is not among those allowed on this site.'] = 'Your email domain is not among those allowed on this site.';
|
||||
$a->strings['Not a valid email address.'] = 'Not a valid email address.';
|
||||
$a->strings['Cannot use that email.'] = 'Cannot use that email.';
|
||||
$a->strings['Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.'] = 'Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.';
|
||||
$a->strings['Nickname is already registered. Please choose another.'] = 'Nickname is already registered. Please choose another.';
|
||||
$a->strings['SERIOUS ERROR: Generation of security keys failed.'] = 'SERIOUS ERROR: Generation of security keys failed.';
|
||||
$a->strings['An error occurred during registration. Please try again.'] = 'An error occurred during registration. Please try again.';
|
||||
$a->strings['An error occurred creating your default profile. Please try again.'] = 'An error occurred creating your default profile. Please try again.';
|
||||
$a->strings['Registration details for '] = 'Registration details for ';
|
||||
$a->strings['Registration successful. Please check your email for further instructions.'] = 'Registration successful. Please check your email for further instructions.';
|
||||
$a->strings['Failed to send email message. Here is the message that failed.'] = 'Failed to send email message. Here is the message that failed.';
|
||||
$a->strings['Your registration can not be processed.'] = 'Your registration can not be processed.';
|
||||
$a->strings['Registration request at '] = 'Registration request at ';
|
||||
$a->strings['Your registration is pending approval by the site owner.'] = 'Your registration is pending approval by the site owner.';
|
||||
$a->strings["You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'.";
|
||||
$a->strings['If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'] = 'If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.';
|
||||
|
|
@ -380,11 +527,11 @@ $a->strings['Your Email Address: '] = 'Your Email Address: ';
|
|||
$a->strings['Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.'] = 'Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.';
|
||||
$a->strings['Choose a nickname: '] = 'Choose a nickname: ';
|
||||
$a->strings['Please login.'] = 'Please login.';
|
||||
$a->strings['Registration revoked for '] = 'Registration revoked for ';
|
||||
$a->strings['Account approved.'] = 'Account approved.';
|
||||
$a->strings['Remove My Account'] = 'Remove My Account';
|
||||
$a->strings['This will completely remove your account. Once this has been done it is not recoverable.'] = 'This will completely remove your account. Once this has been done it is not recoverable.';
|
||||
$a->strings['Please enter your password for verification:'] = 'Please enter your password for verification:';
|
||||
$a->strings['No results.'] = 'No results.';
|
||||
$a->strings['Passwords do not match. Password unchanged.'] = 'Passwords do not match. Password unchanged.';
|
||||
$a->strings['Empty passwords are not allowed. Password unchanged.'] = 'Empty passwords are not allowed. Password unchanged.';
|
||||
$a->strings['Password changed.'] = 'Password changed.';
|
||||
|
|
@ -397,10 +544,58 @@ $a->strings['Settings updated.'] = 'Settings updated.';
|
|||
$a->strings['Plugin Settings'] = 'Plugin Settings';
|
||||
$a->strings['Account Settings'] = 'Account Settings';
|
||||
$a->strings['No Plugin settings configured'] = 'No Plugin settings configured';
|
||||
$a->strings['Normal Account'] = 'Normal Account';
|
||||
$a->strings['This account is a normal personal profile'] = 'This account is a normal personal profile';
|
||||
$a->strings['Soapbox Account'] = 'Soapbox Account';
|
||||
$a->strings['Automatically approve all connection/friend requests as read-only fans'] = 'Automatically approve all connection/friend requests as read-only fans';
|
||||
$a->strings['Community/Celebrity Account'] = 'Community/Celebrity Account';
|
||||
$a->strings['Automatically approve all connection/friend requests as read-write fans'] = 'Automatically approve all connection/friend requests as read-write fans';
|
||||
$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 <strong>not published</strong>.'] = 'Profile is <strong>not published</strong>.';
|
||||
$a->strings['Your Identity Address is'] = 'Your Identity 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["\x28click to open/close\x29"] = "\x28click to open/close\x29";
|
||||
$a->strings['Email/Mailbox Setup'] = 'Email/Mailbox Setup';
|
||||
$a->strings["If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."] = "If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox.";
|
||||
$a->strings['IMAP server name:'] = 'IMAP server name:';
|
||||
$a->strings['IMAP port:'] = 'IMAP port:';
|
||||
$a->strings["Security \x28TLS or SSL\x29:"] = "Security \x28TLS or SSL\x29:";
|
||||
$a->strings['Email login name:'] = 'Email login name:';
|
||||
$a->strings['Email password:'] = 'Email password:';
|
||||
$a->strings["Reply-to address \x28Optional\x29:"] = "Reply-to address \x28Optional\x29:";
|
||||
$a->strings['Send public posts to all email contacts:'] = 'Send public posts to all email contacts:';
|
||||
$a->strings['Email access is disabled on this site.'] = 'Email access is disabled on this site.';
|
||||
$a->strings['Tag removed'] = 'Tag removed';
|
||||
$a->strings['Remove Item Tag'] = 'Remove Item Tag';
|
||||
$a->strings['Select a tag to remove: '] = 'Select a tag to remove: ';
|
||||
|
|
@ -410,6 +605,7 @@ $a->strings['Visible To:'] = 'Visible To:';
|
|||
$a->strings['Groups'] = 'Groups';
|
||||
$a->strings['Except For:'] = 'Except For:';
|
||||
$a->strings['Logged out.'] = 'Logged out.';
|
||||
$a->strings['Image/photo'] = 'Image/photo';
|
||||
$a->strings['Unknown | Not categorised'] = 'Unknown | Not categorised';
|
||||
$a->strings['Block immediately'] = 'Block immediately';
|
||||
$a->strings['Shady, spammer, self-marketer'] = 'Shady, spammer, self-marketer';
|
||||
|
|
@ -422,6 +618,28 @@ $a->strings['Twice daily'] = 'Twice daily';
|
|||
$a->strings['Daily'] = 'Daily';
|
||||
$a->strings['Weekly'] = 'Weekly';
|
||||
$a->strings['Monthly'] = 'Monthly';
|
||||
$a->strings['View %s\'s profile'] = 'View %s\'s profile';
|
||||
$a->strings['View in context'] = 'View in context';
|
||||
$a->strings['See more posts like this'] = 'See more posts like this';
|
||||
$a->strings['See all %d comments'] = 'See all %d comments';
|
||||
$a->strings['to'] = 'to';
|
||||
$a->strings['Wall-to-Wall'] = 'Wall-to-Wall';
|
||||
$a->strings['via Wall-To-Wall:'] = 'via Wall-To-Wall:';
|
||||
$a->strings['%s likes this.'] = '%s likes this.';
|
||||
$a->strings['%s doesn\'t like this.'] = '%s doesn\'t like this.';
|
||||
$a->strings['<span %1$s>%2$d people</span> like this.'] = '<span %1$s>%2$d people</span> like this.';
|
||||
$a->strings['<span %1$s>%2$d people</span> don\'t like this.'] = '<span %1$s>%2$d people</span> don\'t like this.';
|
||||
$a->strings['and'] = 'and';
|
||||
$a->strings[', and %d other people'] = ', and %d other people';
|
||||
$a->strings['%s like this.'] = '%s like this.';
|
||||
$a->strings['%s don\'t like this.'] = '%s don\'t like this.';
|
||||
$a->strings['Visible to <strong>everybody</strong>'] = 'Visible to <strong>everybody</strong>';
|
||||
$a->strings['Please enter a YouTube link:'] = 'Please enter a YouTube link:';
|
||||
$a->strings["Please enter a video\x28.ogg\x29 link/URL:"] = "Please enter a video\x28.ogg\x29 link/URL:";
|
||||
$a->strings["Please enter an audio\x28.ogg\x29 link/URL:"] = "Please enter an audio\x28.ogg\x29 link/URL:";
|
||||
$a->strings['Where are you right now?'] = 'Where are you right now?';
|
||||
$a->strings['Enter a title for this item'] = 'Enter a title for this item';
|
||||
$a->strings['Set title'] = 'Set title';
|
||||
$a->strings['Miscellaneous'] = 'Miscellaneous';
|
||||
$a->strings['less than a second ago'] = 'less than a second ago';
|
||||
$a->strings['year'] = 'year';
|
||||
|
|
@ -431,7 +649,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';
|
||||
|
|
@ -439,6 +656,7 @@ $a->strings['minutes'] = 'minutes';
|
|||
$a->strings['second'] = 'second';
|
||||
$a->strings['seconds'] = 'seconds';
|
||||
$a->strings[' ago'] = ' ago';
|
||||
$a->strings['Cannot locate DNS info for database server \'%s\''] = 'Cannot locate DNS info for database server \'%s\'';
|
||||
$a->strings['Create a new group'] = 'Create a new group';
|
||||
$a->strings['Everybody'] = 'Everybody';
|
||||
$a->strings['Birthday:'] = 'Birthday:';
|
||||
|
|
@ -446,11 +664,25 @@ $a->strings['Home'] = 'Home';
|
|||
$a->strings['Apps'] = 'Apps';
|
||||
$a->strings['Directory'] = 'Directory';
|
||||
$a->strings['Network'] = 'Network';
|
||||
$a->strings['Notifications'] = 'Notifications';
|
||||
$a->strings['Manage'] = 'Manage';
|
||||
$a->strings['Settings'] = 'Settings';
|
||||
$a->strings['Profiles'] = 'Profiles';
|
||||
$a->strings["\x28no subject\x29"] = "\x28no subject\x29";
|
||||
$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['<span class="heart">♥</span> Status:'] = '<span class="heart">♥</span> 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';
|
||||
|
|
@ -505,14 +737,18 @@ $a->strings['Complicated'] = 'Complicated';
|
|||
$a->strings['Don\'t care'] = 'Don\'t care';
|
||||
$a->strings['Ask me'] = 'Ask me';
|
||||
$a->strings['Facebook disabled'] = 'Facebook disabled';
|
||||
$a->strings['Updating contacts'] = 'Updating contacts';
|
||||
$a->strings['Facebook API key is missing.'] = 'Facebook API key is missing.';
|
||||
$a->strings['Facebook Connect'] = 'Facebook Connect';
|
||||
$a->strings['Install Facebook post connector'] = 'Install Facebook post connector';
|
||||
$a->strings['Remove Facebook post connector'] = 'Remove Facebook post connector';
|
||||
$a->strings['Install Facebook connector for this account.'] = 'Install Facebook connector for this account.';
|
||||
$a->strings['Remove Facebook connector'] = 'Remove Facebook connector';
|
||||
$a->strings['Post to Facebook by default'] = 'Post to Facebook by default';
|
||||
$a->strings['Facebook'] = 'Facebook';
|
||||
$a->strings['Facebook Connector Settings'] = 'Facebook Connector Settings';
|
||||
$a->strings['Post to Facebook'] = 'Post to Facebook';
|
||||
$a->strings['Post to Facebook cancelled because of multi-network access permission conflict.'] = 'Post to Facebook cancelled because of multi-network access permission conflict.';
|
||||
$a->strings['Image: '] = 'Image: ';
|
||||
$a->strings['View on Friendika'] = 'View on Friendika';
|
||||
$a->strings['Select files to upload: '] = 'Select files to upload: ';
|
||||
$a->strings['Use the following controls only if the Java uploader [above] fails to launch.'] = 'Use the following controls only if the Java uploader [above] fails to launch.';
|
||||
$a->strings['Upload a file'] = 'Upload a file';
|
||||
|
|
|
|||
|
|
@ -37,12 +37,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
if(x($a->config,'php_path'))
|
||||
$phpath = $a->config['php_path'];
|
||||
else
|
||||
$phpath = 'php';
|
||||
|
||||
echo "String files\n";
|
||||
|
||||
echo 'util/strings.php' . "\n";
|
||||
include_once('util/strings.php');
|
||||
echo count($a->strings) . ' strings' . "\n";
|
||||
|
||||
$files = glob('view/*/strings.php');
|
||||
|
||||
foreach($files as $file) {
|
||||
echo $file . "\n";
|
||||
include_once($file);
|
||||
passthru($phpath . ' util/typohelper.php ' . $file);
|
||||
// include_once($file);
|
||||
}
|
||||
|
|
|
|||
11
util/typohelper.php
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
$str = <<< EOT
|
||||
error_reporting(E_ERROR | E_WARNING | E_PARSE );
|
||||
ini_set('display_errors', '1');
|
||||
ini_set('log_errors','0');
|
||||
EOT;
|
||||
|
||||
$str .= str_replace('<?php', '', file_get_contents($argv[1]));
|
||||
|
||||
eval($str);
|
||||
39
view/api_timeline_atom.tpl
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:statusnet="http://status.net/schema/api/1/">
|
||||
<generator uri="http://status.net" version="0.9.7">StatusNet</generator>
|
||||
<id>tag:friendika:PublicTimeline</id>
|
||||
<title>Network on Friendika</title>
|
||||
<subtitle>Your network updates on Friendika</subtitle>
|
||||
<logo>$rss.logo</logo>
|
||||
<updated>$rss.updated</updated>
|
||||
<link type="text/html" rel="alternate" href="$rss.alternate"/>
|
||||
<link type="application/atom+xml" rel="self" href="$rss.self"/>
|
||||
{{ for $statuses as $status }}
|
||||
<entry>
|
||||
<activity:object-type>$status.objecttype</activity:object-type>
|
||||
<id>$status.id</id>
|
||||
<title>$status.text</title>
|
||||
<content type="html">$status.html</content>
|
||||
<link rel="alternate" type="text/html" href="$status.url"/>
|
||||
<activity:verb>$status.verb</activity:verb>
|
||||
<published>$status.created_at</published>
|
||||
<updated>$status.created_at</updated>
|
||||
|
||||
<link rel="ostatus:conversation" href="$status.url"/>
|
||||
<!--
|
||||
<source>
|
||||
<id>http://identi.ca/api/statuses/user_timeline/397830.atom</id>
|
||||
<title>Sin Mobopolitan</title>
|
||||
<link rel="alternate" type="text/html" href="http://identi.ca/mobopolitan"/>
|
||||
<link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/user_timeline/397830.atom"/>
|
||||
<link rel="license" href="http://creativecommons.org/licenses/by/3.0/"/>
|
||||
<icon>http://avatar.identi.ca/397830-96-20110312195623.jpeg</icon>
|
||||
<updated>2011-04-21T18:39:32+00:00</updated>
|
||||
</source>
|
||||
-->
|
||||
<link rel="self" type="application/atom+xml" href="$status.self"/>
|
||||
<link rel="edit" type="application/atom+xml" href="$status.edit"/>
|
||||
<statusnet:notice_info local_id="$status.id" source="$status.source" favorite="false" repeated="false">
|
||||
</statusnet:notice_info>
|
||||
</entry>
|
||||
{{ endfor }}
|
||||
</feed>
|
||||
21
view/api_timeline_rss.tpl
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:georss="http://www.georss.org/georss" xmlns:twitter="http://api.twitter.com">
|
||||
<channel>
|
||||
<title>Friendika</title>
|
||||
<link>$rss.alternate</link>
|
||||
<atom:link type="application/rss+xml" rel="self" href="$rss.self"/>
|
||||
<description>Friendika timeline</description>
|
||||
<language>$rss.language</language>
|
||||
<ttl>40</ttl>
|
||||
|
||||
{{ for $statuses as $status }}
|
||||
<item>
|
||||
<title>$status.text</title>
|
||||
<description>$status.text</description>
|
||||
<pubDate>$status.created_at</pubDate>
|
||||
<guid>$status.url</guid>
|
||||
<link>$status.url</link>
|
||||
<twitter:source>$status.source</twitter:source>
|
||||
</item>
|
||||
{{ endfor }}
|
||||
</channel>
|
||||
</rss>
|
||||
21
view/api_timeline_xml.tpl
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<statuses type="array">
|
||||
{{ for $statuses as $status }}
|
||||
<status>
|
||||
<created_at>$status.created_at</created_at>
|
||||
<id>$status.id</id>
|
||||
<text>$status.text</text>
|
||||
<source>$status.source</source>
|
||||
<truncated>$status.truncated</truncated>
|
||||
<url>$status.url</url>
|
||||
<in_reply_to_status_id>$status.in_reply_to_status_id</in_reply_to_status_id>
|
||||
<in_reply_to_user_id>$status.in_reply_to_user_id</in_reply_to_user_id>
|
||||
<favorited>$status.favorited</favorited>
|
||||
<in_reply_to_screen_name>$status.in_reply_to_screen_name</in_reply_to_screen_name>
|
||||
<geo>$status.geo</geo>
|
||||
<coordinates>$status.coordinates</coordinates>
|
||||
<place>$status.place</place>
|
||||
<contributors>$status.contributors</contributors>
|
||||
{{ inc api_user_xml.tpl with $user=$status.user }}{{ endinc }}
|
||||
</status>
|
||||
{{ endfor }}
|
||||
</statuses>
|
||||
46
view/api_user_xml.tpl
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<user>
|
||||
<id>$user.id</id>
|
||||
<name>$user.name</name>
|
||||
<screen_name>$user.screen_name</screen_name>
|
||||
<location>$user.location</location>
|
||||
<description>$user.description</description>
|
||||
<profile_image_url>$user.profile_image_url</profile_image_url>
|
||||
<url>$user.url</url>
|
||||
<protected>$user.protected</protected>
|
||||
<followers_count>$user.followers</followers_count>
|
||||
<profile_background_color>$user.profile_background_color</profile_background_color>
|
||||
<profile_text_color>$user.profile_text_color</profile_text_color>
|
||||
<profile_link_color>$user.profile_link_color</profile_link_color>
|
||||
<profile_sidebar_fill_color>$user.profile_sidebar_fill_color</profile_sidebar_fill_color>
|
||||
<profile_sidebar_border_color>$user.profile_sidebar_border_color</profile_sidebar_border_color>
|
||||
<friends_count>$user.friends_count</friends_count>
|
||||
<created_at>$user.created_at</created_at>
|
||||
<favourites_count>$user.favourites_count</favourites_count>
|
||||
<utc_offset>$user.utc_offset</utc_offset>
|
||||
<time_zone>$user.time_zone</time_zone>
|
||||
<profile_background_image_url>$user.profile_background_image_url</profile_background_image_url>
|
||||
<profile_background_tile>$user.profile_background_tile</profile_background_tile>
|
||||
<profile_use_background_image>$user.profile_use_background_image</profile_use_background_image>
|
||||
<notifications></notifications>
|
||||
<geo_enabled>$user.geo_enabled</geo_enabled>
|
||||
<verified>$user.verified</verified>
|
||||
<following></following>
|
||||
<statuses_count>$user.statuses_count</statuses_count>
|
||||
<lang>$user.lang</lang>
|
||||
<contributors_enabled>$user.contributors_enabled</contributors_enabled>
|
||||
<status>{{ if $user.status }}
|
||||
<created_at>$user.status.created_at</created_at>
|
||||
<id>$user.status.id</id>
|
||||
<text>$user.status.text</text>
|
||||
<source>$user.status.source</source>
|
||||
<truncated>$user.status.truncated</truncated>
|
||||
<in_reply_to_status_id>$user.status.in_reply_to_status_id</in_reply_to_status_id>
|
||||
<in_reply_to_user_id>$user.status.in_reply_to_user_id</in_reply_to_user_id>
|
||||
<favorited>$user.status.favorited</favorited>
|
||||
<in_reply_to_screen_name>$user.status.in_reply_to_screen_name</in_reply_to_screen_name>
|
||||
<geo>$user.status.geo</geo>
|
||||
<coordinates>$user.status.coordinates</coordinates>
|
||||
<place>$user.status.place</place>
|
||||
<contributors>$user.status.contributors</contributors>
|
||||
{{ endif }}</status>
|
||||
</user>
|
||||
|
|
@ -10,11 +10,11 @@
|
|||
<a class="comment-edit-photo-link" href="$mylink" title="$mytitle"><img class="my-comment-photo" src="$myphoto" alt="$mytitle" title="$mytitle" /></a>
|
||||
</div>
|
||||
<div class="comment-edit-photo-end"></div>
|
||||
<textarea id="comment-edit-text-$id" class="comment-edit-text-empty" name="body" onFocus="commentOpen(this,$id);" onBlur="commentClose(this,$id);" >Comment</textarea>
|
||||
<textarea id="comment-edit-text-$id" class="comment-edit-text-empty" name="body" onFocus="commentOpen(this,$id);" onBlur="commentClose(this,$id);" >$comment</textarea>
|
||||
|
||||
<div class="comment-edit-text-end"></div>
|
||||
<div class="comment-edit-submit-wrapper" id="comment-edit-submit-wrapper-$id" style="display: none;" >
|
||||
<input type="submit" onclick="post_comment($id); return false;" id="comment-edit-submit-$id" class="comment-edit-submit" name="submit" value="Submit" />
|
||||
<input type="submit" onclick="post_comment($id); return false;" id="comment-edit-submit-$id" class="comment-edit-submit" name="submit" value="$submit" />
|
||||
</div>
|
||||
|
||||
<div class="comment-edit-end"></div>
|
||||
|
|
|
|||
|
|
@ -18,17 +18,19 @@
|
|||
<div id="contact-edit-nav-wrapper" >
|
||||
|
||||
<div id="contact-edit-links" >
|
||||
<a href="contacts/$contact_id/block" id="contact-edit-block-link" ><img src="images/b_block.gif" alt="$blockunblock" title="$block_text"/></a>
|
||||
<a href="contacts/$contact_id/ignore" id="contact-edit-ignore-link" ><img src="images/no.gif" alt="$ignorecont" title="$ignore_text"/></a>
|
||||
<a href="contacts/$contact_id/block" class="icon block" id="contact-edit-block-link" title="$block_text"></a>
|
||||
<a href="contacts/$contact_id/ignore" class="icon no" id="contact-edit-ignore-link" title="$ignore_text"></a>
|
||||
<a href="crepair/$contact_id" class="icon tools" id="contact-edit-repair" title="$lblcrepair"></a>
|
||||
|
||||
</div>
|
||||
<div id="contact-drop-links" >
|
||||
<a href="contacts/$contact_id/drop" id="contact-edit-drop-link" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" /></a>
|
||||
<a href="contacts/$contact_id/drop" class="icon drophide" id="contact-edit-drop-link" onclick="return confirmDelete();" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);"></a>
|
||||
</div>
|
||||
<div id="contact-edit-nav-end"></div>
|
||||
|
||||
|
||||
<div id="contact-edit-poll-wrapper">
|
||||
<div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span</div>
|
||||
<div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span></div>
|
||||
<div id="contact-edit-poll-text">$updpub</div>
|
||||
$poll_interval
|
||||
<div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div>
|
||||
|
|
@ -40,42 +42,44 @@ $insecure
|
|||
$blocked
|
||||
$ignored
|
||||
|
||||
<div id="view-recent-wrapper"><a href="network/?cid=$contact_id" id="contact-view-recent">$lblrecent</a></div>
|
||||
|
||||
<div id="contact-edit-info-wrapper">
|
||||
<h4>Contact Information / Notes</h4>
|
||||
<h4>$lbl_info1</h4>
|
||||
<textarea id="contact-edit-info" rows="10" cols="72" name="info" >$info</textarea>
|
||||
</div>
|
||||
<div id="contact-edit-info-end"></div>
|
||||
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
|
||||
|
||||
<div id="contact-edit-profile-select-text">
|
||||
<h4>Profile Visibility</h4>
|
||||
<p>Please choose the profile you would like to display to $name when viewing your profile securely.
|
||||
<h4>$lbl_vis1</h4>
|
||||
<p>$lbl_vis2
|
||||
</p>
|
||||
</div>
|
||||
$profile_select
|
||||
<div id="contact-edit-profile-select-end"></div>
|
||||
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
|
||||
|
||||
|
||||
<div id="contact-edit-rating-wrapper">
|
||||
<h4>Online Reputation</h4>
|
||||
<h4>$lbl_rep1</h4>
|
||||
<p>
|
||||
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
|
||||
</p>
|
||||
<div id="contact-edit-rating-select-wrapper">
|
||||
$rating
|
||||
</div>
|
||||
<div id="contact-edit-rating-explain">
|
||||
<p>
|
||||
Please take a moment to elaborate on this selection if you feel it could be helpful to others.
|
||||
$lbl_rep4
|
||||
</p>
|
||||
<textarea id="contact-edit-rating-text" name="reason" rows="3" cols="64" >$reason</textarea>
|
||||
</div>
|
||||
</div>
|
||||
$groups
|
||||
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
|
||||
</form>
|
||||
</div>
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
</div>
|
||||
<div class="contact-entry-direction-end" ></div>
|
||||
<div class="contact-entry-edit-links" >
|
||||
<a href="contacts/$id" class="contact-entry-edit-link" ><img src="images/b_edit.gif" alt="$edit_hover" title="$edit_hover" /></a>
|
||||
<a class="icon pencil" href="contacts/$id" class="contact-entry-edit-link" title="$edit_hover"></a>
|
||||
</div>
|
||||
<div class="contact-entry-edit-end"></div>
|
||||
</div>
|
||||
|
|
|
|||
34
view/crepair.tpl
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
|
||||
<form id="crepair-form" action="crepair/$contact_id" method="post" >
|
||||
|
||||
<h4>$contact_name</h4>
|
||||
|
||||
<label id="crepair-nick-label" for="crepair-nick">$label_nick</label>
|
||||
<input type="text" id="crepair-nick" name="nick" value="$contact_nick" />
|
||||
<div class="clear"></div>
|
||||
|
||||
<label id="crepair-url-label" for="crepair-url">$label_url</label>
|
||||
<input type="text" id="crepair-url" name="url" value="$contact_url" />
|
||||
<div class="clear"></div>
|
||||
|
||||
<label id="crepair-request-label" for="crepair-request">$label_request</label>
|
||||
<input type="text" id="crepair-request" name="request" value="$request" />
|
||||
<div class="clear"></div>
|
||||
|
||||
<label id="crepair-confirm-label" for="crepair-confirm">$label_confirm</label>
|
||||
<input type="text" id="crepair-confirm" name="confirm" value="$confirm" />
|
||||
<div class="clear"></div>
|
||||
|
||||
<label id="crepair-notify-label" for="crepair-notify">$label_notify</label>
|
||||
<input type="text" id="crepair-notify" name="notify" value="$notify" />
|
||||
<div class="clear"></div>
|
||||
|
||||
<label id="crepair-poll-label" for="crepair-poll">$label_poll</label>
|
||||
<input type="text" id="crepair-poll" name="poll" value="$poll" />
|
||||
<div class="clear"></div>
|
||||
|
||||
<input type="submit" name="submit" value="$lbl_submit" />
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
<h1>Crop Image</h1>
|
||||
<h1>$title</h1>
|
||||
<p id="cropimage-desc">
|
||||
Please adjust the image cropping for optimum viewing.
|
||||
$desc
|
||||
</p>
|
||||
<div id="cropimage-wrapper">
|
||||
<img src="$image_url" id="croppa" class="imgCrop" alt="" />
|
||||
<img src="$image_url" id="croppa" class="imgCrop" alt="$title" />
|
||||
</div>
|
||||
<div id="cropimage-preview-wrapper" >
|
||||
<div id="previewWrap" ></div>
|
||||
|
|
@ -41,7 +41,6 @@ Please adjust the image cropping for optimum viewing.
|
|||
|
||||
<form action="profile_photo/$resource" id="crop-image-form" method="post" />
|
||||
|
||||
<input type="hidden" name="imagename" value="$hash" />
|
||||
<input type="hidden" name="cropfinal" value="1" />
|
||||
<input type="hidden" name="xstart" id="x1" />
|
||||
<input type="hidden" name="ystart" id="y1" />
|
||||
|
|
@ -51,7 +50,7 @@ Please adjust the image cropping for optimum viewing.
|
|||
<input type="hidden" name="width" id="width" />
|
||||
|
||||
<div id="crop-image-submit-wrapper" >
|
||||
<input type="submit" name="submit" value="Done Editing" />
|
||||
<input type="submit" name="submit" value="$done" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
|
||||
<h2>$header</h2>
|
||||
|
||||
<div id="contact-edit-banner-name">$name</div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
<div id="contact-edit-wrapper" >
|
||||
|
||||
<div id="contact-edit-photo-wrapper" >
|
||||
<img id="contact-edit-direction-icon" src="$dir_icon" alt="$alt_text" title="$alt_text" />
|
||||
<div id="contact-edit-photo" >
|
||||
<a href="$url" title="$visit" /><img src="$photo" $sparkle alt="$name" /></a>
|
||||
</div>
|
||||
<div id="contact-edit-photo-end" ></div>
|
||||
</div>
|
||||
<div id="contact-edit-nav-wrapper" >
|
||||
|
||||
<div id="contact-edit-links" >
|
||||
<a href="contacts/$contact_id/block" id="contact-edit-block-link" ><img src="images/b_block.gif" alt="$blockunblock" title="$block_text"/></a>
|
||||
<a href="contacts/$contact_id/ignore" id="contact-edit-ignore-link" ><img src="images/no.gif" alt="$ignorecont" title="$ignore_text"/></a>
|
||||
</div>
|
||||
<div id="contact-drop-links" >
|
||||
<a href="contacts/$contact_id/drop" id="contact-edit-drop-link" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" /></a>
|
||||
</div>
|
||||
<div id="contact-edit-nav-end"></div>
|
||||
|
||||
|
||||
<div id="contact-edit-poll-wrapper">
|
||||
<div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span</div>
|
||||
<div id="contact-edit-poll-text">$updpub</div>
|
||||
$poll_interval
|
||||
<div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="contact-edit-end" ></div>
|
||||
|
||||
$insecure
|
||||
$blocked
|
||||
$ignored
|
||||
|
||||
|
||||
<div id="contact-edit-info-wrapper">
|
||||
<h4>Kontaktinformation / Notizen</h4>
|
||||
<textarea id="contact-edit-info" rows="10" cols="72" name="info" >$info</textarea>
|
||||
</div>
|
||||
<div id="contact-edit-info-end"></div>
|
||||
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
|
||||
|
||||
<div id="contact-edit-profile-select-text">
|
||||
<h4>Profil Sichtbarkeit</h4>
|
||||
<p>Bitte wähle das Profil, das du $name gezeigt werden soll, wenn er sich dein
|
||||
Profil in Friendika betrachtet.
|
||||
</p>
|
||||
</div>
|
||||
$profile_select
|
||||
<div id="contact-edit-profile-select-end"></div>
|
||||
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
|
||||
|
||||
|
||||
<div id="contact-edit-rating-wrapper">
|
||||
<h4>Online Reputation</h4>
|
||||
<p>
|
||||
Gelegentlich werden sich deine Freunde nach der online Legitimität dieser
|
||||
Person erkundigen. Du kannst ihnen helfen bei der Entscheidung ob sie mit
|
||||
dieser Person interagieren wollen indem du den "Ruf" der Person bewertest.
|
||||
</p>
|
||||
<div id="contact-edit-rating-select-wrapper">
|
||||
$rating
|
||||
</div>
|
||||
<div id="contact-edit-rating-explain">
|
||||
<p>
|
||||
Bitte nimm dir einen Moment um deine Auswahl zu kommentieren wenn du meinst das
|
||||
könnte anderen weiter helfen.
|
||||
</p>
|
||||
<textarea id="contact-edit-rating-text" name="reason" rows="3" cols="64" >$reason</textarea>
|
||||
</div>
|
||||
</div>
|
||||
$groups
|
||||
|
||||
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
|
||||
</form>
|
||||
</div>
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
<h1>Bild zuschneiden</h1>
|
||||
<p id="cropimage-desc">
|
||||
Zur optimalen Darstellung des Bildes kann es nun auf einen Bereich
|
||||
zugeschnitten werden. Bitte wähle diesen Bereich.
|
||||
</p>
|
||||
<div id="cropimage-wrapper">
|
||||
<img src="$image_url" id="croppa" class="imgCrop" alt="" />
|
||||
</div>
|
||||
<div id="cropimage-preview-wrapper" >
|
||||
<div id="previewWrap" ></div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" language="javascript">
|
||||
|
||||
function onEndCrop( coords, dimensions ) {
|
||||
$( 'x1' ).value = coords.x1;
|
||||
$( 'y1' ).value = coords.y1;
|
||||
$( 'x2' ).value = coords.x2;
|
||||
$( 'y2' ).value = coords.y2;
|
||||
$( 'width' ).value = dimensions.width;
|
||||
$( 'height' ).value = dimensions.height;
|
||||
}
|
||||
|
||||
Event.observe( window, 'load', function() {
|
||||
new Cropper.ImgWithPreview(
|
||||
'croppa',
|
||||
{
|
||||
previewWrap: 'previewWrap',
|
||||
minWidth: 175,
|
||||
minHeight: 175,
|
||||
maxWidth: 640,
|
||||
maxHeight: 640,
|
||||
ratioDim: { x: 100, y:100 },
|
||||
displayOnInit: true,
|
||||
onEndCrop: onEndCrop
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
</script>
|
||||
|
||||
<form action="profile_photo/$resource" id="crop-image-form" method="post" />
|
||||
|
||||
<input type="hidden" name="imagename" value="$hash" />
|
||||
<input type="hidden" name="cropfinal" value="1" />
|
||||
<input type="hidden" name="xstart" id="x1" />
|
||||
<input type="hidden" name="ystart" id="y1" />
|
||||
<input type="hidden" name="xfinal" id="x2" />
|
||||
<input type="hidden" name="yfinal" id="y2" />
|
||||
<input type="hidden" name="height" id="height" />
|
||||
<input type="hidden" name="width" id="width" />
|
||||
|
||||
<div id="crop-image-submit-wrapper" >
|
||||
<input type="submit" name="submit" value="Done Editing" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
|
||||
<p id="dfrn-request-homecoming" >
|
||||
Willkommen zu Hause $username.
|
||||
<br />
|
||||
Bitte bestätige deine Vorstellung bei $dfrn_url.
|
||||
|
||||
</p>
|
||||
<form id="dfrn-request-homecoming-form" action="dfrn_request/$nickname" method="post">
|
||||
<input type="hidden" name="dfrn_url" value="$dfrn_url" />
|
||||
<input type="hidden" name="confirm_key" value="$confirm_key" />
|
||||
<input type="hidden" name="localconfirm" value="1" />
|
||||
$aes_allow
|
||||
|
||||
<div id="dfrn-request-homecoming-submit-wrapper" >
|
||||
<input id="dfrn-request-homecoming-submit" type="submit" name="submit" value="Confirm" />
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
<h1>Verzeichnis dieser Seite</h1>
|
||||
|
||||
$globaldir
|
||||
|
||||
$finding
|
||||
|
||||
<div id="directory-search-wrapper">
|
||||
<form id="directory-search-form" action="directory" method="get" >
|
||||
<input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="$search" />
|
||||
<input type="submit" name="submit" id="directory-search-submit" value="Find" />
|
||||
</form>
|
||||
</div>
|
||||
<div id="directory-search-end"></div>
|
||||
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
<h2>Gruppen Editor</h2>
|
||||
|
||||
|
||||
<div id="group-edit-wrapper" >
|
||||
<form action="group/$gid" id="group-edit-form" method="post" >
|
||||
<div id="group-edit-name-wrapper" >
|
||||
<label id="group-edit-name-label" for="group-edit-name" >Gruppen Name: </label>
|
||||
<input type="text" id="group-edit-name" name="groupname" value="$name" />
|
||||
</div>
|
||||
<div id="group-edit-name-end"></div>
|
||||
<div id="group-edit-select-wrapper" >
|
||||
<label id="group_members_select_label" for="group_members_select" >Mitglieder:</label>
|
||||
$selector
|
||||
|
||||
</div>
|
||||
$drop
|
||||
<div id="group_members_select_end"></div>
|
||||
<div id="group-edit-submit-wrapper" >
|
||||
<input type="submit" name="submit" value="Submit" >
|
||||
</div>
|
||||
|
||||
<div id="group-edit-select-end" ></div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
|
||||
|
||||
|
||||
<div id="group-new-wrapper" >
|
||||
<form action="group/new" method="post">
|
||||
|
||||
<div id="group-new-text">
|
||||
<p>
|
||||
Erstelle eine neue Gruppe für Freunde/Kontakte.
|
||||
|
||||
<div id="group-new-input-wrapper">
|
||||
<label id="group-new-label" for="group-new-name" >Gruppen Name: </label>
|
||||
<input name="groupname" id="group-new-name" />
|
||||
</div>
|
||||
<div id="group-new-input-end" ></div>
|
||||
|
||||
<div id="group-new-submit-wrapper" >
|
||||
<input type="submit" name="submit" value="Submit" />
|
||||
</form>
|
||||
</div>
|
||||
<div id="group-new-end"></div>
|
||||
|
||||
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<base href="$baseurl" />
|
||||
<link rel="stylesheet" type="text/css" href="$stylesheet" media="all" />
|
||||
<link rel="shortcut icon" href="$baseurl/images/friendika-32.png" />
|
||||
|
||||
<!--[if IE]>
|
||||
<script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<script type="text/javascript" src="$baseurl/include/jquery.js" ></script>
|
||||
<script type="text/javascript" src="$baseurl/include/main.js" ></script>
|
||||
<script>
|
||||
|
||||
function confirmDelete() { return confirm("Delete this item?"); }
|
||||
function commentOpen(obj,id) {
|
||||
if(obj.value == 'Comment') {
|
||||
obj.value = '';
|
||||
obj.className = "comment-edit-text-full";
|
||||
openMenu("comment-edit-submit-wrapper-" + id);
|
||||
}
|
||||
}
|
||||
function commentClose(obj,id) {
|
||||
if(obj.value == '') {
|
||||
obj.value = 'Comment';
|
||||
obj.className="comment-edit-text-empty";
|
||||
closeMenu("comment-edit-submit-wrapper-" + id);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
|
@ -37,7 +37,7 @@ $a->config['admin_email'] = '';
|
|||
|
||||
// Maximum size of an imported message, 0 is unlimited
|
||||
|
||||
$a->config['max_import_size'] = 10000;
|
||||
$a->config['max_import_size'] = 200000;
|
||||
|
||||
// maximum size of uploaded photos
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<div id="profile-edit-insecure">
|
||||
<p>
|
||||
Das Soziale Netzwerk dem $name angehört ist ein offenes Netzwerk das nur
|
||||
eingeschränkte oder nicht existente Privatspäreneinstellungen bietet.
|
||||
|
||||
Bitte verhalte dich entsprechend diskret.
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
|
||||
<h3>Friendika Social Network</h3>
|
||||
<h3>Installation</h3>
|
||||
|
||||
<p>
|
||||
Um Friendika installieren zu können müssen wir wissen wie wir die Datenbank erreichen könne. Bitte kontaktire deinen Hosting Anbieter oder Seitenadministrator wenn du Fragen zu diesen Einstellungen hast. Die Datenbank die du weiter unten angibst muss bereits existieren. Sollte dies nicht der Fall sein erzeuge sie bitte bevor du mit der Installation fortfährst.
|
||||
</p>
|
||||
|
||||
<form id="install-form" action="$baseurl/install" method="post">
|
||||
|
||||
<input type="hidden" name="phpath" value="$phpath" />
|
||||
|
||||
<label for="install-dbhost" id="install-dbhost-label">Datenbank Servername</label>
|
||||
<input type="text" name="dbhost" id="install-dbhost" value="$dbhost" />
|
||||
<div id="install-dbhost-end"></div>
|
||||
|
||||
<label for="install-dbuser" id="install-dbuser-label">Datenbank Anmeldename</label>
|
||||
<input type="text" name="dbuser" id="install-dbuser" value="$dbuser" />
|
||||
<div id="install-dbuser-end"></div>
|
||||
|
||||
<label for="install-dbpass" id="install-dbpass-label">Datenbank Anmeldepassword</label>
|
||||
<input type="password" name="dbpass" id="install-dbpass" value="$dbpass" />
|
||||
<div id="install-dbpass-end"></div>
|
||||
|
||||
<label for="install-dbdata" id="install-dbdata-label">Datenbankname</label>
|
||||
<input type="text" name="dbdata" id="install-dbdata" value="$dbdata" />
|
||||
<div id="install-dbdata-end"></div>
|
||||
|
||||
<div id="install-tz-desc">
|
||||
Bitte wähle die Standard-Zeitzone deiner Webseite
|
||||
</div>
|
||||
|
||||
$tzselect
|
||||
|
||||
<div id="install-tz-end" ></div>
|
||||
<input id="install-submit" type="submit" name="submit" value="$submit" />
|
||||
|
||||
</form>
|
||||
<div id="install-end" ></div>
|
||||
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<h1>Schwebende Freundschafts/Kontakt Benachrichtigungen</h1>
|
||||
|
||||
<div id="notification-show-hide-wrapper" >
|
||||
<a href="$hide_url" id="notification-show-hide-link">$hide_text</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
<h3>Passwort vergessen?</h3>
|
||||
|
||||
<p id="lostpass-desc">
|
||||
Trage deine EMail Adresse ein um ein neues Passwort anzufordern. Du wirst eine EMail mit weiteren Anweisungen erhalten.
|
||||
</p>
|
||||
|
||||
<form action="lostpass" method="post" >
|
||||
<div id="login-name-wrapper">
|
||||
<label for="login-name" id="label-login-name">Spitzname oder EMail: </label>
|
||||
<input type="text" maxlength="60" name="login-name" id="login-name" value="" />
|
||||
</div>
|
||||
<div id="login-extra-end"></div>
|
||||
<div id="login-submit-wrapper" >
|
||||
<input type="submit" name="submit" id="lostpass-submit-button" value="Reset" />
|
||||
</div>
|
||||
<div id="login-submit-end"></div>
|
||||
</form>
|
||||
|
||||
3600
view/de/messages.po
Normal file
|
|
@ -0,0 +1,3600 @@
|
|||
# FRIENDIKA Distributed Social Network
|
||||
# Copyright (C) 2010, 2011 Mike Macgirvin
|
||||
# This file is distributed under the same license as the Friendika package.
|
||||
# Mike Macgirvin, 2010
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendika\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.friendika.com/\n"
|
||||
"POT-Creation-Date: 2011-05-10 14:13+0200\n"
|
||||
"PO-Revision-Date: 2011-05-17 14:10+0000\n"
|
||||
"Last-Translator: bavatar <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.net/projects/p/friendika/team/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: ../../index.php:210
|
||||
msgid "Not Found"
|
||||
msgstr "Nicht gefunden"
|
||||
|
||||
#: ../../index.php:211
|
||||
msgid "Page not found."
|
||||
msgstr "Seite nicht gefunden."
|
||||
|
||||
#: ../../index.php:266 ../../mod/profperm.php:19 ../../mod/group.php:67
|
||||
msgid "Permission denied"
|
||||
msgstr "Zugriff verweigert"
|
||||
|
||||
#: ../../index.php:267 ../../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:144
|
||||
#: ../../mod/profile_photo.php:155 ../../mod/regmod.php:16
|
||||
#: ../../mod/profiles.php:7 ../../mod/profiles.php:227
|
||||
#: ../../mod/settings.php:15 ../../mod/settings.php:20
|
||||
#: ../../mod/settings.php:251 ../../mod/photos.php:89 ../../mod/photos.php:798
|
||||
#: ../../mod/display.php:138 ../../mod/editpost.php:10 ../../mod/invite.php:13
|
||||
#: ../../mod/invite.php:54 ../../mod/contacts.php:106
|
||||
#: ../../mod/register.php:25 ../../mod/install.php:93 ../../mod/network.php:6
|
||||
#: ../../mod/notifications.php:56 ../../mod/crepair.php:54
|
||||
#: ../../mod/item.php:57 ../../mod/item.php:680 ../../mod/message.php:8
|
||||
#: ../../mod/message.php:116 ../../mod/dfrn_confirm.php:53
|
||||
#: ../../mod/viewcontacts.php:21 ../../mod/group.php:19
|
||||
#: ../../addon/facebook/facebook.php:246
|
||||
msgid "Permission denied."
|
||||
msgstr "Zugriff verweigert."
|
||||
|
||||
#: ../../boot.php:385
|
||||
msgid "Delete this item?"
|
||||
msgstr "Diesen Beitrag löschen?"
|
||||
|
||||
#: ../../boot.php:386 ../../mod/photos.php:1130 ../../mod/photos.php:1169
|
||||
#: ../../mod/photos.php:1200 ../../include/conversation.php:375
|
||||
msgid "Comment"
|
||||
msgstr "Kommentar"
|
||||
|
||||
#: ../../boot.php:834
|
||||
msgid "Create a New Account"
|
||||
msgstr "Neuen Account erstellen"
|
||||
|
||||
#: ../../boot.php:835 ../../mod/register.php:471 ../../include/nav.php:59
|
||||
msgid "Register"
|
||||
msgstr "Registrieren"
|
||||
|
||||
#: ../../boot.php:841
|
||||
msgid "Nickname or Email address: "
|
||||
msgstr "Spitzname oder Email-Adresse: "
|
||||
|
||||
#: ../../boot.php:842
|
||||
msgid "Password: "
|
||||
msgstr "Passwort: "
|
||||
|
||||
#: ../../boot.php:843 ../../boot.php:849 ../../include/nav.php:44
|
||||
msgid "Login"
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: ../../boot.php:847
|
||||
msgid "Nickname/Email/OpenID: "
|
||||
msgstr "Spitzname/Email/OpenID: "
|
||||
|
||||
#: ../../boot.php:848
|
||||
msgid "Password (if not OpenID): "
|
||||
msgstr "Passwort (falls nicht OpenID): "
|
||||
|
||||
#: ../../boot.php:851
|
||||
msgid "Forgot your password?"
|
||||
msgstr "Passwort vergessen?"
|
||||
|
||||
#: ../../boot.php:852 ../../mod/lostpass.php:78
|
||||
msgid "Password Reset"
|
||||
msgstr "Passwort zurücksetzen"
|
||||
|
||||
#: ../../boot.php:865 ../../include/nav.php:41
|
||||
msgid "Logout"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: ../../boot.php:1106
|
||||
msgid "prev"
|
||||
msgstr "vorige"
|
||||
|
||||
#: ../../boot.php:1108
|
||||
msgid "first"
|
||||
msgstr "erste"
|
||||
|
||||
#: ../../boot.php:1137
|
||||
msgid "last"
|
||||
msgstr "letzte"
|
||||
|
||||
#: ../../boot.php:1140
|
||||
msgid "next"
|
||||
msgstr "nächste"
|
||||
|
||||
#: ../../boot.php:2001
|
||||
msgid "No contacts"
|
||||
msgstr "Keine Kontakte"
|
||||
|
||||
#: ../../boot.php:2009
|
||||
#, php-format
|
||||
msgid "%d Contact"
|
||||
msgid_plural "%d Contacts"
|
||||
msgstr[0] "%d Kontakt"
|
||||
msgstr[1] "%d Kontakte"
|
||||
|
||||
#: ../../boot.php:2014 ../../mod/viewcontacts.php:25
|
||||
msgid "View Contacts"
|
||||
msgstr "Kontakte anzeigen"
|
||||
|
||||
#: ../../boot.php:2060 ../../mod/search.php:26 ../../include/nav.php:71
|
||||
msgid "Search"
|
||||
msgstr "Suche"
|
||||
|
||||
#: ../../boot.php:2216 ../../mod/profile.php:11
|
||||
msgid "No profile"
|
||||
msgstr "Kein Profil"
|
||||
|
||||
#: ../../boot.php:2275
|
||||
msgid "Connect"
|
||||
msgstr "Verbinden"
|
||||
|
||||
#: ../../boot.php:2290
|
||||
msgid "Location:"
|
||||
msgstr "Ort:"
|
||||
|
||||
#: ../../boot.php:2294
|
||||
msgid ", "
|
||||
msgstr ", "
|
||||
|
||||
#: ../../boot.php:2302 ../../include/profile_advanced.php:23
|
||||
msgid "Gender:"
|
||||
msgstr "Geschlecht:"
|
||||
|
||||
#: ../../boot.php:2306
|
||||
msgid "Status:"
|
||||
msgstr "Status:"
|
||||
|
||||
#: ../../boot.php:2308 ../../include/profile_advanced.php:103
|
||||
msgid "Homepage:"
|
||||
msgstr "Homepage:"
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Monday"
|
||||
msgstr "Montag"
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Tuesday"
|
||||
msgstr "Dienstag"
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Wednesday"
|
||||
msgstr "Mittwoch"
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Thursday"
|
||||
msgstr "Donnerstag"
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Friday"
|
||||
msgstr "Freitag"
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Saturday"
|
||||
msgstr "Samstag"
|
||||
|
||||
#: ../../boot.php:2399
|
||||
msgid "Sunday"
|
||||
msgstr "Sonntag"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "January"
|
||||
msgstr "Januar"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "February"
|
||||
msgstr "Februar"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "March"
|
||||
msgstr "März"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "April"
|
||||
msgstr "April"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "May"
|
||||
msgstr "Mai"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "June"
|
||||
msgstr "Juni"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "July"
|
||||
msgstr "Juli"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "August"
|
||||
msgstr "August"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "September"
|
||||
msgstr "September"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "October"
|
||||
msgstr "Oktober"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "November"
|
||||
msgstr "November"
|
||||
|
||||
#: ../../boot.php:2403
|
||||
msgid "December"
|
||||
msgstr "Dezember"
|
||||
|
||||
#: ../../boot.php:2418
|
||||
msgid "g A l F d"
|
||||
msgstr "g A l F d"
|
||||
|
||||
#: ../../boot.php:2435
|
||||
msgid "Birthday Reminders"
|
||||
msgstr "Geburtstagserinnerungen"
|
||||
|
||||
#: ../../boot.php:2436
|
||||
msgid "Birthdays this week:"
|
||||
msgstr "Geburtstage diese Woche:"
|
||||
|
||||
#: ../../boot.php:2437
|
||||
msgid "(Adjusted for local time)"
|
||||
msgstr "(an die lokale Zeit angepasst)"
|
||||
|
||||
#: ../../boot.php:2448
|
||||
msgid "[today]"
|
||||
msgstr "[heute]"
|
||||
|
||||
#: ../../boot.php:2654
|
||||
msgid "link to source"
|
||||
msgstr "Link zum original Posting"
|
||||
|
||||
#: ../../mod/manage.php:37
|
||||
#, php-format
|
||||
msgid "Welcome back %s"
|
||||
msgstr "Willkommen zurück %s"
|
||||
|
||||
#: ../../mod/manage.php:87
|
||||
msgid "Manage Identities and/or Pages"
|
||||
msgstr "Verwalte Identitäten und/oder Seiten"
|
||||
|
||||
#: ../../mod/manage.php:90
|
||||
msgid ""
|
||||
"(Toggle between different identities or community/group pages which share "
|
||||
"your account details.)"
|
||||
msgstr ""
|
||||
"(Wähle zwischen verschiedenen Identitäten oder Gemeinschafts/Gruppen Seiten "
|
||||
"die deine Accountdetails teilen.)"
|
||||
|
||||
#: ../../mod/manage.php:92
|
||||
msgid "Select an identity to manage: "
|
||||
msgstr "Wähle eine Identität zum Verwalten:"
|
||||
|
||||
#: ../../mod/manage.php:106 ../../mod/profiles.php:370
|
||||
#: ../../mod/settings.php:426 ../../mod/photos.php:826
|
||||
#: ../../mod/photos.php:883 ../../mod/photos.php:1091
|
||||
#: ../../mod/photos.php:1131 ../../mod/photos.php:1170
|
||||
#: ../../mod/photos.php:1201 ../../mod/invite.php:68
|
||||
#: ../../mod/contacts.php:264 ../../mod/install.php:133
|
||||
#: ../../mod/crepair.php:100 ../../mod/group.php:76 ../../mod/group.php:159
|
||||
#: ../../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:293
|
||||
#: ../../addon/randplace/randplace.php:179 ../../include/conversation.php:376
|
||||
msgid "Submit"
|
||||
msgstr "Senden"
|
||||
|
||||
#: ../../mod/wall_upload.php:56 ../../mod/profile_photo.php:109
|
||||
#, php-format
|
||||
msgid "Image exceeds size limit of %d"
|
||||
msgstr "Bildgröße überschreitet das Limit von %d"
|
||||
|
||||
#: ../../mod/wall_upload.php:65 ../../mod/profile_photo.php:118
|
||||
#: ../../mod/photos.php:575
|
||||
msgid "Unable to process image."
|
||||
msgstr "Konnte das Bild nicht bearbeiten."
|
||||
|
||||
#: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88
|
||||
#: ../../mod/wall_upload.php:95 ../../mod/item.php:214
|
||||
#: ../../mod/message.php:93
|
||||
msgid "Wall Photos"
|
||||
msgstr "Pinnwand Bilder"
|
||||
|
||||
#: ../../mod/wall_upload.php:82 ../../mod/profile_photo.php:241
|
||||
#: ../../mod/photos.php:593
|
||||
msgid "Image upload failed."
|
||||
msgstr "Hochladen des Bildes gescheitert."
|
||||
|
||||
#: ../../mod/dfrn_notify.php:189 ../../mod/dfrn_notify.php:405
|
||||
#: ../../mod/dfrn_notify.php:495 ../../mod/regmod.php:94
|
||||
#: ../../mod/register.php:333 ../../mod/register.php:373
|
||||
#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:40
|
||||
#: ../../mod/lostpass.php:102 ../../mod/item.php:480 ../../mod/item.php:506
|
||||
#: ../../mod/dfrn_confirm.php:657 ../../include/items.php:1435
|
||||
msgid "Administrator"
|
||||
msgstr "Administrator"
|
||||
|
||||
#: ../../mod/dfrn_notify.php:191
|
||||
msgid "noreply"
|
||||
msgstr "noreply"
|
||||
|
||||
#: ../../mod/dfrn_notify.php:249
|
||||
msgid "New mail received at "
|
||||
msgstr "New mail received at "
|
||||
|
||||
#: ../../mod/dfrn_notify.php:403 ../../mod/dfrn_notify.php:493
|
||||
#, php-format
|
||||
msgid "%s commented on an item at %s"
|
||||
msgstr "%s hat einen Beitrag auf %s kommentiert"
|
||||
|
||||
#: ../../mod/profile.php:112
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: ../../mod/profile.php:113 ../../mod/profperm.php:94
|
||||
#: ../../include/profile_advanced.php:7
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: ../../mod/profile.php:114
|
||||
msgid "Photos"
|
||||
msgstr "Bilder"
|
||||
|
||||
#: ../../mod/profile.php:262 ../../mod/display.php:147
|
||||
#: ../../mod/register.php:450 ../../mod/network.php:259
|
||||
msgid ""
|
||||
"Shared content is covered by the <a "
|
||||
"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
|
||||
"Attribution 3.0</a> license."
|
||||
msgstr ""
|
||||
"Geteilte Inhalte innerhalb des Friendika Netzwerks sind unter der <a "
|
||||
"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
|
||||
"Attribution 3.0</a> verfügbar."
|
||||
|
||||
#: ../../mod/follow.php:16 ../../mod/dfrn_request.php:340
|
||||
msgid "Disallowed profile URL."
|
||||
msgstr "Nicht erlaubte Profil URL."
|
||||
|
||||
#: ../../mod/follow.php:39
|
||||
msgid "The profile address specified does not provide adequate information."
|
||||
msgstr "Die angegebene Profiladresse liefert unzureichende Informationen."
|
||||
|
||||
#: ../../mod/follow.php:45
|
||||
msgid ""
|
||||
"Limited profile. This person will be unable to receive direct/personal "
|
||||
"notifications from you."
|
||||
msgstr ""
|
||||
"Eingeschränktes Profil. Diese Person wird keine direkten/privaten "
|
||||
"Nachrichten von dir erhalten können."
|
||||
|
||||
#: ../../mod/follow.php:100
|
||||
msgid "Unable to retrieve contact information."
|
||||
msgstr "Konnte die Kontaktinformationen nicht empfangen."
|
||||
|
||||
#: ../../mod/follow.php:146
|
||||
msgid "following"
|
||||
msgstr "folgen"
|
||||
|
||||
#: ../../mod/profile_photo.php:28
|
||||
msgid "Image uploaded but image cropping failed."
|
||||
msgstr "Bilder hochgeladen aber das Zuschneiden ist fehlgeschlagen."
|
||||
|
||||
#: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65
|
||||
#: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:160
|
||||
#: ../../mod/profile_photo.php:236 ../../mod/profile_photo.php:245
|
||||
#: ../../mod/photos.php:110 ../../mod/photos.php:535 ../../mod/photos.php:875
|
||||
#: ../../mod/photos.php:890 ../../mod/register.php:288
|
||||
#: ../../mod/register.php:295 ../../mod/register.php:302
|
||||
msgid "Profile Photos"
|
||||
msgstr "Profilbilder"
|
||||
|
||||
#: ../../mod/profile_photo.php:61 ../../mod/profile_photo.php:68
|
||||
#: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:248
|
||||
#, php-format
|
||||
msgid "Image size reduction [%s] failed."
|
||||
msgstr "Verkleinern der Bildgröße von [%s] ist gescheitert."
|
||||
|
||||
#: ../../mod/profile_photo.php:95
|
||||
msgid "Unable to process image"
|
||||
msgstr "Bild konnte nicht verarbeitet werden"
|
||||
|
||||
#: ../../mod/profile_photo.php:193
|
||||
msgid "Upload File:"
|
||||
msgstr "Datei hochladen:"
|
||||
|
||||
#: ../../mod/profile_photo.php:194
|
||||
msgid "Upload Profile Photo"
|
||||
msgstr "Profilbild hochladen"
|
||||
|
||||
#: ../../mod/profile_photo.php:195
|
||||
msgid "Upload"
|
||||
msgstr "Hochladen"
|
||||
|
||||
#: ../../mod/profile_photo.php:196 ../../mod/settings.php:398
|
||||
msgid "or"
|
||||
msgstr "oder"
|
||||
|
||||
#: ../../mod/profile_photo.php:196
|
||||
msgid "skip this step"
|
||||
msgstr "diesen Schritt überspringen"
|
||||
|
||||
#: ../../mod/profile_photo.php:196
|
||||
msgid "select a photo from your photo albums"
|
||||
msgstr "wähle ein Foto von deinen Fotoalben"
|
||||
|
||||
#: ../../mod/profile_photo.php:209
|
||||
msgid "Crop Image"
|
||||
msgstr "Bild Zurechtschneiden"
|
||||
|
||||
#: ../../mod/profile_photo.php:210
|
||||
msgid "Please adjust the image cropping for optimum viewing."
|
||||
msgstr ""
|
||||
"Passe bitte den Bildausschnitt an damit das Bild optimal dargestellt werden "
|
||||
"kann."
|
||||
|
||||
#: ../../mod/profile_photo.php:211
|
||||
msgid "Done Editing"
|
||||
msgstr "Bearbeitung abgeschlossen"
|
||||
|
||||
#: ../../mod/profile_photo.php:239
|
||||
msgid "Image uploaded successfully."
|
||||
msgstr "Bild erfolgreich auf den Server geladen."
|
||||
|
||||
#: ../../mod/home.php:23
|
||||
#, php-format
|
||||
msgid "Welcome to %s"
|
||||
msgstr "Willkommen zu %s"
|
||||
|
||||
#: ../../mod/regmod.php:10
|
||||
msgid "Please login."
|
||||
msgstr "Bitte melde dich an."
|
||||
|
||||
#: ../../mod/regmod.php:54
|
||||
#, php-format
|
||||
msgid "Registration revoked for %s"
|
||||
msgstr "Registration für %s wurde zurück gezogen"
|
||||
|
||||
#: ../../mod/regmod.php:92 ../../mod/register.php:331
|
||||
#, php-format
|
||||
msgid "Registration details for %s"
|
||||
msgstr "Details der Registration von %s"
|
||||
|
||||
#: ../../mod/regmod.php:99
|
||||
msgid "Account approved."
|
||||
msgstr "Account freigegeben."
|
||||
|
||||
#: ../../mod/profiles.php:21 ../../mod/profiles.php:237
|
||||
#: ../../mod/profiles.php:342 ../../mod/dfrn_confirm.php:62
|
||||
msgid "Profile not found."
|
||||
msgstr "Profil nicht gefunden."
|
||||
|
||||
#: ../../mod/profiles.php:28
|
||||
msgid "Profile Name is required."
|
||||
msgstr "Profilname ist erforderlich."
|
||||
|
||||
#: ../../mod/profiles.php:199
|
||||
msgid "Profile updated."
|
||||
msgstr "Profil aktualisiert."
|
||||
|
||||
#: ../../mod/profiles.php:254
|
||||
msgid "Profile deleted."
|
||||
msgstr "Profil gelöscht."
|
||||
|
||||
#: ../../mod/profiles.php:270 ../../mod/profiles.php:301
|
||||
msgid "Profile-"
|
||||
msgstr "Profil-"
|
||||
|
||||
#: ../../mod/profiles.php:289 ../../mod/profiles.php:328
|
||||
msgid "New profile created."
|
||||
msgstr "Neues Profil angelegt."
|
||||
|
||||
#: ../../mod/profiles.php:307
|
||||
msgid "Profile unavailable to clone."
|
||||
msgstr "Profil nicht zum Duplizieren verfügbar."
|
||||
|
||||
#: ../../mod/profiles.php:354
|
||||
msgid "Hide my contact/friend list from viewers of this profile?"
|
||||
msgstr "Verberge meine Kontakte/Freunde von Betrachtern dieses Profils?"
|
||||
|
||||
#: ../../mod/profiles.php:355 ../../mod/settings.php:350
|
||||
#: ../../mod/settings.php:362 ../../mod/register.php:444
|
||||
#: ../../mod/dfrn_request.php:634
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
#: ../../mod/profiles.php:356 ../../mod/settings.php:351
|
||||
#: ../../mod/settings.php:363 ../../mod/register.php:445
|
||||
#: ../../mod/dfrn_request.php:635
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
#: ../../mod/profiles.php:369
|
||||
msgid "Edit Profile Details"
|
||||
msgstr "Profil bearbeiten"
|
||||
|
||||
#: ../../mod/profiles.php:371
|
||||
msgid "View this profile"
|
||||
msgstr "Dieses Profil anzeigen"
|
||||
|
||||
#: ../../mod/profiles.php:372
|
||||
msgid "Create a new profile using these settings"
|
||||
msgstr "Neues Profil anlegen und diese Einstellungen verwenden"
|
||||
|
||||
#: ../../mod/profiles.php:373
|
||||
msgid "Clone this profile"
|
||||
msgstr "Dieses Profil dublizieren"
|
||||
|
||||
#: ../../mod/profiles.php:374
|
||||
msgid "Delete this profile"
|
||||
msgstr "Dieses Profil löschen"
|
||||
|
||||
#: ../../mod/profiles.php:375
|
||||
msgid "Profile Name:"
|
||||
msgstr "Profilname:"
|
||||
|
||||
#: ../../mod/profiles.php:376
|
||||
msgid "Your Full Name:"
|
||||
msgstr "Dein kompletter Name:"
|
||||
|
||||
#: ../../mod/profiles.php:377
|
||||
msgid "Title/Description:"
|
||||
msgstr "Titel/Beschreibung:"
|
||||
|
||||
#: ../../mod/profiles.php:378
|
||||
msgid "Your Gender:"
|
||||
msgstr "Dein Geschlecht:"
|
||||
|
||||
#: ../../mod/profiles.php:379
|
||||
msgid "Birthday (y/m/d):"
|
||||
msgstr "Geburtstag (y/m/d):"
|
||||
|
||||
#: ../../mod/profiles.php:380
|
||||
msgid "Street Address:"
|
||||
msgstr "Adresse:"
|
||||
|
||||
#: ../../mod/profiles.php:381
|
||||
msgid "Locality/City:"
|
||||
msgstr "Wohnort/Stadt:"
|
||||
|
||||
#: ../../mod/profiles.php:382
|
||||
msgid "Postal/Zip Code:"
|
||||
msgstr "Postleitzahl:"
|
||||
|
||||
#: ../../mod/profiles.php:383
|
||||
msgid "Country:"
|
||||
msgstr "Land:"
|
||||
|
||||
#: ../../mod/profiles.php:384
|
||||
msgid "Region/State:"
|
||||
msgstr "Region/Bundesstaat:"
|
||||
|
||||
#: ../../mod/profiles.php:385
|
||||
msgid "<span class=\"heart\">♥</span> Marital Status:"
|
||||
msgstr "<span class=\"heart\">♥</span> Beziehungs Status:"
|
||||
|
||||
#: ../../mod/profiles.php:386
|
||||
msgid "Who: (if applicable)"
|
||||
msgstr "Wer: (falls anwendbar)"
|
||||
|
||||
#: ../../mod/profiles.php:387
|
||||
msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
|
||||
msgstr "Beispiel: cathy123, Cathy Williams, cathy@example.com"
|
||||
|
||||
#: ../../mod/profiles.php:388 ../../include/profile_advanced.php:90
|
||||
msgid "Sexual Preference:"
|
||||
msgstr "Sexuelle Vorlieben:"
|
||||
|
||||
#: ../../mod/profiles.php:389
|
||||
msgid "Homepage URL:"
|
||||
msgstr "Adresse der Homepage:"
|
||||
|
||||
#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:115
|
||||
msgid "Political Views:"
|
||||
msgstr "Politische Ansichten:"
|
||||
|
||||
#: ../../mod/profiles.php:391
|
||||
msgid "Religious Views:"
|
||||
msgstr "Religiöse Ansichten:"
|
||||
|
||||
#: ../../mod/profiles.php:392
|
||||
msgid "Public Keywords:"
|
||||
msgstr "Öffentliche Schlüsselwörter:"
|
||||
|
||||
#: ../../mod/profiles.php:393
|
||||
msgid "Private Keywords:"
|
||||
msgstr "Private Schlüsselwörter:"
|
||||
|
||||
#: ../../mod/profiles.php:394
|
||||
msgid "Example: fishing photography software"
|
||||
msgstr "Beispiel: Fischen Photographie Software"
|
||||
|
||||
#: ../../mod/profiles.php:395
|
||||
msgid "(Used for suggesting potential friends, can be seen by others)"
|
||||
msgstr ""
|
||||
"(Wird verwendet um potentielle Freunde zu finden, könnte von Fremden "
|
||||
"eingesehen werden)"
|
||||
|
||||
#: ../../mod/profiles.php:396
|
||||
msgid "(Used for searching profiles, never shown to others)"
|
||||
msgstr ""
|
||||
"(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)"
|
||||
|
||||
#: ../../mod/profiles.php:397
|
||||
msgid "Tell us about yourself..."
|
||||
msgstr "Erzähle und ein bisschen von dir..."
|
||||
|
||||
#: ../../mod/profiles.php:398
|
||||
msgid "Hobbies/Interests"
|
||||
msgstr "Hobbies/Interessen"
|
||||
|
||||
#: ../../mod/profiles.php:399
|
||||
msgid "Contact information and Social Networks"
|
||||
msgstr "Kontaktinformationen und Soziale Netzwerke"
|
||||
|
||||
#: ../../mod/profiles.php:400
|
||||
msgid "Musical interests"
|
||||
msgstr "Musikalische Interessen"
|
||||
|
||||
#: ../../mod/profiles.php:401
|
||||
msgid "Books, literature"
|
||||
msgstr "Literatur/Bücher"
|
||||
|
||||
#: ../../mod/profiles.php:402
|
||||
msgid "Television"
|
||||
msgstr "Fernsehen"
|
||||
|
||||
#: ../../mod/profiles.php:403
|
||||
msgid "Film/dance/culture/entertainment"
|
||||
msgstr "Filme/Tänze/Kultur/Unterhaltung"
|
||||
|
||||
#: ../../mod/profiles.php:404
|
||||
msgid "Love/romance"
|
||||
msgstr "Liebesleben"
|
||||
|
||||
#: ../../mod/profiles.php:405
|
||||
msgid "Work/employment"
|
||||
msgstr "Arbeit/Beschäftigung"
|
||||
|
||||
#: ../../mod/profiles.php:406
|
||||
msgid "School/education"
|
||||
msgstr "Schule/Ausbildung"
|
||||
|
||||
#: ../../mod/profiles.php:411
|
||||
msgid ""
|
||||
"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
|
||||
"be visible to anybody using the internet."
|
||||
msgstr ""
|
||||
"Dies ist dein <strong>öffentliches</strong> Profil.<br />Es "
|
||||
"<strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein."
|
||||
|
||||
#: ../../mod/profiles.php:421 ../../mod/directory.php:97
|
||||
msgid "Age: "
|
||||
msgstr "Alter: "
|
||||
|
||||
#: ../../mod/profiles.php:456 ../../include/nav.php:109
|
||||
msgid "Profiles"
|
||||
msgstr "Profile"
|
||||
|
||||
#: ../../mod/profiles.php:457
|
||||
msgid "Change profile photo"
|
||||
msgstr "Profilbild ändern"
|
||||
|
||||
#: ../../mod/profiles.php:458
|
||||
msgid "Create New Profile"
|
||||
msgstr "Neues Profil anlegen"
|
||||
|
||||
#: ../../mod/profiles.php:468
|
||||
msgid "Profile Image"
|
||||
msgstr "Profilbild"
|
||||
|
||||
#: ../../mod/profiles.php:470
|
||||
msgid "Visible to everybody"
|
||||
msgstr "Für jeden sichtbar"
|
||||
|
||||
#: ../../mod/profiles.php:471
|
||||
msgid "Edit visibility"
|
||||
msgstr "Sichtbarkeit bearbeiten"
|
||||
|
||||
#: ../../mod/settings.php:38
|
||||
msgid "Passwords do not match. Password unchanged."
|
||||
msgstr ""
|
||||
"Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert."
|
||||
|
||||
#: ../../mod/settings.php:43
|
||||
msgid "Empty passwords are not allowed. Password unchanged."
|
||||
msgstr "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert."
|
||||
|
||||
#: ../../mod/settings.php:54
|
||||
msgid "Password changed."
|
||||
msgstr "Passwort ändern."
|
||||
|
||||
#: ../../mod/settings.php:56
|
||||
msgid "Password update failed. Please try again."
|
||||
msgstr ""
|
||||
"Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal."
|
||||
|
||||
#: ../../mod/settings.php:138
|
||||
msgid " Please use a shorter name."
|
||||
msgstr " Bitte verwende einen kürzeren Namen."
|
||||
|
||||
#: ../../mod/settings.php:140
|
||||
msgid " Name too short."
|
||||
msgstr " Name ist zu kurz."
|
||||
|
||||
#: ../../mod/settings.php:146
|
||||
msgid " Not valid email."
|
||||
msgstr " Keine gültige EMail."
|
||||
|
||||
#: ../../mod/settings.php:148
|
||||
msgid " Cannot change to that email."
|
||||
msgstr " Cannot change to that email."
|
||||
|
||||
#: ../../mod/settings.php:206
|
||||
msgid "Settings updated."
|
||||
msgstr "Einstellungen aktualisiert."
|
||||
|
||||
#: ../../mod/settings.php:256 ../../mod/settings.php:418
|
||||
msgid "Plugin Settings"
|
||||
msgstr "Plugin Einstellungen"
|
||||
|
||||
#: ../../mod/settings.php:257 ../../mod/settings.php:417
|
||||
msgid "Account Settings"
|
||||
msgstr "Account Einstellungen"
|
||||
|
||||
#: ../../mod/settings.php:263
|
||||
msgid "No Plugin settings configured"
|
||||
msgstr "Keine Erweiterungen konfiguriert"
|
||||
|
||||
#: ../../mod/settings.php:323
|
||||
msgid "Normal Account"
|
||||
msgstr "Normaler Account"
|
||||
|
||||
#: ../../mod/settings.php:324
|
||||
msgid "This account is a normal personal profile"
|
||||
msgstr "Dieser Account ist ein normales persönliches Profil"
|
||||
|
||||
#: ../../mod/settings.php:325
|
||||
msgid "Soapbox Account"
|
||||
msgstr "Sandkasten Accunt"
|
||||
|
||||
#: ../../mod/settings.php:326
|
||||
msgid "Automatically approve all connection/friend requests as read-only fans"
|
||||
msgstr "Freundschaftsanfragen werden automatisch als Nurlese-Fans akzeptiert"
|
||||
|
||||
#: ../../mod/settings.php:327
|
||||
msgid "Community/Celebrity Account"
|
||||
msgstr "Gemeinschafts/Berühmtheiten Account"
|
||||
|
||||
#: ../../mod/settings.php:328
|
||||
msgid ""
|
||||
"Automatically approve all connection/friend requests as read-write fans"
|
||||
msgstr ""
|
||||
"Freundschaftsanfragen werden automatisch als Lese-und-Schreib-Fans "
|
||||
"akzeptiert"
|
||||
|
||||
#: ../../mod/settings.php:329
|
||||
msgid "Automatic Friend Account"
|
||||
msgstr "Automatischer Freundes Account"
|
||||
|
||||
#: ../../mod/settings.php:330
|
||||
msgid "Automatically approve all connection/friend requests as friends"
|
||||
msgstr "Freundschaftsanfragen werden automatisch als Freund akzeptiert"
|
||||
|
||||
#: ../../mod/settings.php:339
|
||||
msgid "OpenID: "
|
||||
msgstr "OpenID: "
|
||||
|
||||
#: ../../mod/settings.php:339
|
||||
msgid " (Optional) Allow this OpenID to login to this account."
|
||||
msgstr ""
|
||||
" (Optional) Erlaube dieser OpenID sich für diesen Account anzumelden."
|
||||
|
||||
#: ../../mod/settings.php:349
|
||||
msgid "Publish your default profile in site directory?"
|
||||
msgstr "Dein Standard-Profil im Verzeichnis dieser Seite veröffentliche?"
|
||||
|
||||
#: ../../mod/settings.php:361
|
||||
msgid "Publish your default profile in global social directory?"
|
||||
msgstr "Dein Standard-Profil im weltweiten Verzeichnis veröffentlichen?"
|
||||
|
||||
#: ../../mod/settings.php:377
|
||||
msgid "Profile is <strong>not published</strong>."
|
||||
msgstr "Profil ist <strong>nicht veröffentlicht</strong>."
|
||||
|
||||
#: ../../mod/settings.php:403
|
||||
msgid "Your Identity Address is"
|
||||
msgstr "Die Adresse deines Profils lautet:"
|
||||
|
||||
#: ../../mod/settings.php:413
|
||||
msgid "Export Personal Data"
|
||||
msgstr "Perönliche Daten exportieren"
|
||||
|
||||
#: ../../mod/settings.php:419
|
||||
msgid "Basic Settings"
|
||||
msgstr "Grundeinstellungen"
|
||||
|
||||
#: ../../mod/settings.php:420 ../../include/profile_advanced.php:10
|
||||
msgid "Full Name:"
|
||||
msgstr "Kompletter Name:"
|
||||
|
||||
#: ../../mod/settings.php:421
|
||||
msgid "Email Address:"
|
||||
msgstr "Email Adresse:"
|
||||
|
||||
#: ../../mod/settings.php:422
|
||||
msgid "Your Timezone:"
|
||||
msgstr "Deine Zeitzone:"
|
||||
|
||||
#: ../../mod/settings.php:423
|
||||
msgid "Default Post Location:"
|
||||
msgstr "Standardstandort:"
|
||||
|
||||
#: ../../mod/settings.php:424
|
||||
msgid "Use Browser Location:"
|
||||
msgstr "Verwende den Standort des Browsers:"
|
||||
|
||||
#: ../../mod/settings.php:425
|
||||
msgid "Display Theme:"
|
||||
msgstr "Theme:"
|
||||
|
||||
#: ../../mod/settings.php:427
|
||||
msgid "Security and Privacy Settings"
|
||||
msgstr "Sicherheits und Privatsphären Einstellungen"
|
||||
|
||||
#: ../../mod/settings.php:428
|
||||
msgid "Maximum Friend Requests/Day:"
|
||||
msgstr "Maximale Anzahl von Freundschaftsanfragen/Tag:"
|
||||
|
||||
#: ../../mod/settings.php:429
|
||||
msgid "(to prevent spam abuse)"
|
||||
msgstr "(um SPAM zu vermeiden)"
|
||||
|
||||
#: ../../mod/settings.php:430
|
||||
msgid "Allow friends to post to your profile page:"
|
||||
msgstr "Erlaube es Freunden Beiträge auf deiner Pinnwand zu posten:"
|
||||
|
||||
#: ../../mod/settings.php:431
|
||||
msgid "Automatically expire (delete) posts older than"
|
||||
msgstr "Automatisch Beiträge verfallen lassen (löschen) die älter sind als"
|
||||
|
||||
#: ../../mod/settings.php:432 ../../include/datetime.php:154
|
||||
msgid "days"
|
||||
msgstr "Tage"
|
||||
|
||||
#: ../../mod/settings.php:433
|
||||
msgid "Notification Settings"
|
||||
msgstr "Benachrichtigungs Einstellungen"
|
||||
|
||||
#: ../../mod/settings.php:434
|
||||
msgid "Send a notification email when:"
|
||||
msgstr "Benachrichtigungs-Email senden wenn:"
|
||||
|
||||
#: ../../mod/settings.php:435
|
||||
msgid "You receive an introduction"
|
||||
msgstr "Du eine Vorstellung erhälst"
|
||||
|
||||
#: ../../mod/settings.php:436
|
||||
msgid "Your introductions are confirmed"
|
||||
msgstr "Eine deiner Vorstellungen angenommen wurde"
|
||||
|
||||
#: ../../mod/settings.php:437
|
||||
msgid "Someone writes on your profile wall"
|
||||
msgstr "Jemand etwas auf deiner Pinnwand postet"
|
||||
|
||||
#: ../../mod/settings.php:438
|
||||
msgid "Someone writes a followup comment"
|
||||
msgstr "Jemand einen Kommentar verfasst"
|
||||
|
||||
#: ../../mod/settings.php:439
|
||||
msgid "You receive a private message"
|
||||
msgstr "Du eine private Nachricht erhälst"
|
||||
|
||||
#: ../../mod/settings.php:440
|
||||
msgid "Password Settings"
|
||||
msgstr "Passwort Einstellungen"
|
||||
|
||||
#: ../../mod/settings.php:441
|
||||
msgid "Leave password fields blank unless changing"
|
||||
msgstr "Lass die Passwort-Felder leer außer du willst das Passwort ändern"
|
||||
|
||||
#: ../../mod/settings.php:442
|
||||
msgid "New Password:"
|
||||
msgstr "Neues Passwort:"
|
||||
|
||||
#: ../../mod/settings.php:443
|
||||
msgid "Confirm:"
|
||||
msgstr "Bestätigen:"
|
||||
|
||||
#: ../../mod/settings.php:444
|
||||
msgid "Advanced Page Settings"
|
||||
msgstr "Erweiterte Seiten Einstellungen"
|
||||
|
||||
#: ../../mod/settings.php:459
|
||||
msgid "Default Post Permissions"
|
||||
msgstr "Grundeinstellung für Veröffentlichungen"
|
||||
|
||||
#: ../../mod/settings.php:460
|
||||
msgid "(click to open/close)"
|
||||
msgstr "(klicke zum öffnen/schließen)"
|
||||
|
||||
#: ../../mod/settings.php:473
|
||||
msgid "Email/Mailbox Setup"
|
||||
msgstr "Email/Postfach Einstellungen"
|
||||
|
||||
#: ../../mod/settings.php:474
|
||||
msgid ""
|
||||
"If you wish to communicate with email contacts using this service "
|
||||
"(optional), please specify how to connect to your mailbox."
|
||||
msgstr ""
|
||||
"Wenn du mit Email Kontakten über diesen Service kommunizieren möchtest "
|
||||
"(optional) gib bitte die Einstellungen für dein Postfach an."
|
||||
|
||||
#: ../../mod/settings.php:475
|
||||
msgid "IMAP server name:"
|
||||
msgstr "IMAP Server Name:"
|
||||
|
||||
#: ../../mod/settings.php:477
|
||||
msgid "IMAP port:"
|
||||
msgstr "IMAP Port:"
|
||||
|
||||
#: ../../mod/settings.php:479
|
||||
msgid "Security (TLS or SSL):"
|
||||
msgstr "Sicherheit (TLS oder SSL)"
|
||||
|
||||
#: ../../mod/settings.php:481
|
||||
msgid "Email login name:"
|
||||
msgstr "Email Login Name:"
|
||||
|
||||
#: ../../mod/settings.php:483
|
||||
msgid "Email password:"
|
||||
msgstr "Email Passwort:"
|
||||
|
||||
#: ../../mod/settings.php:484
|
||||
msgid "Reply-to address (Optional):"
|
||||
msgstr "Reply-to Adresse (Optional)"
|
||||
|
||||
#: ../../mod/settings.php:486
|
||||
msgid "Send public posts to all email contacts:"
|
||||
msgstr "Sende öffentliche Einträge an alle Email Kontakte:"
|
||||
|
||||
#: ../../mod/settings.php:488
|
||||
msgid "Email access is disabled on this site."
|
||||
msgstr "Zugriff auf Emails für diese Seite deaktiviert."
|
||||
|
||||
#: ../../mod/search.php:13 ../../mod/photos.php:676 ../../mod/display.php:7
|
||||
#: ../../mod/dfrn_request.php:591 ../../mod/directory.php:18
|
||||
#: ../../mod/viewcontacts.php:16
|
||||
msgid "Public access denied."
|
||||
msgstr "Öffentlicher Zugriff verweigert."
|
||||
|
||||
#: ../../mod/search.php:69
|
||||
msgid "No results."
|
||||
msgstr "Keine Ergebnisse."
|
||||
|
||||
#: ../../mod/photos.php:34
|
||||
msgid "Photo Albums"
|
||||
msgstr "Fotoalben"
|
||||
|
||||
#: ../../mod/photos.php:38 ../../mod/photos.php:110 ../../mod/photos.php:806
|
||||
#: ../../mod/photos.php:875 ../../mod/photos.php:890 ../../mod/photos.php:1278
|
||||
#: ../../mod/photos.php:1289 ../../include/Photo.php:233
|
||||
#: ../../include/Photo.php:240 ../../include/Photo.php:247
|
||||
#: ../../include/items.php:1027 ../../include/items.php:1030
|
||||
#: ../../include/items.php:1033
|
||||
msgid "Contact Photos"
|
||||
msgstr "Kontaktbilder"
|
||||
|
||||
#: ../../mod/photos.php:99
|
||||
msgid "Contact information unavailable"
|
||||
msgstr "Kontakt Informationen nicht verfügbar"
|
||||
|
||||
#: ../../mod/photos.php:120
|
||||
msgid "Album not found."
|
||||
msgstr "Album nicht gefunden."
|
||||
|
||||
#: ../../mod/photos.php:138 ../../mod/photos.php:884
|
||||
msgid "Delete Album"
|
||||
msgstr "Album löschen"
|
||||
|
||||
#: ../../mod/photos.php:201 ../../mod/photos.php:1092
|
||||
msgid "Delete Photo"
|
||||
msgstr "Foto löschen"
|
||||
|
||||
#: ../../mod/photos.php:473
|
||||
msgid "was tagged in a"
|
||||
msgstr "was tagged in a"
|
||||
|
||||
#: ../../mod/photos.php:473 ../../mod/like.php:110
|
||||
#: ../../include/conversation.php:20
|
||||
msgid "photo"
|
||||
msgstr "Foto"
|
||||
|
||||
#: ../../mod/photos.php:473
|
||||
msgid "by"
|
||||
msgstr "von"
|
||||
|
||||
#: ../../mod/photos.php:563 ../../addon/js_upload/js_upload.php:306
|
||||
msgid "Image exceeds size limit of "
|
||||
msgstr "Die Bildgröße übersteigt das Limit von "
|
||||
|
||||
#: ../../mod/photos.php:686
|
||||
msgid "No photos selected"
|
||||
msgstr "Keine Bilder ausgewählt"
|
||||
|
||||
#: ../../mod/photos.php:833
|
||||
msgid "Upload Photos"
|
||||
msgstr "Bilder hochladen"
|
||||
|
||||
#: ../../mod/photos.php:836 ../../mod/photos.php:879
|
||||
msgid "New album name: "
|
||||
msgstr "Name des neuen Albums: "
|
||||
|
||||
#: ../../mod/photos.php:837
|
||||
msgid "or existing album name: "
|
||||
msgstr "oder existierender Albumname: "
|
||||
|
||||
#: ../../mod/photos.php:839 ../../mod/photos.php:1087
|
||||
msgid "Permissions"
|
||||
msgstr "Berechtigungen"
|
||||
|
||||
#: ../../mod/photos.php:894
|
||||
msgid "Edit Album"
|
||||
msgstr "Album bearbeiten"
|
||||
|
||||
#: ../../mod/photos.php:904 ../../mod/photos.php:1307
|
||||
msgid "View Photo"
|
||||
msgstr "Fotos betrachten"
|
||||
|
||||
#: ../../mod/photos.php:933
|
||||
msgid "Photo not available"
|
||||
msgstr "Foto nicht verfügbar"
|
||||
|
||||
#: ../../mod/photos.php:982
|
||||
msgid "Edit photo"
|
||||
msgstr "Foto bearbeiten"
|
||||
|
||||
#: ../../mod/photos.php:983
|
||||
msgid "Use as profile photo"
|
||||
msgstr "Als Profilbild verwenden"
|
||||
|
||||
#: ../../mod/photos.php:989 ../../include/conversation.php:309
|
||||
msgid "Private Message"
|
||||
msgstr "Private Nachricht"
|
||||
|
||||
#: ../../mod/photos.php:996
|
||||
msgid "<< Prev"
|
||||
msgstr "<< Vorherige"
|
||||
|
||||
#: ../../mod/photos.php:1000
|
||||
msgid "View Full Size"
|
||||
msgstr "Betrachte Originalgröße"
|
||||
|
||||
#: ../../mod/photos.php:1005
|
||||
msgid "Next >>"
|
||||
msgstr "Nächste >>"
|
||||
|
||||
#: ../../mod/photos.php:1067
|
||||
msgid "Tags: "
|
||||
msgstr "Tags: "
|
||||
|
||||
#: ../../mod/photos.php:1070
|
||||
msgid "[Remove any tag]"
|
||||
msgstr "[Tag entfernen]"
|
||||
|
||||
#: ../../mod/photos.php:1080
|
||||
msgid "New album name"
|
||||
msgstr "Name des neuen Albums"
|
||||
|
||||
#: ../../mod/photos.php:1083
|
||||
msgid "Caption"
|
||||
msgstr "Bildunterschrift"
|
||||
|
||||
#: ../../mod/photos.php:1085
|
||||
msgid "Add a Tag"
|
||||
msgstr "Tag hinzufügen"
|
||||
|
||||
#: ../../mod/photos.php:1089
|
||||
msgid ""
|
||||
"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
|
||||
msgstr ""
|
||||
"Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
|
||||
|
||||
#: ../../mod/photos.php:1109 ../../include/conversation.php:357
|
||||
msgid "I like this (toggle)"
|
||||
msgstr "Ich mag das (toggle)"
|
||||
|
||||
#: ../../mod/photos.php:1110 ../../include/conversation.php:358
|
||||
msgid "I don't like this (toggle)"
|
||||
msgstr "Ich mag das nicht (toggle)"
|
||||
|
||||
#: ../../mod/photos.php:1111 ../../include/conversation.php:359
|
||||
#: ../../include/conversation.php:718
|
||||
msgid "Share"
|
||||
msgstr "Teilen"
|
||||
|
||||
#: ../../mod/photos.php:1112 ../../mod/editpost.php:96
|
||||
#: ../../mod/message.php:190 ../../mod/message.php:324
|
||||
#: ../../include/conversation.php:360 ../../include/conversation.php:727
|
||||
msgid "Please wait"
|
||||
msgstr "Bitte warten"
|
||||
|
||||
#: ../../mod/photos.php:1128 ../../mod/photos.php:1167
|
||||
#: ../../mod/photos.php:1198 ../../include/conversation.php:373
|
||||
msgid "This is you"
|
||||
msgstr "Das bist du"
|
||||
|
||||
#: ../../mod/photos.php:1228 ../../mod/group.php:146
|
||||
#: ../../include/conversation.php:174 ../../include/conversation.php:386
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: ../../mod/photos.php:1294
|
||||
msgid "Recent Photos"
|
||||
msgstr "Neuste Fotos"
|
||||
|
||||
#: ../../mod/photos.php:1298
|
||||
msgid "Upload New Photos"
|
||||
msgstr "Weitere Fotos hochladen"
|
||||
|
||||
#: ../../mod/photos.php:1311
|
||||
msgid "View Album"
|
||||
msgstr "Album betrachten"
|
||||
|
||||
#: ../../mod/display.php:25 ../../mod/display.php:142 ../../mod/item.php:609
|
||||
msgid "Item not found."
|
||||
msgstr "Beitrag nicht gefunden."
|
||||
|
||||
#: ../../mod/display.php:135
|
||||
msgid "Item has been removed."
|
||||
msgstr "Eintrag wurde entfernt."
|
||||
|
||||
#: ../../mod/editpost.php:17 ../../mod/editpost.php:27
|
||||
msgid "Item not found"
|
||||
msgstr "Beitrag nicht gefunden"
|
||||
|
||||
#: ../../mod/editpost.php:32
|
||||
msgid "Edit post"
|
||||
msgstr "Beitrag bearbeiten"
|
||||
|
||||
#: ../../mod/editpost.php:38 ../../include/conversation.php:673
|
||||
msgid "Visible to <strong>everybody</strong>"
|
||||
msgstr "Für <strong>Jedermann</strong> sichtbar"
|
||||
|
||||
#: ../../mod/editpost.php:75 ../../include/conversation.php:707
|
||||
msgid "Post to Email"
|
||||
msgstr "An Email senden"
|
||||
|
||||
#: ../../mod/editpost.php:88 ../../include/conversation.php:384
|
||||
#: ../../include/group.php:169
|
||||
msgid "Edit"
|
||||
msgstr "Bearbeiten"
|
||||
|
||||
#: ../../mod/editpost.php:89 ../../mod/message.php:188
|
||||
#: ../../mod/message.php:322 ../../include/conversation.php:719
|
||||
msgid "Upload photo"
|
||||
msgstr "Foto hochladen"
|
||||
|
||||
#: ../../mod/editpost.php:90 ../../mod/message.php:189
|
||||
#: ../../mod/message.php:323 ../../include/conversation.php:720
|
||||
msgid "Insert web link"
|
||||
msgstr "Weblink einfügen"
|
||||
|
||||
#: ../../mod/editpost.php:91 ../../include/conversation.php:721
|
||||
msgid "Insert YouTube video"
|
||||
msgstr "YouTube Video einfügen"
|
||||
|
||||
#: ../../mod/editpost.php:92 ../../include/conversation.php:722
|
||||
msgid "Insert Vorbis [.ogg] video"
|
||||
msgstr "Vorbis [.ogg] Video einfügen"
|
||||
|
||||
#: ../../mod/editpost.php:93 ../../include/conversation.php:723
|
||||
msgid "Insert Vorbis [.ogg] audio"
|
||||
msgstr "Vorbis [.ogg] Audio einfügen"
|
||||
|
||||
#: ../../mod/editpost.php:94 ../../include/conversation.php:724
|
||||
msgid "Set your location"
|
||||
msgstr "Deinen Standort festlegen"
|
||||
|
||||
#: ../../mod/editpost.php:95 ../../include/conversation.php:725
|
||||
msgid "Clear browser location"
|
||||
msgstr "Browser Standort leeren"
|
||||
|
||||
#: ../../mod/editpost.php:97 ../../include/conversation.php:728
|
||||
msgid "Permission settings"
|
||||
msgstr "Berechtigungseinstellungen"
|
||||
|
||||
#: ../../mod/editpost.php:103 ../../include/conversation.php:734
|
||||
msgid "CC: email addresses"
|
||||
msgstr "CC: EMail Addresse"
|
||||
|
||||
#: ../../mod/editpost.php:105 ../../include/conversation.php:736
|
||||
msgid "Example: bob@example.com, mary@example.com"
|
||||
msgstr "Z.B.: bob@example.com, mary@example.com"
|
||||
|
||||
#: ../../mod/invite.php:28
|
||||
#, php-format
|
||||
msgid "%s : Not a valid email address."
|
||||
msgstr "%s: Keine gültige Email Adresse."
|
||||
|
||||
#: ../../mod/invite.php:32
|
||||
#, php-format
|
||||
msgid "Please join my network on %s"
|
||||
msgstr "Bitte trete meinem Netzwerk auf %s bei"
|
||||
|
||||
#: ../../mod/invite.php:42
|
||||
#, php-format
|
||||
msgid "%s : Message delivery failed."
|
||||
msgstr "%s: Zustellung der Nachricht fehlgeschlagen."
|
||||
|
||||
#: ../../mod/invite.php:46
|
||||
#, php-format
|
||||
msgid "%d message sent."
|
||||
msgid_plural "%d messages sent."
|
||||
msgstr[0] "%d Nachricht gesendet."
|
||||
msgstr[1] "%d Nachrichten gesendet."
|
||||
|
||||
#: ../../mod/invite.php:61
|
||||
msgid "Send invitations"
|
||||
msgstr "Einladungen senden"
|
||||
|
||||
#: ../../mod/invite.php:62
|
||||
msgid "Enter email addresses, one per line:"
|
||||
msgstr "Email Adressen eingeben, eine pro Zeile:"
|
||||
|
||||
#: ../../mod/invite.php:63 ../../mod/message.php:185 ../../mod/message.php:319
|
||||
msgid "Your message:"
|
||||
msgstr "Deine Nachricht:"
|
||||
|
||||
#: ../../mod/invite.php:64
|
||||
#, php-format
|
||||
msgid "Please join my social network on %s"
|
||||
msgstr "Bitte trete meinem Sozialen Netzwerk auf %s bei"
|
||||
|
||||
#: ../../mod/invite.php:65
|
||||
msgid "To accept this invitation, please visit:"
|
||||
msgstr "Um diese Einladung anzunehmen beuche bitte:"
|
||||
|
||||
#: ../../mod/invite.php:66
|
||||
msgid ""
|
||||
"Once you have registered, please connect with me via my profile page at:"
|
||||
msgstr ""
|
||||
"Sobald du registriert bist kontaktiere mich bitte auf meiner Profilseite:"
|
||||
|
||||
#: ../../mod/contacts.php:12
|
||||
msgid "Invite Friends"
|
||||
msgstr "Freunde einladen"
|
||||
|
||||
#: ../../mod/contacts.php:15
|
||||
msgid "Find People With Shared Interests"
|
||||
msgstr "Finde Personen die deine Interessen teilen"
|
||||
|
||||
#: ../../mod/contacts.php:19
|
||||
msgid "Connect/Follow"
|
||||
msgstr "Verbinden/Folgen"
|
||||
|
||||
#: ../../mod/contacts.php:20
|
||||
msgid "Example: bob@example.com, http://example.com/barbara"
|
||||
msgstr "Beispiel: bob@example.com, http://example.com/barbara"
|
||||
|
||||
#: ../../mod/contacts.php:21
|
||||
msgid "Follow"
|
||||
msgstr "Folge"
|
||||
|
||||
#: ../../mod/contacts.php:43 ../../mod/contacts.php:124
|
||||
msgid "Could not access contact record."
|
||||
msgstr "Konnte nicht auf die Kontaktdaten zugreifen."
|
||||
|
||||
#: ../../mod/contacts.php:57
|
||||
msgid "Could not locate selected profile."
|
||||
msgstr "Konnte das ausgewählte Profiel nicht finden."
|
||||
|
||||
#: ../../mod/contacts.php:88
|
||||
msgid "Contact updated."
|
||||
msgstr "Kontakt aktualisiert."
|
||||
|
||||
#: ../../mod/contacts.php:90 ../../mod/dfrn_request.php:406
|
||||
msgid "Failed to update contact record."
|
||||
msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen."
|
||||
|
||||
#: ../../mod/contacts.php:146
|
||||
msgid "Contact has been blocked"
|
||||
msgstr "Kontakt wurde blockiert"
|
||||
|
||||
#: ../../mod/contacts.php:146
|
||||
msgid "Contact has been unblocked"
|
||||
msgstr "Kontakt wurde wieder frei gegeben"
|
||||
|
||||
#: ../../mod/contacts.php:160
|
||||
msgid "Contact has been ignored"
|
||||
msgstr "Der Kontakt wurde ignoriert"
|
||||
|
||||
#: ../../mod/contacts.php:160
|
||||
msgid "Contact has been unignored"
|
||||
msgstr "Kontakt wurde ignoriert"
|
||||
|
||||
#: ../../mod/contacts.php:181
|
||||
msgid "stopped following"
|
||||
msgstr "wird nicht mehr gefolgt"
|
||||
|
||||
#: ../../mod/contacts.php:200
|
||||
msgid "Contact has been removed."
|
||||
msgstr "Kontakt wurde entfernt."
|
||||
|
||||
#: ../../mod/contacts.php:214 ../../mod/crepair.php:68
|
||||
#: ../../mod/dfrn_confirm.php:114
|
||||
msgid "Contact not found."
|
||||
msgstr "Kontakt nicht gefunden."
|
||||
|
||||
#: ../../mod/contacts.php:228 ../../mod/contacts.php:363
|
||||
msgid "Mutual Friendship"
|
||||
msgstr "Beidseitige Freundschaft"
|
||||
|
||||
#: ../../mod/contacts.php:232 ../../mod/contacts.php:367
|
||||
msgid "is a fan of yours"
|
||||
msgstr "ist ein Fan von dir"
|
||||
|
||||
#: ../../mod/contacts.php:237 ../../mod/contacts.php:371
|
||||
msgid "you are a fan of"
|
||||
msgstr "du bist Fan von"
|
||||
|
||||
#: ../../mod/contacts.php:252
|
||||
msgid "Privacy Unavailable"
|
||||
msgstr "Privatsphäre nicht verfügbar"
|
||||
|
||||
#: ../../mod/contacts.php:253
|
||||
msgid "Private communications are not available for this contact."
|
||||
msgstr "Private Kommunikation ist für diesen Kontakt nicht verfügbar."
|
||||
|
||||
#: ../../mod/contacts.php:256
|
||||
msgid "Never"
|
||||
msgstr "Niemals"
|
||||
|
||||
#: ../../mod/contacts.php:260
|
||||
msgid "(Update was successful)"
|
||||
msgstr "(Aktualisierung war erfolgreich)"
|
||||
|
||||
#: ../../mod/contacts.php:260
|
||||
msgid "(Update was not successful)"
|
||||
msgstr "(Aktualisierung war nicht erfolgreich)"
|
||||
|
||||
#: ../../mod/contacts.php:263
|
||||
msgid "Contact Editor"
|
||||
msgstr "Kontakt Editor"
|
||||
|
||||
#: ../../mod/contacts.php:265
|
||||
msgid "Profile Visibility"
|
||||
msgstr "Profil Anzeige"
|
||||
|
||||
#: ../../mod/contacts.php:266
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Please choose the profile you would like to display to %s when viewing your "
|
||||
"profile securely."
|
||||
msgstr ""
|
||||
"Bitte wähle eines deiner Profile das angezeitgt werden soll, wenn %s dein "
|
||||
"Profil aufruft."
|
||||
|
||||
#: ../../mod/contacts.php:267
|
||||
msgid "Contact Information / Notes"
|
||||
msgstr "Kontakt Informationen / Notizen"
|
||||
|
||||
#: ../../mod/contacts.php:268
|
||||
msgid "Online Reputation"
|
||||
msgstr "Online Ruf"
|
||||
|
||||
#: ../../mod/contacts.php:269
|
||||
msgid ""
|
||||
"Occasionally your friends may wish to inquire about this person's online "
|
||||
"legitimacy."
|
||||
msgstr ""
|
||||
"Es könnte sein, dass deine Freunde etwas über den Ruf einer Peron erfahren "
|
||||
"möchten."
|
||||
|
||||
#: ../../mod/contacts.php:270
|
||||
msgid ""
|
||||
"You may help them choose whether or not to interact with this person by "
|
||||
"providing a <em>reputation</em> to guide them."
|
||||
msgstr ""
|
||||
"Du kannst ihnen bei der Entscheidung helfen ob sie mit einer Person "
|
||||
"interagieren sollten oder nicht indem du Informationen über den <em>Ruf</em>"
|
||||
" der Person anbietest."
|
||||
|
||||
#: ../../mod/contacts.php:271
|
||||
msgid ""
|
||||
"Please take a moment to elaborate on this selection if you feel it could be "
|
||||
"helpful to others."
|
||||
msgstr ""
|
||||
"Bitte nimm dir einen Moment und fülle diesen Punkt aus wenn du denkst das es"
|
||||
" anderen helfen könnte."
|
||||
|
||||
#: ../../mod/contacts.php:272
|
||||
msgid "Visit $name's profile"
|
||||
msgstr "Besuche das Profil von $name"
|
||||
|
||||
#: ../../mod/contacts.php:273
|
||||
msgid "Block/Unblock contact"
|
||||
msgstr "Kontakt blockieren/freischalten"
|
||||
|
||||
#: ../../mod/contacts.php:274
|
||||
msgid "Ignore contact"
|
||||
msgstr "Ignoriere den Kontakt"
|
||||
|
||||
#: ../../mod/contacts.php:275
|
||||
msgid "Repair contact URL settings"
|
||||
msgstr "URL Einstellungen des Kontakts reparieren"
|
||||
|
||||
#: ../../mod/contacts.php:276
|
||||
msgid "Repair contact URL settings (WARNING: Advanced)"
|
||||
msgstr "URL Einstellungen des Kontakts reparieren (Achtung: Fortgeschritten)"
|
||||
|
||||
#: ../../mod/contacts.php:277
|
||||
msgid "View conversations"
|
||||
msgstr "Unterhaltungen anzeigen"
|
||||
|
||||
#: ../../mod/contacts.php:278
|
||||
msgid "Delete contact"
|
||||
msgstr "Lösche den Kontakt"
|
||||
|
||||
#: ../../mod/contacts.php:280
|
||||
msgid "Last updated: "
|
||||
msgstr "Letzte Aktualisierung: "
|
||||
|
||||
#: ../../mod/contacts.php:281
|
||||
msgid "Update public posts: "
|
||||
msgstr "Aktualisierung öffentlicher Nachrichten: "
|
||||
|
||||
#: ../../mod/contacts.php:283
|
||||
msgid "Update now"
|
||||
msgstr "Jetzt aktualisieren"
|
||||
|
||||
#: ../../mod/contacts.php:286
|
||||
msgid "Unblock this contact"
|
||||
msgstr "Blockade dieses Kontakts aufheben"
|
||||
|
||||
#: ../../mod/contacts.php:286
|
||||
msgid "Block this contact"
|
||||
msgstr "Diesen Kontakt blockieren"
|
||||
|
||||
#: ../../mod/contacts.php:287
|
||||
msgid "Unignore this contact"
|
||||
msgstr "Diesen Kontakt nicht mehr ignorieren"
|
||||
|
||||
#: ../../mod/contacts.php:287
|
||||
msgid "Ignore this contact"
|
||||
msgstr "Diesen Kontakt ignorieren"
|
||||
|
||||
#: ../../mod/contacts.php:290
|
||||
msgid "Currently blocked"
|
||||
msgstr "Derzeit geblockt"
|
||||
|
||||
#: ../../mod/contacts.php:291
|
||||
msgid "Currently ignored"
|
||||
msgstr "Derzeit ignoriert"
|
||||
|
||||
#: ../../mod/contacts.php:322 ../../include/acl_selectors.php:141
|
||||
#: ../../include/acl_selectors.php:156 ../../include/nav.php:110
|
||||
msgid "Contacts"
|
||||
msgstr "Kontakte"
|
||||
|
||||
#: ../../mod/contacts.php:324
|
||||
msgid "Show Blocked Connections"
|
||||
msgstr "Zeige geblockte Verbindungen"
|
||||
|
||||
#: ../../mod/contacts.php:324
|
||||
msgid "Hide Blocked Connections"
|
||||
msgstr "Verstecke geblockte Verbindungen"
|
||||
|
||||
#: ../../mod/contacts.php:326 ../../mod/directory.php:44
|
||||
msgid "Finding: "
|
||||
msgstr "Funde: "
|
||||
|
||||
#: ../../mod/contacts.php:327 ../../mod/directory.php:46
|
||||
msgid "Find"
|
||||
msgstr "Finde"
|
||||
|
||||
#: ../../mod/contacts.php:387 ../../mod/viewcontacts.php:52
|
||||
msgid "Visit $username's profile"
|
||||
msgstr "Besuche das Profil von $username"
|
||||
|
||||
#: ../../mod/contacts.php:388 ../../include/conversation.php:587
|
||||
msgid "Edit contact"
|
||||
msgstr "Kontakt bearbeiten"
|
||||
|
||||
#: ../../mod/lockview.php:39
|
||||
msgid "Remote privacy information not available."
|
||||
msgstr "Entfernte Privatsphäreneinstellungen nicht verfügbar."
|
||||
|
||||
#: ../../mod/lockview.php:43
|
||||
msgid "Visible to:"
|
||||
msgstr "Sichtbar für:"
|
||||
|
||||
#: ../../mod/register.php:47
|
||||
msgid "Invalid OpenID url"
|
||||
msgstr "Ungültige OpenID URL"
|
||||
|
||||
#: ../../mod/register.php:62
|
||||
msgid "Please enter the required information."
|
||||
msgstr "Bitte trage die erforderlichen Informationen ein."
|
||||
|
||||
#: ../../mod/register.php:74
|
||||
msgid "Please use a shorter name."
|
||||
msgstr "Bitte verwende einen kürzeren Namen."
|
||||
|
||||
#: ../../mod/register.php:76
|
||||
msgid "Name too short."
|
||||
msgstr "Der Name ist zu kurz."
|
||||
|
||||
#: ../../mod/register.php:91
|
||||
msgid "That doesn't appear to be your full (First Last) name."
|
||||
msgstr "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein."
|
||||
|
||||
#: ../../mod/register.php:95
|
||||
msgid "Your email domain is not among those allowed on this site."
|
||||
msgstr "Die Domain deiner EMail Adresse ist nicht erlaubt auf dieser Seite."
|
||||
|
||||
#: ../../mod/register.php:98
|
||||
msgid "Not a valid email address."
|
||||
msgstr "Keine gültige EMail Adresse."
|
||||
|
||||
#: ../../mod/register.php:104
|
||||
msgid "Cannot use that email."
|
||||
msgstr "Konnte diese EMail Adresse nicht verwenden."
|
||||
|
||||
#: ../../mod/register.php:109
|
||||
msgid ""
|
||||
"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
|
||||
"must also begin with a letter."
|
||||
msgstr ""
|
||||
"Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" "
|
||||
"und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen."
|
||||
|
||||
#: ../../mod/register.php:115 ../../mod/register.php:215
|
||||
msgid "Nickname is already registered. Please choose another."
|
||||
msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
|
||||
|
||||
#: ../../mod/register.php:134
|
||||
msgid "SERIOUS ERROR: Generation of security keys failed."
|
||||
msgstr "SERIOUS ERROR: Generation of security keys failed."
|
||||
|
||||
#: ../../mod/register.php:201
|
||||
msgid "An error occurred during registration. Please try again."
|
||||
msgstr ""
|
||||
"Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch "
|
||||
"einmal."
|
||||
|
||||
#: ../../mod/register.php:237
|
||||
msgid "An error occurred creating your default profile. Please try again."
|
||||
msgstr ""
|
||||
"Bei der Erstellung des Standard-Profils ist ein Fehler aufgetreten. Bitte "
|
||||
"versuche es noch einmal."
|
||||
|
||||
#: ../../mod/register.php:339
|
||||
msgid ""
|
||||
"Registration successful. Please check your email for further instructions."
|
||||
msgstr ""
|
||||
"Registration erfolgreich. Eine EMail mit weiteren Anweisungen wurde an dich "
|
||||
"gesendet."
|
||||
|
||||
#: ../../mod/register.php:343
|
||||
msgid "Failed to send email message. Here is the message that failed."
|
||||
msgstr ""
|
||||
"Konnte die EMail nicht versenden. Hier ist die Nachricht die nicht gesendet "
|
||||
"werden konnte."
|
||||
|
||||
#: ../../mod/register.php:348
|
||||
msgid "Your registration can not be processed."
|
||||
msgstr "Deine Registration konnte nicht verarbeitet werden."
|
||||
|
||||
#: ../../mod/register.php:371
|
||||
#, php-format
|
||||
msgid "Registration request at %s"
|
||||
msgstr "Registrationsanfrage auf %s"
|
||||
|
||||
#: ../../mod/register.php:377
|
||||
msgid "Your registration is pending approval by the site owner."
|
||||
msgstr ""
|
||||
"Deine Registration muss noch vom Betreiber der Seite freigegeben werden."
|
||||
|
||||
#: ../../mod/register.php:425
|
||||
msgid ""
|
||||
"You may (optionally) fill in this form via OpenID by supplying your OpenID "
|
||||
"and clicking 'Register'."
|
||||
msgstr ""
|
||||
"Du kannst dieses Formular auch (optional) mit deiner OpenID ausfüllen indem "
|
||||
"du deine OpenID angibst und 'Registrieren' klickst."
|
||||
|
||||
#: ../../mod/register.php:426
|
||||
msgid ""
|
||||
"If you are not familiar with OpenID, please leave that field blank and fill "
|
||||
"in the rest of the items."
|
||||
msgstr ""
|
||||
"Wenn du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und "
|
||||
"fülle die restlichen Felder aus."
|
||||
|
||||
#: ../../mod/register.php:427
|
||||
msgid "Your OpenID (optional): "
|
||||
msgstr "Deine OpenID (optional): "
|
||||
|
||||
#: ../../mod/register.php:441
|
||||
msgid "Include your profile in member directory?"
|
||||
msgstr "Soll dein Profil im Nutzerverzeichnis angezeigt werden?"
|
||||
|
||||
#: ../../mod/register.php:457
|
||||
msgid "Registration"
|
||||
msgstr "Registration"
|
||||
|
||||
#: ../../mod/register.php:465
|
||||
msgid "Your Full Name (e.g. Joe Smith): "
|
||||
msgstr "Vollständiger Name (z.B. Joe Smith): "
|
||||
|
||||
#: ../../mod/register.php:466
|
||||
msgid "Your Email Address: "
|
||||
msgstr "Deine EMail Adresse: "
|
||||
|
||||
#: ../../mod/register.php:467
|
||||
msgid ""
|
||||
"Choose a profile nickname. This must begin with a text character. Your "
|
||||
"profile address on this site will then be "
|
||||
"'<strong>nickname@$sitename</strong>'."
|
||||
msgstr ""
|
||||
"Wähle einen Spitznamen für dein Profil. Dieser muss mit einem Buchstaben "
|
||||
"beginnen. Die Adresse deines Profils auf dieser Seite wird "
|
||||
"'<strong>spitzname@$sitename</strong>' sein."
|
||||
|
||||
#: ../../mod/register.php:468
|
||||
msgid "Choose a nickname: "
|
||||
msgstr "Spitznamen wählen: "
|
||||
|
||||
#: ../../mod/oexchange.php:27
|
||||
msgid "Post successful."
|
||||
msgstr "Erfolgreich gesendet."
|
||||
|
||||
#: ../../mod/help.php:27
|
||||
msgid "Help:"
|
||||
msgstr "Hilfe:"
|
||||
|
||||
#: ../../mod/help.php:31 ../../include/nav.php:64
|
||||
msgid "Help"
|
||||
msgstr "Hilfe"
|
||||
|
||||
#: ../../mod/install.php:33
|
||||
msgid "Could not create/connect to database."
|
||||
msgstr ""
|
||||
"Konnte die Verbindung zur Datenbank nicht aufbauen bzw. die Datenbank "
|
||||
"anlegen."
|
||||
|
||||
#: ../../mod/install.php:38
|
||||
msgid "Connected to database."
|
||||
msgstr "Mit der Datenbank verbunden."
|
||||
|
||||
#: ../../mod/install.php:72
|
||||
msgid "Proceed with Installation"
|
||||
msgstr "Mit der Installation fortfahren"
|
||||
|
||||
#: ../../mod/install.php:74
|
||||
msgid "Your Friendika site database has been installed."
|
||||
msgstr "Die Datenbank deiner Friendika Seite wurde erfolgreich installiert."
|
||||
|
||||
#: ../../mod/install.php:75
|
||||
msgid ""
|
||||
"IMPORTANT: You will need to [manually] setup a scheduled task for the "
|
||||
"poller."
|
||||
msgstr ""
|
||||
"WICHTIG: Du musst [manuell] einen cron Job (o.ä.) für den Poller einrichten."
|
||||
|
||||
#: ../../mod/install.php:76 ../../mod/install.php:86 ../../mod/install.php:199
|
||||
msgid "Please see the file \"INSTALL.txt\"."
|
||||
msgstr "Lies bitte die \"INSTALL.txt\"."
|
||||
|
||||
#: ../../mod/install.php:78
|
||||
msgid "Proceed to registration"
|
||||
msgstr "Mit der Registration fortfahren"
|
||||
|
||||
#: ../../mod/install.php:84
|
||||
msgid "Database import failed."
|
||||
msgstr "Import der Datenbank schlug fehl."
|
||||
|
||||
#: ../../mod/install.php:85
|
||||
msgid ""
|
||||
"You may need to import the file \"database.sql\" manually using phpmyadmin "
|
||||
"or mysql."
|
||||
msgstr ""
|
||||
"Möglicherweise musst du die Datei \"database.sql\" manuell mit phpmyadmin "
|
||||
"oder mysql importieren."
|
||||
|
||||
#: ../../mod/install.php:98
|
||||
msgid "Welcome to Friendika."
|
||||
msgstr "Willkommen bei Friendika."
|
||||
|
||||
#: ../../mod/install.php:121
|
||||
msgid "Friendika Social Network"
|
||||
msgstr "Friendika Soziales Netzwerk"
|
||||
|
||||
#: ../../mod/install.php:122
|
||||
msgid "Installation"
|
||||
msgstr "Installation"
|
||||
|
||||
#: ../../mod/install.php:123
|
||||
msgid ""
|
||||
"In order to install Friendika we need to know how to contact your database."
|
||||
msgstr ""
|
||||
"Um Friendika installieren zu können müssen wir wissen, wie wir die Datenbank"
|
||||
" erreichen können."
|
||||
|
||||
#: ../../mod/install.php:124
|
||||
msgid ""
|
||||
"Please contact your hosting provider or site administrator if you have "
|
||||
"questions about these settings."
|
||||
msgstr ""
|
||||
"Bitte kontaktiere den Hosting Provider oder den Administrator der Seite "
|
||||
"falls du Fragen zu diesen Einstellungen haben solltest."
|
||||
|
||||
#: ../../mod/install.php:125
|
||||
msgid ""
|
||||
"The database you specify below must already exist. If it does not, please "
|
||||
"create it before continuing."
|
||||
msgstr ""
|
||||
"Die Datenbank die du hier angibst muss bereits existieren. Wenn dies noch "
|
||||
"nicht der Fall ist lege sie bitte an bevor du fortfährst."
|
||||
|
||||
#: ../../mod/install.php:126
|
||||
msgid "Database Server Name"
|
||||
msgstr "Datenbank Server"
|
||||
|
||||
#: ../../mod/install.php:127
|
||||
msgid "Database Login Name"
|
||||
msgstr "Datenbank Nutzer"
|
||||
|
||||
#: ../../mod/install.php:128
|
||||
msgid "Database Login Password"
|
||||
msgstr "Datenbank Passwort"
|
||||
|
||||
#: ../../mod/install.php:129
|
||||
msgid "Database Name"
|
||||
msgstr "Datenbank Name"
|
||||
|
||||
#: ../../mod/install.php:130
|
||||
msgid "Please select a default timezone for your website"
|
||||
msgstr "Bitte wähle die standard Zeitzone deiner Webseite"
|
||||
|
||||
#: ../../mod/install.php:148
|
||||
msgid "Could not find a command line version of PHP in the web server PATH."
|
||||
msgstr ""
|
||||
"Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden."
|
||||
|
||||
#: ../../mod/install.php:149
|
||||
msgid ""
|
||||
"This is required. Please adjust the configuration file .htconfig.php "
|
||||
"accordingly."
|
||||
msgstr ""
|
||||
"Diese wird von Friendika benötigt. Bitte passe die Konfigurationsdatei "
|
||||
".htconfig.php entsprechend an."
|
||||
|
||||
#: ../../mod/install.php:156
|
||||
msgid ""
|
||||
"The command line version of PHP on your system does not have "
|
||||
"\"register_argc_argv\" enabled."
|
||||
msgstr ""
|
||||
"Die Kommandozeilenversion von PHP auf deinem System hat "
|
||||
"\"register_argc_argv\" nicht aktiviert."
|
||||
|
||||
#: ../../mod/install.php:157
|
||||
msgid "This is required for message delivery to work."
|
||||
msgstr "Dies wird für die Auslieferung von Nachrichten benötigt."
|
||||
|
||||
#: ../../mod/install.php:179
|
||||
msgid ""
|
||||
"Error: the \"openssl_pkey_new\" function on this system is not able to "
|
||||
"generate encryption keys"
|
||||
msgstr ""
|
||||
"Fehler: Die \"openssl_pkey_new\" Funktion auf diesem System ist nicht in der"
|
||||
" lage Verschlüsselungsschlüssel zu erzeugen"
|
||||
|
||||
#: ../../mod/install.php:180
|
||||
msgid ""
|
||||
"If running under Windows, please see "
|
||||
"\"http://www.php.net/manual/en/openssl.installation.php\"."
|
||||
msgstr ""
|
||||
"Wenn der Server unter Windows läuft, schau dir bitte "
|
||||
"\"http://www.php.net/manual/en/openssl.installation.php\" an."
|
||||
|
||||
#: ../../mod/install.php:189
|
||||
msgid ""
|
||||
"Error: Apache webserver mod-rewrite module is required but not installed."
|
||||
msgstr ""
|
||||
"Fehler: Das Apache Modul mod-rewrite wird benötigt, es ist allerdings nicht "
|
||||
"installiert."
|
||||
|
||||
#: ../../mod/install.php:191
|
||||
msgid "Error: libCURL PHP module required but not installed."
|
||||
msgstr ""
|
||||
"Fehler: Das libCURL PHP Modul wird benötigt ist aber nicht installiert."
|
||||
|
||||
#: ../../mod/install.php:193
|
||||
msgid ""
|
||||
"Error: GD graphics PHP module with JPEG support required but not installed."
|
||||
msgstr ""
|
||||
"Fehler: Das GD Graphikmodul für PHP mit JPEG Unterstützung ist nicht "
|
||||
"installiert."
|
||||
|
||||
#: ../../mod/install.php:195
|
||||
msgid "Error: openssl PHP module required but not installed."
|
||||
msgstr "Fehler: Das openssl Modul von PHP ist nict installiert."
|
||||
|
||||
#: ../../mod/install.php:197
|
||||
msgid "Error: mysqli PHP module required but not installed."
|
||||
msgstr "Fehler: Das mysqli Modul von PHP ist nicht installiert."
|
||||
|
||||
#: ../../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 ""
|
||||
"Der Installationswizzard muss in der Lage sein eine Datei im "
|
||||
"Stammverzeichnis deines Webservers anzuliegen ist allerdings derzeit nicht "
|
||||
"in der Lage dies zu tun."
|
||||
|
||||
#: ../../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 ""
|
||||
"In den meisten Fällen ist dies ein Problem mit den Schreibrechten, der "
|
||||
"Webserver könnte keine Schreiberlaubnis haben, selbst wenn du sie hast."
|
||||
|
||||
#: ../../mod/install.php:210
|
||||
msgid ""
|
||||
"Please check with your site documentation or support people to see if this "
|
||||
"situation can be corrected."
|
||||
msgstr ""
|
||||
"Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support "
|
||||
"Team um diese Situations zu beheben."
|
||||
|
||||
#: ../../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 ""
|
||||
"Sollte dies nicht möglich sein musst du die Installation manuell "
|
||||
"durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\"."
|
||||
|
||||
#: ../../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 ""
|
||||
"Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. "
|
||||
"Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner "
|
||||
"Friendika Installation zu erzeugen."
|
||||
|
||||
#: ../../mod/install.php:235
|
||||
msgid "Errors encountered creating database tables."
|
||||
msgstr "Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen."
|
||||
|
||||
#: ../../mod/network.php:18
|
||||
msgid "Normal View"
|
||||
msgstr "Normale Ansicht"
|
||||
|
||||
#: ../../mod/network.php:20
|
||||
msgid "New Item View"
|
||||
msgstr "Neue Einträge"
|
||||
|
||||
#: ../../mod/network.php:64
|
||||
#, php-format
|
||||
msgid "%d member"
|
||||
msgid_plural "%d members"
|
||||
msgstr[0] "%d Mitglied"
|
||||
msgstr[1] "%d Mitglieder"
|
||||
|
||||
#: ../../mod/network.php:65
|
||||
#, php-format
|
||||
msgid "Warning: This group contains %s from an insecure network."
|
||||
msgstr "Warnung: Diese Gruppe beinhaltet %s aus einem unsicheren Netzwerk."
|
||||
|
||||
#: ../../mod/network.php:66
|
||||
msgid "Private messages to this group are at risk of public disclosure."
|
||||
msgstr ""
|
||||
"Private Nachrichten an diese Gruppe könnten an die Öffentlichkeit geraten."
|
||||
|
||||
#: ../../mod/network.php:126
|
||||
msgid "No such group"
|
||||
msgstr "Es gibt keine solche Gruppe"
|
||||
|
||||
#: ../../mod/network.php:137
|
||||
msgid "Group is empty"
|
||||
msgstr "Gruppe ist leer"
|
||||
|
||||
#: ../../mod/network.php:141
|
||||
msgid "Group: "
|
||||
msgstr "Gruppe: "
|
||||
|
||||
#: ../../mod/network.php:151
|
||||
msgid "Contact: "
|
||||
msgstr "Kontakt "
|
||||
|
||||
#: ../../mod/network.php:153
|
||||
msgid "Private messages to this person are at risk of public disclosure."
|
||||
msgstr ""
|
||||
"Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen."
|
||||
|
||||
#: ../../mod/network.php:158
|
||||
msgid "Invalid contact."
|
||||
msgstr "Ungültiger Kontakt."
|
||||
|
||||
#: ../../mod/profperm.php:25 ../../mod/profperm.php:46
|
||||
msgid "Invalid profile identifier."
|
||||
msgstr "Ungültiger Profil-Bezeichner"
|
||||
|
||||
#: ../../mod/profperm.php:92
|
||||
msgid "Profile Visibility Editor"
|
||||
msgstr "Editor für die Profil-Sichtbarkeit"
|
||||
|
||||
#: ../../mod/profperm.php:96 ../../mod/group.php:156
|
||||
msgid "Click on a contact to add or remove."
|
||||
msgstr "Klicke einen Kontakt an um ihn hinzuzufügen oder zu entfernen"
|
||||
|
||||
#: ../../mod/profperm.php:105
|
||||
msgid "Visible To"
|
||||
msgstr "Sichtbar für"
|
||||
|
||||
#: ../../mod/profperm.php:116
|
||||
msgid "All Contacts (with secure profile access)"
|
||||
msgstr "Alle Kontakte (mit gesichertem Profil zugriff)"
|
||||
|
||||
#: ../../mod/notifications.php:28
|
||||
msgid "Invalid request identifier."
|
||||
msgstr "Invalid request identifier."
|
||||
|
||||
#: ../../mod/notifications.php:31 ../../mod/notifications.php:133
|
||||
msgid "Discard"
|
||||
msgstr "Verwerfen"
|
||||
|
||||
#: ../../mod/notifications.php:41 ../../mod/notifications.php:132
|
||||
msgid "Ignore"
|
||||
msgstr "Ignorieren"
|
||||
|
||||
#: ../../mod/notifications.php:68
|
||||
msgid "Pending Friend/Connect Notifications"
|
||||
msgstr "Anstehende Freundschafts/Kontakt Benachrichtigungen"
|
||||
|
||||
#: ../../mod/notifications.php:72
|
||||
msgid "Show Ignored Requests"
|
||||
msgstr "Zeige ignorierte Anfragen"
|
||||
|
||||
#: ../../mod/notifications.php:72
|
||||
msgid "Hide Ignored Requests"
|
||||
msgstr "Verberge ignorierte Anfragen"
|
||||
|
||||
#: ../../mod/notifications.php:104
|
||||
msgid "Claims to be known to you: "
|
||||
msgstr "Behauptet dich zu kennen: "
|
||||
|
||||
#: ../../mod/notifications.php:104
|
||||
msgid "yes"
|
||||
msgstr "ja"
|
||||
|
||||
#: ../../mod/notifications.php:104
|
||||
msgid "no"
|
||||
msgstr "nein"
|
||||
|
||||
#: ../../mod/notifications.php:110
|
||||
msgid "Approve as: "
|
||||
msgstr "Genehmigen als: "
|
||||
|
||||
#: ../../mod/notifications.php:111
|
||||
msgid "Friend"
|
||||
msgstr "Freund"
|
||||
|
||||
#: ../../mod/notifications.php:112
|
||||
msgid "Fan/Admirer"
|
||||
msgstr "Fan/Verehrer"
|
||||
|
||||
#: ../../mod/notifications.php:119
|
||||
msgid "Notification type: "
|
||||
msgstr "Benachrichtigungs Typ: "
|
||||
|
||||
#: ../../mod/notifications.php:120
|
||||
msgid "Friend/Connect Request"
|
||||
msgstr "Kontakt-/Freundschaftsanfrage"
|
||||
|
||||
#: ../../mod/notifications.php:120
|
||||
msgid "New Follower"
|
||||
msgstr "Neuer Bewunderer"
|
||||
|
||||
#: ../../mod/notifications.php:130 ../../mod/notifications.php:153
|
||||
msgid "Approve"
|
||||
msgstr "Genehmigen"
|
||||
|
||||
#: ../../mod/notifications.php:139
|
||||
msgid "No notifications."
|
||||
msgstr "Keine Benachrichtigungen."
|
||||
|
||||
#: ../../mod/notifications.php:143
|
||||
msgid "User registrations waiting for confirm"
|
||||
msgstr "Neuanmeldungen die auf deine Bestätigung warten"
|
||||
|
||||
#: ../../mod/notifications.php:154
|
||||
msgid "Deny"
|
||||
msgstr "Verwehren"
|
||||
|
||||
#: ../../mod/notifications.php:159
|
||||
msgid "No registrations."
|
||||
msgstr "Keine Neuanmeldungen."
|
||||
|
||||
#: ../../mod/crepair.php:42
|
||||
msgid "Contact settings applied."
|
||||
msgstr "Einstellungen zum Kontakt angewandt."
|
||||
|
||||
#: ../../mod/crepair.php:44
|
||||
msgid "Contact update failed."
|
||||
msgstr "Konnte den Kontakt nicht aktualisieren."
|
||||
|
||||
#: ../../mod/crepair.php:74
|
||||
msgid "Repair Contact Settings"
|
||||
msgstr "Kontakt Einstellungen reparieren"
|
||||
|
||||
#: ../../mod/crepair.php:76
|
||||
msgid ""
|
||||
"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect"
|
||||
" information your communications with this contact will stop working."
|
||||
msgstr ""
|
||||
"<strong>Warnung: Nur für erfahrene Nutzer</strong> sollten hier fehlerhafte "
|
||||
"Informationen eingetragen werden wirst du nicht mehr in der Lage sein mit "
|
||||
"diesem Kontakt zu kommunizieren."
|
||||
|
||||
#: ../../mod/crepair.php:77
|
||||
msgid ""
|
||||
"Please use your browser 'Back' button <strong>now</strong> if you are "
|
||||
"uncertain what to do on this page."
|
||||
msgstr ""
|
||||
"Bitte nutze den Zurück-Button deines Browsers <strong>jetzt</strong> wenn du"
|
||||
" dir unsicher bist was auf dieser Seite gemacht wird."
|
||||
|
||||
#: ../../mod/crepair.php:85
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: ../../mod/crepair.php:86
|
||||
msgid "Account Nickname"
|
||||
msgstr "Account Spitzname"
|
||||
|
||||
#: ../../mod/crepair.php:87
|
||||
msgid "Account URL"
|
||||
msgstr "Account URL"
|
||||
|
||||
#: ../../mod/crepair.php:88
|
||||
msgid "Friend Request URL"
|
||||
msgstr "URL für Freundschaftsanfragen"
|
||||
|
||||
#: ../../mod/crepair.php:89
|
||||
msgid "Friend Confirm URL"
|
||||
msgstr "URL für Bestätigungen von Freundschaftsanfragen"
|
||||
|
||||
#: ../../mod/crepair.php:90
|
||||
msgid "Notification Endpoint URL"
|
||||
msgstr "URL Endpunkt für Benachrichtigungen"
|
||||
|
||||
#: ../../mod/crepair.php:91
|
||||
msgid "Poll/Feed URL"
|
||||
msgstr "Pull/Feed URL"
|
||||
|
||||
#: ../../mod/dfrn_request.php:96
|
||||
msgid "This introduction has already been accepted."
|
||||
msgstr "Diese Vorstellung wurde bereits abgeschlossen."
|
||||
|
||||
#: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:351
|
||||
msgid "Profile location is not valid or does not contain profile information."
|
||||
msgstr ""
|
||||
"Profil Adresse ist ungültig oder stellt einige Profildaten nicht zur "
|
||||
"Verfügung."
|
||||
|
||||
#: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356
|
||||
msgid "Warning: profile location has no identifiable owner name."
|
||||
msgstr "Warning: profile location has no identifiable owner name."
|
||||
|
||||
#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:358
|
||||
msgid "Warning: profile location has no profile photo."
|
||||
msgstr "Warning: profile location has no profile photo."
|
||||
|
||||
#: ../../mod/dfrn_request.php:130 ../../mod/dfrn_request.php:361
|
||||
#, php-format
|
||||
msgid "%d required parameter was not found at the given location"
|
||||
msgid_plural "%d required parameters were not found at the given location"
|
||||
msgstr[0] ""
|
||||
"%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden"
|
||||
msgstr[1] ""
|
||||
"%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden"
|
||||
|
||||
#: ../../mod/dfrn_request.php:168
|
||||
msgid "Introduction complete."
|
||||
msgstr "Vorstellung abgeschlossen."
|
||||
|
||||
#: ../../mod/dfrn_request.php:192
|
||||
msgid "Unrecoverable protocol error."
|
||||
msgstr "Nicht behebbarer Protokollfehler."
|
||||
|
||||
#: ../../mod/dfrn_request.php:220
|
||||
msgid "Profile unavailable."
|
||||
msgstr "Profil nicht verfügbar."
|
||||
|
||||
#: ../../mod/dfrn_request.php:245
|
||||
#, php-format
|
||||
msgid "%s has received too many connection requests today."
|
||||
msgstr "%s hat heute zu viele Freundschaftsanfragen erhalten."
|
||||
|
||||
#: ../../mod/dfrn_request.php:246
|
||||
msgid "Spam protection measures have been invoked."
|
||||
msgstr "Maßnahmen zum Spamschutz wurden ergriffen."
|
||||
|
||||
#: ../../mod/dfrn_request.php:247
|
||||
msgid "Friends are advised to please try again in 24 hours."
|
||||
msgstr "Freunde sind angehalten es in 24 Stunden erneut zu versuchen."
|
||||
|
||||
#: ../../mod/dfrn_request.php:277
|
||||
msgid "Invalid locator"
|
||||
msgstr "Ungültiger Locator"
|
||||
|
||||
#: ../../mod/dfrn_request.php:296
|
||||
msgid "Unable to resolve your name at the provided location."
|
||||
msgstr "Unable to resolve your name at the provided location."
|
||||
|
||||
#: ../../mod/dfrn_request.php:309
|
||||
msgid "You have already introduced yourself here."
|
||||
msgstr "Du hast dich hier bereits vorgestellt."
|
||||
|
||||
#: ../../mod/dfrn_request.php:313
|
||||
#, php-format
|
||||
msgid "Apparently you are already friends with %s."
|
||||
msgstr "Es scheint so, als ob du bereits ein Freund von %s bist."
|
||||
|
||||
#: ../../mod/dfrn_request.php:334
|
||||
msgid "Invalid profile URL."
|
||||
msgstr "Ungültige Profil URL."
|
||||
|
||||
#: ../../mod/dfrn_request.php:427
|
||||
msgid "Your introduction has been sent."
|
||||
msgstr "Deine Vorstellung wurde abgeschickt."
|
||||
|
||||
#: ../../mod/dfrn_request.php:481
|
||||
msgid "Please login to confirm introduction."
|
||||
msgstr "Bitte melde dich an um die Vorstellung zu bestätigen."
|
||||
|
||||
#: ../../mod/dfrn_request.php:495
|
||||
msgid ""
|
||||
"Incorrect identity currently logged in. Please login to "
|
||||
"<strong>this</strong> profile."
|
||||
msgstr ""
|
||||
"Incorrect identity currently logged in. Please login to "
|
||||
"<strong>this</strong> profile."
|
||||
|
||||
#: ../../mod/dfrn_request.php:507
|
||||
#, php-format
|
||||
msgid "Welcome home %s."
|
||||
msgstr "Willkommen zurück %s."
|
||||
|
||||
#: ../../mod/dfrn_request.php:508
|
||||
#, php-format
|
||||
msgid "Please confirm your introduction/connection request to %s."
|
||||
msgstr "Bitte bestätige deine Vorstellung/Verbindungs Anfrage bei %s."
|
||||
|
||||
#: ../../mod/dfrn_request.php:509
|
||||
msgid "Confirm"
|
||||
msgstr "Bestätigen"
|
||||
|
||||
#: ../../mod/dfrn_request.php:542 ../../include/items.php:1426
|
||||
msgid "[Name Withheld]"
|
||||
msgstr "[Name Zurückgehalten]"
|
||||
|
||||
#: ../../mod/dfrn_request.php:549
|
||||
msgid "Introduction received at "
|
||||
msgstr "Vorstellung erhalten auf"
|
||||
|
||||
#: ../../mod/dfrn_request.php:630
|
||||
msgid "Friend/Connection Request"
|
||||
msgstr "Freundschafts/Kontakt Anfrage"
|
||||
|
||||
#: ../../mod/dfrn_request.php:631
|
||||
msgid ""
|
||||
"Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, "
|
||||
"testuser@identi.ca"
|
||||
msgstr ""
|
||||
"Beispiele: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, "
|
||||
"testuser@identi.ca"
|
||||
|
||||
#: ../../mod/dfrn_request.php:632
|
||||
msgid "Please answer the following:"
|
||||
msgstr "Bitte beantworte folgende Fragen:"
|
||||
|
||||
#: ../../mod/dfrn_request.php:633
|
||||
msgid "Does $name know you?"
|
||||
msgstr "Kennt $name dich?"
|
||||
|
||||
#: ../../mod/dfrn_request.php:636
|
||||
msgid "Add a personal note:"
|
||||
msgstr "Eine persönliche Notiz anfügen:"
|
||||
|
||||
#: ../../mod/dfrn_request.php:637
|
||||
msgid ""
|
||||
"Please enter your 'Identity Address' from one of the following supported "
|
||||
"social networks:"
|
||||
msgstr ""
|
||||
"Bitte gib die Adresse deiner Identität in einem der unterstützten sozialen "
|
||||
"Netzwerke an:"
|
||||
|
||||
#: ../../mod/dfrn_request.php:638
|
||||
msgid "Friendika"
|
||||
msgstr "Friendika"
|
||||
|
||||
#: ../../mod/dfrn_request.php:639
|
||||
msgid "StatusNet/Federated Social Web"
|
||||
msgstr "StatusNet/Federated Social Web"
|
||||
|
||||
#: ../../mod/dfrn_request.php:640
|
||||
msgid "Private (secure) network"
|
||||
msgstr "Privates (sicheres) Netzwerk"
|
||||
|
||||
#: ../../mod/dfrn_request.php:641
|
||||
msgid "Public (insecure) network"
|
||||
msgstr "Öffentliches (unsicheres) Netzwerk"
|
||||
|
||||
#: ../../mod/dfrn_request.php:642
|
||||
msgid "Your Identity Address:"
|
||||
msgstr "Adresse deiner Identität"
|
||||
|
||||
#: ../../mod/dfrn_request.php:643
|
||||
msgid "Submit Request"
|
||||
msgstr "Anfrage abschicken"
|
||||
|
||||
#: ../../mod/dfrn_request.php:644 ../../mod/tagrm.php:11
|
||||
#: ../../mod/tagrm.php:94 ../../addon/js_upload/js_upload.php:41
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:745
|
||||
#: ../../include/conversation.php:20
|
||||
msgid "status"
|
||||
msgstr "Status"
|
||||
|
||||
#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:749
|
||||
#: ../../include/conversation.php:25
|
||||
#, php-format
|
||||
msgid "%1$s likes %2$s's %3$s"
|
||||
msgstr "%1$s mag %2$s's %3$s"
|
||||
|
||||
#: ../../mod/like.php:129 ../../include/conversation.php:28
|
||||
#, php-format
|
||||
msgid "%1$s doesn't like %2$s's %3$s"
|
||||
msgstr "%1$s mag %2$s's %3$s nicht"
|
||||
|
||||
#: ../../mod/lostpass.php:27
|
||||
msgid "Password reset request issued. Check your email."
|
||||
msgstr "Zurücksetzen des Passworts eingeleitet. Bitte überprüfe deine Email."
|
||||
|
||||
#: ../../mod/lostpass.php:38
|
||||
#, php-format
|
||||
msgid "Password reset requested at %s"
|
||||
msgstr "Anfrage zum Zurücksetzen des Passworts auf %s erhalten"
|
||||
|
||||
#: ../../mod/lostpass.php:60
|
||||
msgid ""
|
||||
"Request could not be verified. (You may have previously submitted it.) "
|
||||
"Password reset failed."
|
||||
msgstr ""
|
||||
"Anfrage konnte nicht verifiziert werden. (Eventuell hast du bereits ähnliche"
|
||||
" Anfrage gestellt.) Zurücksetzen des Passworts gescheitert."
|
||||
|
||||
#: ../../mod/lostpass.php:79
|
||||
msgid "Your password has been reset as requested."
|
||||
msgstr "Dein Passwort wurde wie gewünscht zurück gesetzt."
|
||||
|
||||
#: ../../mod/lostpass.php:80
|
||||
msgid "Your new password is"
|
||||
msgstr "Dein neues Passwort lautet"
|
||||
|
||||
#: ../../mod/lostpass.php:81
|
||||
msgid "Save or copy your new password - and then"
|
||||
msgstr "Speichere oder kopiere dein neues Passwort - und dann"
|
||||
|
||||
#: ../../mod/lostpass.php:82
|
||||
msgid "click here to login"
|
||||
msgstr "hier klicken um dich anzumelden"
|
||||
|
||||
#: ../../mod/lostpass.php:83
|
||||
msgid ""
|
||||
"Your password may be changed from the <em>Settings</em> page after "
|
||||
"successful login."
|
||||
msgstr ""
|
||||
"Du kannst das Passwort unter den <em>Einstellungen</em> ändern sobald du "
|
||||
"dich erfolgreich angemeldet hast."
|
||||
|
||||
#: ../../mod/lostpass.php:114
|
||||
msgid "Forgot your Password?"
|
||||
msgstr "Hast du dein Passwort vergessen?"
|
||||
|
||||
#: ../../mod/lostpass.php:115
|
||||
msgid ""
|
||||
"Enter your email address and submit to have your password reset. Then check "
|
||||
"your email for further instructions."
|
||||
msgstr ""
|
||||
"Gib deine Email-Adresse an und fordere ein neues Passwort an. Es werden dir "
|
||||
"dann weitere Informationen per Mail zugesand."
|
||||
|
||||
#: ../../mod/lostpass.php:116
|
||||
msgid "Nickname or Email: "
|
||||
msgstr "Spitzname oder Email:"
|
||||
|
||||
#: ../../mod/lostpass.php:117
|
||||
msgid "Reset"
|
||||
msgstr "Zurücksetzen"
|
||||
|
||||
#: ../../mod/removeme.php:42 ../../mod/removeme.php:45
|
||||
msgid "Remove My Account"
|
||||
msgstr "Account löschen"
|
||||
|
||||
#: ../../mod/removeme.php:43
|
||||
msgid ""
|
||||
"This will completely remove your account. Once this has been done it is not "
|
||||
"recoverable."
|
||||
msgstr ""
|
||||
"Dies wird deinen Account endgültig löschen. Es gibt keine Möglichkeit ihn "
|
||||
"wiederherzustellen."
|
||||
|
||||
#: ../../mod/removeme.php:44
|
||||
msgid "Please enter your password for verification:"
|
||||
msgstr "Bitte gib dein Passwort zur Verifikation ein:"
|
||||
|
||||
#: ../../mod/apps.php:6
|
||||
msgid "Applications"
|
||||
msgstr "Anwendungen"
|
||||
|
||||
#: ../../mod/directory.php:38
|
||||
msgid "Global Directory"
|
||||
msgstr "Weltweites Verzeichnis"
|
||||
|
||||
#: ../../mod/directory.php:45
|
||||
msgid "Site Directory"
|
||||
msgstr "Verzeichnis"
|
||||
|
||||
#: ../../mod/directory.php:100
|
||||
msgid "Gender: "
|
||||
msgstr "Geschlecht:"
|
||||
|
||||
#: ../../mod/directory.php:126
|
||||
msgid "No entries (some entries may be hidden)."
|
||||
msgstr "Keine Einträge (einige Einträge könnten versteckt sein)."
|
||||
|
||||
#: ../../mod/friendika.php:12
|
||||
msgid "This is Friendika version"
|
||||
msgstr "Dies ist Friendika Version"
|
||||
|
||||
#: ../../mod/friendika.php:13
|
||||
msgid "running at web location"
|
||||
msgstr "die unter folgender Webadresse zu finden ist"
|
||||
|
||||
#: ../../mod/friendika.php:15
|
||||
msgid ""
|
||||
"Shared content within the Friendika network is provided under the <a "
|
||||
"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
|
||||
"Attribution 3.0 license</a>"
|
||||
msgstr ""
|
||||
"Geteilte Inhalte innerhalb des Friendika Netzwerks sind unter der <a "
|
||||
"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
|
||||
"Attribution 3.0 license</a> verfügbar"
|
||||
|
||||
#: ../../mod/friendika.php:17
|
||||
msgid ""
|
||||
"Please visit <a "
|
||||
"href=\"http://project.friendika.com\">Project.Friendika.com</a> to learn "
|
||||
"more about the Friendika project."
|
||||
msgstr ""
|
||||
"Bitte besuche <a "
|
||||
"href=\"http://project.friendika.com\">Project.Friendika.com</a> um mehr über"
|
||||
" Friendika zu erfahren."
|
||||
|
||||
#: ../../mod/friendika.php:19
|
||||
msgid "Bug reports and issues: please visit"
|
||||
msgstr "Probleme oder Fehler gefunden? Bitte besuche"
|
||||
|
||||
#: ../../mod/friendika.php:20
|
||||
msgid ""
|
||||
"Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - "
|
||||
"dot com"
|
||||
msgstr ""
|
||||
"Vorschläge, Lobeshymnen, Spenden usw. - bitte eine Email an \"Info\" at "
|
||||
"Friendika - dot com (englisch bevorzugt)"
|
||||
|
||||
#: ../../mod/friendika.php:25
|
||||
msgid "Installed plugins/addons/apps"
|
||||
msgstr "Installierte Plugins/Erweiterungen/Apps"
|
||||
|
||||
#: ../../mod/friendika.php:33
|
||||
msgid "No installed plugins/addons/apps"
|
||||
msgstr "Keine Plugins/Erweiterungen/Apps installiert"
|
||||
|
||||
#: ../../mod/item.php:37
|
||||
msgid "Unable to locate original post."
|
||||
msgstr "Konnte das original Posting nicht finden."
|
||||
|
||||
#: ../../mod/item.php:128
|
||||
msgid "Empty post discarded."
|
||||
msgstr "Leere Nachricht wurde verworfen."
|
||||
|
||||
#: ../../mod/item.php:478
|
||||
#, php-format
|
||||
msgid "%s commented on your item at %s"
|
||||
msgstr "%s hat einen deiner Beiträge auf %s kommentiert"
|
||||
|
||||
#: ../../mod/item.php:504
|
||||
#, php-format
|
||||
msgid "%s posted on your profile wall at %s"
|
||||
msgstr "%s hat etwas auf deiner Pinnwand bei %s gepostet"
|
||||
|
||||
#: ../../mod/item.php:534
|
||||
msgid "System error. Post not saved."
|
||||
msgstr "Systemfehler. Nachricht konnte nicht gespeichert werden."
|
||||
|
||||
#: ../../mod/item.php:553
|
||||
#, php-format
|
||||
msgid ""
|
||||
"This message was sent to you by %s, a member of the Friendika social "
|
||||
"network."
|
||||
msgstr ""
|
||||
"Diese Nachricht wurde dir von %s gesendet, einem Mitglied des Sozialen "
|
||||
"Netzwerks Friendika"
|
||||
|
||||
#: ../../mod/item.php:555
|
||||
#, php-format
|
||||
msgid "You may visit them online at %s"
|
||||
msgstr "Du kannst sie online unter %s besuchen"
|
||||
|
||||
#: ../../mod/item.php:556
|
||||
msgid ""
|
||||
"Please contact the sender by replying to this post if you do not wish to "
|
||||
"receive these messages."
|
||||
msgstr ""
|
||||
"Please contact the sender by replying to this post if you do not wish to "
|
||||
"receive these messages."
|
||||
|
||||
#: ../../mod/item.php:558
|
||||
#, php-format
|
||||
msgid "%s posted an update."
|
||||
msgstr "%s hat ein Update gepostet."
|
||||
|
||||
#: ../../mod/tagrm.php:41
|
||||
msgid "Tag removed"
|
||||
msgstr "Tag entfernt"
|
||||
|
||||
#: ../../mod/tagrm.php:79
|
||||
msgid "Remove Item Tag"
|
||||
msgstr "Gegenstands Tag entfernen"
|
||||
|
||||
#: ../../mod/tagrm.php:81
|
||||
msgid "Select a tag to remove: "
|
||||
msgstr "Wähle ein Tag zum Entfernen aus: "
|
||||
|
||||
#: ../../mod/tagrm.php:93
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
#: ../../mod/message.php:18
|
||||
msgid "No recipient selected."
|
||||
msgstr "Kein Empfänger gewählt."
|
||||
|
||||
#: ../../mod/message.php:23
|
||||
msgid "[no subject]"
|
||||
msgstr "[kein Betreff]"
|
||||
|
||||
#: ../../mod/message.php:34
|
||||
msgid "Unable to locate contact information."
|
||||
msgstr "Konnte die Kontaktinformationen nicht finden."
|
||||
|
||||
#: ../../mod/message.php:102
|
||||
msgid "Message sent."
|
||||
msgstr "Nachricht gesendet."
|
||||
|
||||
#: ../../mod/message.php:105
|
||||
msgid "Message could not be sent."
|
||||
msgstr "Nachricht konnte nicht gesendet werden."
|
||||
|
||||
#: ../../mod/message.php:125 ../../include/nav.php:102
|
||||
msgid "Messages"
|
||||
msgstr "Nachrichten"
|
||||
|
||||
#: ../../mod/message.php:126
|
||||
msgid "Inbox"
|
||||
msgstr "Eingang"
|
||||
|
||||
#: ../../mod/message.php:127
|
||||
msgid "Outbox"
|
||||
msgstr "Ausgang"
|
||||
|
||||
#: ../../mod/message.php:128
|
||||
msgid "New Message"
|
||||
msgstr "Neue Nachricht"
|
||||
|
||||
#: ../../mod/message.php:142
|
||||
msgid "Message deleted."
|
||||
msgstr "Nachricht gelöscht."
|
||||
|
||||
#: ../../mod/message.php:158
|
||||
msgid "Conversation removed."
|
||||
msgstr "Unterhaltung gelöscht."
|
||||
|
||||
#: ../../mod/message.php:172 ../../include/conversation.php:674
|
||||
msgid "Please enter a link URL:"
|
||||
msgstr "Bitte gib die URL des Links ein:"
|
||||
|
||||
#: ../../mod/message.php:180
|
||||
msgid "Send Private Message"
|
||||
msgstr "Private Nachricht senden"
|
||||
|
||||
#: ../../mod/message.php:181 ../../mod/message.php:315
|
||||
msgid "To:"
|
||||
msgstr "An:"
|
||||
|
||||
#: ../../mod/message.php:182 ../../mod/message.php:316
|
||||
msgid "Subject:"
|
||||
msgstr "Betreff:"
|
||||
|
||||
#: ../../mod/message.php:224
|
||||
msgid "No messages."
|
||||
msgstr "Keine Nachrichten."
|
||||
|
||||
#: ../../mod/message.php:237
|
||||
msgid "Delete conversation"
|
||||
msgstr "Unterhaltung löschen"
|
||||
|
||||
#: ../../mod/message.php:240
|
||||
msgid "D, d M Y - g:i A"
|
||||
msgstr "D, d. M Y - g:i A"
|
||||
|
||||
#: ../../mod/message.php:267
|
||||
msgid "Message not available."
|
||||
msgstr "Nachricht nicht verfügbar."
|
||||
|
||||
#: ../../mod/message.php:304
|
||||
msgid "Delete message"
|
||||
msgstr "Nachricht löschen"
|
||||
|
||||
#: ../../mod/message.php:314
|
||||
msgid "Send Reply"
|
||||
msgstr "Antwort senden"
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:231
|
||||
msgid "Response from remote site was not understood."
|
||||
msgstr "Antwort der entfernten Gegenstelle unverständlich."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:240
|
||||
msgid "Unexpected response from remote site: "
|
||||
msgstr "Unerwartete Antwort der Gegenstelle: "
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:248
|
||||
msgid "Confirmation completed successfully."
|
||||
msgstr "Bestätigung erfolgreich abgeschlossen."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:250 ../../mod/dfrn_confirm.php:264
|
||||
#: ../../mod/dfrn_confirm.php:271
|
||||
msgid "Remote site reported: "
|
||||
msgstr "Entfernte Seite meldet: "
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:262
|
||||
msgid "Temporary failure. Please wait and try again."
|
||||
msgstr ""
|
||||
"Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch "
|
||||
"einmal."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:269
|
||||
msgid "Introduction failed or was revoked."
|
||||
msgstr "Vorstellung schlug fehl oder wurde zurück gezogen."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:387
|
||||
msgid "Unable to set contact photo."
|
||||
msgstr "Konnte das Bild des Kontakts nicht speichern."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:430 ../../include/conversation.php:61
|
||||
#, php-format
|
||||
msgid "%1$s is now friends with %2$s"
|
||||
msgstr "%1$s ist nun mit %2$s befreundet"
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:501
|
||||
#, php-format
|
||||
msgid "No user record found for '%s' "
|
||||
msgstr "Für '%s' wurde kein Nutzer gefunden"
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:511
|
||||
msgid "Our site encryption key is apparently messed up."
|
||||
msgstr "Der Verschlüsslungsschlüssel unserer Seite ist anscheinend im Arsch."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:522
|
||||
msgid "Empty site URL was provided or URL could not be decrypted by us."
|
||||
msgstr ""
|
||||
"Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt "
|
||||
"werden."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:534
|
||||
msgid "Contact record was not found for you on our site."
|
||||
msgstr "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:562
|
||||
msgid ""
|
||||
"The ID provided by your system is a duplicate on our system. It should work "
|
||||
"if you try again."
|
||||
msgstr ""
|
||||
"Die ID die uns dein System angeboten hat ist hier bereits vergeben. Bitte "
|
||||
"versuche es noch einmal."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:573
|
||||
msgid "Unable to set your contact credentials on our system."
|
||||
msgstr ""
|
||||
"Deine Kontaktreferenzen konnten nicht in unserm System gespeichert werden."
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:626
|
||||
msgid "Unable to update your contact profile details on our system"
|
||||
msgstr "Die Updates für dein Profil konnten nicht gespeichert werden"
|
||||
|
||||
#: ../../mod/dfrn_confirm.php:655
|
||||
#, php-format
|
||||
msgid "Connection accepted at %s"
|
||||
msgstr "Auf %s wurde die Verbindung akzeptiert"
|
||||
|
||||
#: ../../mod/openid.php:62 ../../mod/openid.php:118 ../../include/auth.php:114
|
||||
#: ../../include/auth.php:139 ../../include/auth.php:192
|
||||
msgid "Login failed."
|
||||
msgstr "Annmeldung fehlgeschlagen."
|
||||
|
||||
#: ../../mod/openid.php:78 ../../include/auth.php:208
|
||||
msgid "Welcome "
|
||||
msgstr "Willkommen "
|
||||
|
||||
#: ../../mod/openid.php:79 ../../include/auth.php:209
|
||||
msgid "Please upload a profile photo."
|
||||
msgstr "Bitte lade ein Profilbild hoch."
|
||||
|
||||
#: ../../mod/openid.php:82 ../../include/auth.php:212
|
||||
msgid "Welcome back "
|
||||
msgstr "Willkommen zurück "
|
||||
|
||||
#: ../../mod/dfrn_poll.php:84 ../../mod/dfrn_poll.php:510
|
||||
#, php-format
|
||||
msgid "%s welcomes %s"
|
||||
msgstr "%s heißt %s herzlich willkommen"
|
||||
|
||||
#: ../../mod/viewcontacts.php:40
|
||||
msgid "No contacts."
|
||||
msgstr "Keine Kontakte."
|
||||
|
||||
#: ../../mod/group.php:27
|
||||
msgid "Group created."
|
||||
msgstr "Gruppe erstellt."
|
||||
|
||||
#: ../../mod/group.php:33
|
||||
msgid "Could not create group."
|
||||
msgstr "Konnte die Gruppe nicht erstellen."
|
||||
|
||||
#: ../../mod/group.php:43 ../../mod/group.php:115
|
||||
msgid "Group not found."
|
||||
msgstr "Gruppe nicht gefunden."
|
||||
|
||||
#: ../../mod/group.php:56
|
||||
msgid "Group name changed."
|
||||
msgstr "Gruppenname geändert."
|
||||
|
||||
#: ../../mod/group.php:74
|
||||
msgid "Create a group of contacts/friends."
|
||||
msgstr "Eine Gruppe von Kontakten/Freunden anlegen."
|
||||
|
||||
#: ../../mod/group.php:75 ../../mod/group.php:158
|
||||
msgid "Group Name: "
|
||||
msgstr "Gruppen Name:"
|
||||
|
||||
#: ../../mod/group.php:90
|
||||
msgid "Group removed."
|
||||
msgstr "Gruppe entfernt."
|
||||
|
||||
#: ../../mod/group.php:92
|
||||
msgid "Unable to remove group."
|
||||
msgstr "Konnte die Gruppe nicht entfernen."
|
||||
|
||||
#: ../../mod/group.php:157
|
||||
msgid "Group Editor"
|
||||
msgstr "Gruppen Editor"
|
||||
|
||||
#: ../../mod/group.php:169
|
||||
msgid "Members"
|
||||
msgstr "Mitglieder"
|
||||
|
||||
#: ../../mod/group.php:183
|
||||
msgid "All Contacts"
|
||||
msgstr "Alle Kontakte"
|
||||
|
||||
#: ../../mod/match.php:10
|
||||
msgid "Profile Match"
|
||||
msgstr "Profil Übereinstimmungen"
|
||||
|
||||
#: ../../mod/match.php:50
|
||||
msgid "No matches"
|
||||
msgstr "Keine Übereinstimmungen"
|
||||
|
||||
#: ../../addon/twitter/twitter.php:64
|
||||
msgid "Post to Twitter"
|
||||
msgstr "Nach Twitter senden"
|
||||
|
||||
#: ../../addon/twitter/twitter.php:122
|
||||
msgid "Twitter Posting Settings"
|
||||
msgstr "Twitter Posting Einstellungen"
|
||||
|
||||
#: ../../addon/twitter/twitter.php:129
|
||||
msgid ""
|
||||
"No consumer key pair for Twitter found. Please contact your site "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den "
|
||||
"Administrator der Seite."
|
||||
|
||||
#: ../../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 <strong>public</strong> posts will"
|
||||
" be posted to Twitter."
|
||||
msgstr ""
|
||||
"Auf dieser Friendika Instanz wurde das Twitter Plugin aktiviert dein Account"
|
||||
" ist allerdings noch nicht mit einem Twitter Account verbunden. Um deinen "
|
||||
"Account mit Twitter zu verbinden, klick auf den Button weiter unten und gib "
|
||||
"die PIN die du auf Twitter erhälst hier ein. Es werden ausschließlich deine "
|
||||
"<strong>öffentlichen</strong> Nachrichten auf Twitter veröffentlicht."
|
||||
|
||||
#: ../../addon/twitter/twitter.php:149
|
||||
msgid "Log in with Twitter"
|
||||
msgstr "bei Twitter anmelden"
|
||||
|
||||
#: ../../addon/twitter/twitter.php:151
|
||||
msgid "Copy the PIN from Twitter here"
|
||||
msgstr "Kopiere die Twitter PIN hier her"
|
||||
|
||||
#: ../../addon/twitter/twitter.php:165 ../../addon/statusnet/statusnet.php:197
|
||||
msgid "Currently connected to: "
|
||||
msgstr "Momentan verbunden mit: "
|
||||
|
||||
#: ../../addon/twitter/twitter.php:166
|
||||
msgid ""
|
||||
"If enabled all your <strong>public</strong> postings will be posted to the "
|
||||
"associated Twitter account as well."
|
||||
msgstr ""
|
||||
"Wenn dies aktiviert ist, werden alle deine <strong>öffentlichen</strong> "
|
||||
"Nachricten auch auf dem verbundenen Twitter Account veröffentlicht."
|
||||
|
||||
#: ../../addon/twitter/twitter.php:168
|
||||
msgid "Send public postings to Twitter"
|
||||
msgstr "Veröffentliche öffentliche Nachrichten auf Twitter"
|
||||
|
||||
#: ../../addon/twitter/twitter.php:172 ../../addon/statusnet/statusnet.php:204
|
||||
msgid "Clear OAuth configuration"
|
||||
msgstr "OAuth Konfiguration löschen"
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:78
|
||||
msgid "Post to StatusNet"
|
||||
msgstr "Nach StatusNet senden"
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:146
|
||||
msgid "StatusNet Posting Settings"
|
||||
msgstr "StatusNet Posting Einstellungen"
|
||||
|
||||
#: ../../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.<br />Before you register your own OAuth "
|
||||
"key pair ask the administrator if there is already a key pair for this "
|
||||
"Friendika installation at your favorited StatusNet installation."
|
||||
msgstr ""
|
||||
"Kein OAuth Consumer Schlüsselpaar für StatusNet gefunden. Registriere deinen"
|
||||
" Friendika Account als Desktopapplikation und trage hier den OAuth Consumer "
|
||||
"Schlüssel, das Geheimnis und die Basis-URL der StatusNet API ein.<br />Bevor"
|
||||
" du eine neue Anwendung registrierst, kannst du auch erstmal den Admin "
|
||||
"deiner Friendika Seite fragen, ob es für deine bevorzugte StatusNet Instanz "
|
||||
"eventuell bereits ein OAuth Schlüsselpaar gibt."
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:154
|
||||
msgid "OAuth Consumer Key"
|
||||
msgstr "OAuth Consumer Schlüssel"
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:157
|
||||
msgid "OAuth Consumer Secret"
|
||||
msgstr "OAuth Consumer Geheimnis"
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:160
|
||||
msgid "Base API Path (remember the trailing /)"
|
||||
msgstr "Basis-URL der StatusNet API (vergiss den abschließenden / nicht)"
|
||||
|
||||
#: ../../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 <strong>public</strong> posts will be posted"
|
||||
" to StatusNet."
|
||||
msgstr ""
|
||||
"Um deinen Account mit einem StatusNet Account zu verknüpfen klicke den "
|
||||
"Button an um einen Sicherheitscode von StatusNet zu erhalten und kopiere "
|
||||
"diesen in die Eingabebox weiter unten. Es werden ausschließlich deine "
|
||||
"<strong>öffentlichen</strong> Nachrichten bei StatusNet veröffentllicht."
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:182
|
||||
msgid "Log in with StatusNet"
|
||||
msgstr "Bei StatusNet anmelden"
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:184
|
||||
msgid "Copy the security code from StatusNet here"
|
||||
msgstr "Kopiere den Sicherheitscode von StatusNet hier her"
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:198
|
||||
msgid ""
|
||||
"If enabled all your <strong>public</strong> postings will be posted to the "
|
||||
"associated StatusNet account as well."
|
||||
msgstr ""
|
||||
"Wenn dies aktiviert ist, werden alle deine <strong>öffentlichen</strong> "
|
||||
"Nachricten auch auf dem verbundenen StatusNet Account veröffentlicht."
|
||||
|
||||
#: ../../addon/statusnet/statusnet.php:200
|
||||
msgid "Send public postings to StatusNet"
|
||||
msgstr "Veröffentliche öffentliche Nachrichten auf StatusNet"
|
||||
|
||||
#: ../../addon/tictac/tictac.php:14
|
||||
msgid "Three Dimensional Tic-Tac-Toe"
|
||||
msgstr "Dreidimensionales Tic-Tac-Toe"
|
||||
|
||||
#: ../../addon/tictac/tictac.php:47
|
||||
msgid "3D Tic-Tac-Toe"
|
||||
msgstr "3D Tic-Tac-Toe"
|
||||
|
||||
#: ../../addon/tictac/tictac.php:52
|
||||
msgid "New game"
|
||||
msgstr "Neues Spiel"
|
||||
|
||||
#: ../../addon/tictac/tictac.php:53
|
||||
msgid "New game with handicap"
|
||||
msgstr "Neues Handicap Spiel"
|
||||
|
||||
#: ../../addon/tictac/tictac.php:54
|
||||
msgid ""
|
||||
"Three dimensional tic-tac-toe is just like the traditional game except that "
|
||||
"it is played on multiple levels simultaneously. "
|
||||
msgstr ""
|
||||
"Drei dimensionales Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur "
|
||||
"das man es auf mehreren Ebenen gleichzeitig spielt."
|
||||
|
||||
#: ../../addon/tictac/tictac.php:55
|
||||
msgid ""
|
||||
"In this case there are three levels. You win by getting three in a row on "
|
||||
"any level, as well as up, down, and diagonally across the different levels."
|
||||
msgstr ""
|
||||
"In diesem Fall sind es drei Ebenen. Man gewinnt indem man drei in einer "
|
||||
"Reihe auf einer beliebigen Reihe schafft, oder drei übereinander oder "
|
||||
"diagonal auf verschiedenen Ebenen."
|
||||
|
||||
#: ../../addon/tictac/tictac.php:57
|
||||
msgid ""
|
||||
"The handicap game disables the center position on the middle level because "
|
||||
"the player claiming this square often has an unfair advantage."
|
||||
msgstr ""
|
||||
"Beim Handicap-Spiel wird die zentrale Position der mittleren Ebene gesperrt "
|
||||
"da der Spieler der diese Ebene besitzt oft einen unfairen Vorteil genießt."
|
||||
|
||||
#: ../../addon/tictac/tictac.php:176
|
||||
msgid "You go first..."
|
||||
msgstr "Du fängst an..."
|
||||
|
||||
#: ../../addon/tictac/tictac.php:181
|
||||
msgid "I'm going first this time..."
|
||||
msgstr "Diesmal fange ich an..."
|
||||
|
||||
#: ../../addon/tictac/tictac.php:187
|
||||
msgid "You won!"
|
||||
msgstr "Du gewinnst!"
|
||||
|
||||
#: ../../addon/tictac/tictac.php:193 ../../addon/tictac/tictac.php:218
|
||||
msgid "\"Cat\" game!"
|
||||
msgstr "Unentschieden!"
|
||||
|
||||
#: ../../addon/tictac/tictac.php:216
|
||||
msgid "I won!"
|
||||
msgstr "Ich gewinne!"
|
||||
|
||||
#: ../../addon/java_upload/java_upload.php:33
|
||||
msgid "Select files to upload: "
|
||||
msgstr "Wähle Dateien zum Upload aus: "
|
||||
|
||||
#: ../../addon/java_upload/java_upload.php:35
|
||||
msgid ""
|
||||
"Use the following controls only if the Java uploader [above] fails to "
|
||||
"launch."
|
||||
msgstr ""
|
||||
"Verwende die folgenden Kontrollen nur, wenn der Java Uploader [oben] nicht "
|
||||
"funktioniert."
|
||||
|
||||
#: ../../addon/facebook/facebook.php:252
|
||||
msgid "Facebook disabled"
|
||||
msgstr "Facebook deaktiviert"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:257
|
||||
msgid "Updating contacts"
|
||||
msgstr "Aktualisiere Kontakte"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:266
|
||||
msgid "Facebook API key is missing."
|
||||
msgstr "Facebook API Schlüssel nicht gefunden"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:273
|
||||
msgid "Facebook Connect"
|
||||
msgstr "Mit Facebook verbinden"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:279
|
||||
msgid "Install Facebook connector for this account."
|
||||
msgstr "Facebook Connector für diesen Account installieren."
|
||||
|
||||
#: ../../addon/facebook/facebook.php:286
|
||||
msgid "Remove Facebook connector"
|
||||
msgstr "Facebook Connector entfernen"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:292
|
||||
msgid "Post to Facebook by default"
|
||||
msgstr "Sende standardmäßig nach Facebook"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:354
|
||||
msgid "Facebook"
|
||||
msgstr "Facebook"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:355
|
||||
msgid "Facebook Connector Settings"
|
||||
msgstr "Facebook Verbindungseinstellungen"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:369
|
||||
msgid "Post to Facebook"
|
||||
msgstr "Zu Facebook posten"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:436
|
||||
msgid ""
|
||||
"Post to Facebook cancelled because of multi-network access permission "
|
||||
"conflict."
|
||||
msgstr ""
|
||||
"Das Senden nach Facebook wurde zurückgezogen da Konflikte bei den Multi-"
|
||||
"Netzwerks-Rechten vorliegen."
|
||||
|
||||
#: ../../addon/facebook/facebook.php:491
|
||||
msgid "Image: "
|
||||
msgstr "Bild"
|
||||
|
||||
#: ../../addon/facebook/facebook.php:551
|
||||
msgid "View on Friendika"
|
||||
msgstr "Auf Friendika ansehen"
|
||||
|
||||
#: ../../addon/randplace/randplace.php:171
|
||||
msgid "Randplace Settings"
|
||||
msgstr "Randplace Einstellungen"
|
||||
|
||||
#: ../../addon/randplace/randplace.php:173
|
||||
msgid "Enable Randplace Plugin"
|
||||
msgstr "Randplace Erweiterung aktivieren"
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:39
|
||||
msgid "Upload a file"
|
||||
msgstr "Datei hochladen"
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:40
|
||||
msgid "Drop files here to upload"
|
||||
msgstr "Ziehe die Dateien hier her die du hochladen willst"
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:42
|
||||
msgid "Failed"
|
||||
msgstr "Fehlgeschlagen"
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:288
|
||||
msgid "No files were uploaded."
|
||||
msgstr "Keine Dateien hochgeladen."
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:294
|
||||
msgid "Uploaded file is empty"
|
||||
msgstr "Hochgeladene Datei ist leer"
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:299
|
||||
msgid "Uploaded file is too large"
|
||||
msgstr "Hochgeladene Datei ist zu groß"
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:317
|
||||
msgid "File has an invalid extension, it should be one of "
|
||||
msgstr ""
|
||||
"Die Dateiextension ist nicht erlaubt, sie muss eine der folgenden sein "
|
||||
|
||||
#: ../../addon/js_upload/js_upload.php:328
|
||||
msgid "Upload was cancelled, or server error encountered"
|
||||
msgstr "Upload abgebrochen oder Serverfehler aufgetreten"
|
||||
|
||||
#: ../../include/notifier.php:414
|
||||
msgid "(no subject)"
|
||||
msgstr "(kein Betreff)"
|
||||
|
||||
#: ../../include/contact_selectors.php:32
|
||||
msgid "Unknown | Not categorised"
|
||||
msgstr "Unbekannt | Nicht kategorisiert"
|
||||
|
||||
#: ../../include/contact_selectors.php:33
|
||||
msgid "Block immediately"
|
||||
msgstr "Sofort blockieren"
|
||||
|
||||
#: ../../include/contact_selectors.php:34
|
||||
msgid "Shady, spammer, self-marketer"
|
||||
msgstr "Zwielichtig, Spammer, Selbstdarsteller"
|
||||
|
||||
#: ../../include/contact_selectors.php:35
|
||||
msgid "Known to me, but no opinion"
|
||||
msgstr "Ist mir bekannt, hab aber keine Meinung"
|
||||
|
||||
#: ../../include/contact_selectors.php:36
|
||||
msgid "OK, probably harmless"
|
||||
msgstr "OK, wahrscheinlich harmlos"
|
||||
|
||||
#: ../../include/contact_selectors.php:37
|
||||
msgid "Reputable, has my trust"
|
||||
msgstr "Seriös, hat mein Vertrauen"
|
||||
|
||||
#: ../../include/contact_selectors.php:55
|
||||
msgid "Frequently"
|
||||
msgstr "Häufig"
|
||||
|
||||
#: ../../include/contact_selectors.php:56
|
||||
msgid "Hourly"
|
||||
msgstr "Stündlich"
|
||||
|
||||
#: ../../include/contact_selectors.php:57
|
||||
msgid "Twice daily"
|
||||
msgstr "Zweimal Täglich"
|
||||
|
||||
#: ../../include/contact_selectors.php:58
|
||||
msgid "Daily"
|
||||
msgstr "Täglich"
|
||||
|
||||
#: ../../include/contact_selectors.php:59
|
||||
msgid "Weekly"
|
||||
msgstr "Wöchendlich"
|
||||
|
||||
#: ../../include/contact_selectors.php:60
|
||||
msgid "Monthly"
|
||||
msgstr "Monatlich"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Male"
|
||||
msgstr "Männlich"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Female"
|
||||
msgstr "Weiblich"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Currently Male"
|
||||
msgstr "Momentan Männlich"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Currently Female"
|
||||
msgstr "Momentan Weiblich"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Mostly Male"
|
||||
msgstr "Hauptsächlich Männlich"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Mostly Female"
|
||||
msgstr "Hauptsächlich Weiblich"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Transgender"
|
||||
msgstr "Transgender"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Intersex"
|
||||
msgstr "Intersex"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Transsexual"
|
||||
msgstr "Transsexuel"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Hermaphrodite"
|
||||
msgstr "Hermaphrodit"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Neuter"
|
||||
msgstr "Neuter"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Non-specific"
|
||||
msgstr "Nicht spezifiziert"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Other"
|
||||
msgstr "Andere"
|
||||
|
||||
#: ../../include/profile_selectors.php:6
|
||||
msgid "Undecided"
|
||||
msgstr "Unentschieden"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Males"
|
||||
msgstr "Männer"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Females"
|
||||
msgstr "Frauen"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Gay"
|
||||
msgstr "Schwul"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Lesbian"
|
||||
msgstr "Lesbisch"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "No Preference"
|
||||
msgstr "Keine Vorlieben"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Bisexual"
|
||||
msgstr "Bisexuel"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Autosexual"
|
||||
msgstr "Autosexual"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Abstinent"
|
||||
msgstr "Abstinent"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Virgin"
|
||||
msgstr "Jungfrau"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Deviant"
|
||||
msgstr "Deviant"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Fetish"
|
||||
msgstr "Fetish"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Oodles"
|
||||
msgstr "Oodles"
|
||||
|
||||
#: ../../include/profile_selectors.php:19
|
||||
msgid "Nonsexual"
|
||||
msgstr "Nonsexual"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Single"
|
||||
msgstr "Single"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Lonely"
|
||||
msgstr "Einsam"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Available"
|
||||
msgstr "Verfügbar"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Unavailable"
|
||||
msgstr "Nicht verfügbar"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Dating"
|
||||
msgstr "Dating"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Unfaithful"
|
||||
msgstr "Untreu"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Sex Addict"
|
||||
msgstr "Sex Besessen"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Friends"
|
||||
msgstr "Freunde"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Friends/Benefits"
|
||||
msgstr "Friends/Benefits"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Casual"
|
||||
msgstr "Casual"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Engaged"
|
||||
msgstr "Verlobt"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Married"
|
||||
msgstr "Verheiratet"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Partners"
|
||||
msgstr "Partner"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Cohabiting"
|
||||
msgstr "kohabitierend"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Happy"
|
||||
msgstr "Glücklich"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Not Looking"
|
||||
msgstr "Nicht auf der Suche"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Swinger"
|
||||
msgstr "Swinger"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Betrayed"
|
||||
msgstr "Betrogen"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Separated"
|
||||
msgstr "Getrennt"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Unstable"
|
||||
msgstr "Unstabil"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Divorced"
|
||||
msgstr "Geschieden"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Widowed"
|
||||
msgstr "Verwidwet"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Uncertain"
|
||||
msgstr "Unsicher"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Complicated"
|
||||
msgstr "Kompliziert"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Don't care"
|
||||
msgstr "Ist mir nicht wichtig"
|
||||
|
||||
#: ../../include/profile_selectors.php:33
|
||||
msgid "Ask me"
|
||||
msgstr "Frag mich"
|
||||
|
||||
#: ../../include/acl_selectors.php:133
|
||||
msgid "Visible To:"
|
||||
msgstr "Sichtbar für:"
|
||||
|
||||
#: ../../include/acl_selectors.php:137 ../../include/acl_selectors.php:152
|
||||
msgid "Groups"
|
||||
msgstr "Gruppen"
|
||||
|
||||
#: ../../include/acl_selectors.php:148
|
||||
msgid "Except For:"
|
||||
msgstr "Abgesehen von:"
|
||||
|
||||
#: ../../include/auth.php:27
|
||||
msgid "Logged out."
|
||||
msgstr "Abgemeldet."
|
||||
|
||||
#: ../../include/bbcode.php:83
|
||||
msgid "Image/photo"
|
||||
msgstr "Bild/Foto"
|
||||
|
||||
#: ../../include/datetime.php:44 ../../include/datetime.php:46
|
||||
msgid "Miscellaneous"
|
||||
msgstr "Verschiedenes"
|
||||
|
||||
#: ../../include/datetime.php:148
|
||||
msgid "less than a second ago"
|
||||
msgstr "vor weniger als einer Sekunde"
|
||||
|
||||
#: ../../include/datetime.php:151
|
||||
msgid "year"
|
||||
msgstr "Jahr"
|
||||
|
||||
#: ../../include/datetime.php:151
|
||||
msgid "years"
|
||||
msgstr "Jahre"
|
||||
|
||||
#: ../../include/datetime.php:152
|
||||
msgid "month"
|
||||
msgstr "Monat"
|
||||
|
||||
#: ../../include/datetime.php:152
|
||||
msgid "months"
|
||||
msgstr "Monate"
|
||||
|
||||
#: ../../include/datetime.php:153
|
||||
msgid "week"
|
||||
msgstr "Woche"
|
||||
|
||||
#: ../../include/datetime.php:153
|
||||
msgid "weeks"
|
||||
msgstr "Wochen"
|
||||
|
||||
#: ../../include/datetime.php:154
|
||||
msgid "day"
|
||||
msgstr "Tag"
|
||||
|
||||
#: ../../include/datetime.php:155
|
||||
msgid "hour"
|
||||
msgstr "Stunde"
|
||||
|
||||
#: ../../include/datetime.php:155
|
||||
msgid "hours"
|
||||
msgstr "Stunden"
|
||||
|
||||
#: ../../include/datetime.php:156
|
||||
msgid "minute"
|
||||
msgstr "Minute"
|
||||
|
||||
#: ../../include/datetime.php:156
|
||||
msgid "minutes"
|
||||
msgstr "Minuten"
|
||||
|
||||
#: ../../include/datetime.php:157
|
||||
msgid "second"
|
||||
msgstr "Sekunde"
|
||||
|
||||
#: ../../include/datetime.php:157
|
||||
msgid "seconds"
|
||||
msgstr "Sekunden"
|
||||
|
||||
#: ../../include/datetime.php:164
|
||||
msgid " ago"
|
||||
msgstr " her"
|
||||
|
||||
#: ../../include/profile_advanced.php:36 ../../include/items.php:1072
|
||||
msgid "Birthday:"
|
||||
msgstr "Geburtstag:"
|
||||
|
||||
#: ../../include/profile_advanced.php:45
|
||||
msgid "j F, Y"
|
||||
msgstr "j F, Y"
|
||||
|
||||
#: ../../include/profile_advanced.php:46
|
||||
msgid "j F"
|
||||
msgstr "j F"
|
||||
|
||||
#: ../../include/profile_advanced.php:59
|
||||
msgid "Age:"
|
||||
msgstr "Alter:"
|
||||
|
||||
#: ../../include/profile_advanced.php:70
|
||||
msgid "<span class=\"heart\">♥</span> Status:"
|
||||
msgstr "<span class=\"heart\">♥</span> Bezieungsstatus:"
|
||||
|
||||
#: ../../include/profile_advanced.php:127
|
||||
msgid "Religion:"
|
||||
msgstr "Religion:"
|
||||
|
||||
#: ../../include/profile_advanced.php:138
|
||||
msgid "About:"
|
||||
msgstr "Über:"
|
||||
|
||||
#: ../../include/profile_advanced.php:150
|
||||
msgid "Hobbies/Interests:"
|
||||
msgstr "Hobbies/Interessen:"
|
||||
|
||||
#: ../../include/profile_advanced.php:162
|
||||
msgid "Contact information and Social Networks:"
|
||||
msgstr "Kontaktinformationen und Soziale Netzwerke:"
|
||||
|
||||
#: ../../include/profile_advanced.php:174
|
||||
msgid "Musical interests:"
|
||||
msgstr "Musikalische Interessen:"
|
||||
|
||||
#: ../../include/profile_advanced.php:186
|
||||
msgid "Books, literature:"
|
||||
msgstr "Literatur/Bücher:"
|
||||
|
||||
#: ../../include/profile_advanced.php:198
|
||||
msgid "Television:"
|
||||
msgstr "Fernsehen:"
|
||||
|
||||
#: ../../include/profile_advanced.php:210
|
||||
msgid "Film/dance/culture/entertainment:"
|
||||
msgstr "Filme/Tänze/Kultur/Unterhaltung:"
|
||||
|
||||
#: ../../include/profile_advanced.php:222
|
||||
msgid "Love/Romance:"
|
||||
msgstr "Liebesleben:"
|
||||
|
||||
#: ../../include/profile_advanced.php:234
|
||||
msgid "Work/employment:"
|
||||
msgstr "Arbeit/Beschäftigung:"
|
||||
|
||||
#: ../../include/profile_advanced.php:246
|
||||
msgid "School/education:"
|
||||
msgstr "Schule/Ausbildung:"
|
||||
|
||||
#: ../../include/nav.php:55 ../../include/nav.php:93
|
||||
msgid "Home"
|
||||
msgstr "Persönlich"
|
||||
|
||||
#: ../../include/nav.php:68
|
||||
msgid "Apps"
|
||||
msgstr "Apps"
|
||||
|
||||
#: ../../include/nav.php:81
|
||||
msgid "Directory"
|
||||
msgstr "Verzeichnis"
|
||||
|
||||
#: ../../include/nav.php:91
|
||||
msgid "Network"
|
||||
msgstr "Netzwerk"
|
||||
|
||||
#: ../../include/nav.php:99
|
||||
msgid "Notifications"
|
||||
msgstr "Benachrichtigungen"
|
||||
|
||||
#: ../../include/nav.php:105
|
||||
msgid "Manage"
|
||||
msgstr "Verwalten"
|
||||
|
||||
#: ../../include/nav.php:108
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#: ../../include/conversation.php:184 ../../include/conversation.php:441
|
||||
#: ../../include/conversation.php:442
|
||||
#, php-format
|
||||
msgid "View %s's profile"
|
||||
msgstr "Betrachte %s's Profil"
|
||||
|
||||
#: ../../include/conversation.php:200
|
||||
msgid "View in context"
|
||||
msgstr "Im Zusammenhang betrachten"
|
||||
|
||||
#: ../../include/conversation.php:271
|
||||
msgid "See more posts like this"
|
||||
msgstr "Mehr Beiträge wie diesen anzeigen"
|
||||
|
||||
#: ../../include/conversation.php:296
|
||||
#, php-format
|
||||
msgid "See all %d comments"
|
||||
msgstr "Alle %d Kommentare anzeigen"
|
||||
|
||||
#: ../../include/conversation.php:443
|
||||
msgid "to"
|
||||
msgstr "to"
|
||||
|
||||
#: ../../include/conversation.php:444
|
||||
msgid "Wall-to-Wall"
|
||||
msgstr "Wall-to-Wall"
|
||||
|
||||
#: ../../include/conversation.php:445
|
||||
msgid "via Wall-To-Wall:"
|
||||
msgstr "via Wall-To-Wall:"
|
||||
|
||||
#: ../../include/conversation.php:583
|
||||
msgid "View status"
|
||||
msgstr "Status anzeigen"
|
||||
|
||||
#: ../../include/conversation.php:584
|
||||
msgid "View profile"
|
||||
msgstr "Profil anzeigen"
|
||||
|
||||
#: ../../include/conversation.php:585
|
||||
msgid "View photos"
|
||||
msgstr "Fotos ansehen"
|
||||
|
||||
#: ../../include/conversation.php:586
|
||||
msgid "View recent"
|
||||
msgstr "Jüngste anzeigen"
|
||||
|
||||
#: ../../include/conversation.php:588
|
||||
msgid "Send PM"
|
||||
msgstr "Private Nachricht senden"
|
||||
|
||||
#: ../../include/conversation.php:638
|
||||
#, php-format
|
||||
msgid "%s likes this."
|
||||
msgstr "%s mag dies."
|
||||
|
||||
#: ../../include/conversation.php:638
|
||||
#, php-format
|
||||
msgid "%s doesn't like this."
|
||||
msgstr "%s mag dies nicht."
|
||||
|
||||
#: ../../include/conversation.php:642
|
||||
#, php-format
|
||||
msgid "<span %1$s>%2$d people</span> like this."
|
||||
msgstr "<span %1$s>%2$d Personen</span> mögen dies."
|
||||
|
||||
#: ../../include/conversation.php:644
|
||||
#, php-format
|
||||
msgid "<span %1$s>%2$d people</span> don't like this."
|
||||
msgstr "<span %1$s>%2$d Personen</span> mögen dies nicht."
|
||||
|
||||
#: ../../include/conversation.php:650
|
||||
msgid "and"
|
||||
msgstr "und"
|
||||
|
||||
#: ../../include/conversation.php:653
|
||||
#, php-format
|
||||
msgid ", and %d other people"
|
||||
msgstr " und %d andere"
|
||||
|
||||
#: ../../include/conversation.php:654
|
||||
#, php-format
|
||||
msgid "%s like this."
|
||||
msgstr "%s mag dies."
|
||||
|
||||
#: ../../include/conversation.php:654
|
||||
#, php-format
|
||||
msgid "%s don't like this."
|
||||
msgstr "%s mag dies nicht."
|
||||
|
||||
#: ../../include/conversation.php:675
|
||||
msgid "Please enter a YouTube link:"
|
||||
msgstr "Bitte gebe den YouTube Link ein:"
|
||||
|
||||
#: ../../include/conversation.php:676
|
||||
msgid "Please enter a video(.ogg) link/URL:"
|
||||
msgstr "Bitte gebe den Link zum Video(.ogg) an:"
|
||||
|
||||
#: ../../include/conversation.php:677
|
||||
msgid "Please enter an audio(.ogg) link/URL:"
|
||||
msgstr "Bitte gebe den Link zum Audio(.ogg) an:"
|
||||
|
||||
#: ../../include/conversation.php:678
|
||||
msgid "Where are you right now?"
|
||||
msgstr "Wo hälst du dich jetzt gerade auf?"
|
||||
|
||||
#: ../../include/conversation.php:679
|
||||
msgid "Enter a title for this item"
|
||||
msgstr "Gib den Titel für diesen Beitrag ein"
|
||||
|
||||
#: ../../include/conversation.php:726
|
||||
msgid "Set title"
|
||||
msgstr "Titel setzen"
|
||||
|
||||
#: ../../include/dba.php:31
|
||||
#, php-format
|
||||
msgid "Cannot locate DNS info for database server '%s'"
|
||||
msgstr ""
|
||||
"Kann die DNS Informationen für den Datenbanken Server '%s' nicht ermitteln."
|
||||
|
||||
#: ../../include/items.php:1433
|
||||
msgid "You have a new follower at "
|
||||
msgstr "Du hast einen neuen Kontakt auf "
|
||||
|
||||
#: ../../include/group.php:146
|
||||
msgid "Create a new group"
|
||||
msgstr "Neue Gruppe erstellen"
|
||||
|
||||
#: ../../include/group.php:147
|
||||
msgid "Everybody"
|
||||
msgstr "Alle Kontakte"
|
||||
|
||||
#: ../../include/oembed.php:57
|
||||
msgid "Embedding disabled"
|
||||
msgstr "Einbettungen deaktiviert"
|
||||
|
|
@ -1,104 +0,0 @@
|
|||
|
||||
<script language="javascript" type="text/javascript" src="$baseurl/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>
|
||||
<script language="javascript" type="text/javascript">
|
||||
|
||||
tinyMCE.init({
|
||||
theme : "advanced",
|
||||
mode : "specific_textareas",
|
||||
editor_selector: /(profile-jot-text|prvmail-text)/,
|
||||
plugins : "bbcode,paste",
|
||||
theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor",
|
||||
theme_advanced_buttons2 : "",
|
||||
theme_advanced_buttons3 : "",
|
||||
theme_advanced_toolbar_location : "top",
|
||||
theme_advanced_toolbar_align : "center",
|
||||
theme_advanced_blockformats : "blockquote,code",
|
||||
paste_text_sticky : true,
|
||||
entity_encoding : "raw",
|
||||
add_unload_trigger : false,
|
||||
remove_linebreaks : false,
|
||||
force_p_newlines : false,
|
||||
force_br_newlines : true,
|
||||
forced_root_block : '',
|
||||
convert_urls: false,
|
||||
content_css: "$baseurl/view/custom_tinymce.css",
|
||||
//Character count
|
||||
theme_advanced_path : false,
|
||||
setup : function(ed) {
|
||||
ed.onKeyUp.add(function(ed, e) {
|
||||
var txt = tinyMCE.activeEditor.getContent();
|
||||
var text = txt.length;
|
||||
if(txt.length <= 140) {
|
||||
$('#character-counter').removeClass('red');
|
||||
$('#character-counter').removeClass('orange');
|
||||
$('#character-counter').addClass('grey');
|
||||
}
|
||||
if((txt.length > 140) && (txt .length <= 420)) {
|
||||
$('#character-counter').removeClass('grey');
|
||||
$('#character-counter').removeClass('red');
|
||||
$('#character-counter').addClass('orange');
|
||||
}
|
||||
if(txt.length > 420) {
|
||||
$('#character-counter').removeClass('grey');
|
||||
$('#character-counter').removeClass('orange');
|
||||
$('#character-counter').addClass('red');
|
||||
}
|
||||
$('#character-counter').text(text);
|
||||
});
|
||||
|
||||
ed.onInit.add(function(ed) {
|
||||
ed.pasteAsPlainText = true;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" src="include/ajaxupload.js" ></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var uploader = new window.AjaxUpload(
|
||||
'prvmail-upload',
|
||||
{ action: 'wall_upload/$nickname',
|
||||
name: 'userfile',
|
||||
onSubmit: function(file,ext) { $('#profile-rotator').show(); },
|
||||
onComplete: function(file,response) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,response);
|
||||
$('#profile-rotator').hide();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
function jotGetLink() {
|
||||
reply = prompt("Please enter a link URL:");
|
||||
if(reply && reply.length) {
|
||||
$('#profile-rotator').show();
|
||||
$.get('parse_url?url=' + reply, function(data) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,data);
|
||||
$('#profile-rotator').hide();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function linkdropper(event) {
|
||||
var linkFound = event.dataTransfer.types.contains("text/uri-list");
|
||||
if(linkFound)
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
function linkdrop(event) {
|
||||
var reply = event.dataTransfer.getData("text/uri-list");
|
||||
event.target.textContent = reply;
|
||||
event.preventDefault();
|
||||
if(reply && reply.length) {
|
||||
$('#profile-rotator').show();
|
||||
$.get('parse_url?url=' + reply, function(data) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,data);
|
||||
$('#profile-rotator').hide();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
<div id="settings-normal-wrapper">
|
||||
<label id="settings-normal-label" for="settings-normal">Normales Profil</label>
|
||||
<input type="radio" name="page-flags" id="settings-normal" $normal_selected value="$page_normal" />
|
||||
<span id="settings-normal-desc">Dieser Account ist ein normaler persönlicher Account</span>
|
||||
</div>
|
||||
<div id="settings-normal-break" ></div>
|
||||
<div id="settings-soapbox-wrapper">
|
||||
<label id="settings-soapbox-label" for="settings-soapbox">Sandkasten Profil</label>
|
||||
<input type="radio" name="page-flags" id="settings-soapbox" $soapbox_selected value="$page_soapbox" />
|
||||
<span id="settings-soapbox-desc">Alle Kontakt/Freundschaftsanfragen werden automatisch als Nur-Lese Fans akzepdiert</span>
|
||||
</div>
|
||||
<div id="settings-soapbox-break" ></div>
|
||||
<div id="settings-community-wrapper">
|
||||
<label id="settings-community-label" for="settings-community">Gemeindschafts/Prominenten Profil</label>
|
||||
<input type="radio" name="page-flags" id="settings-community" $community_selected value="$page_community" />
|
||||
<span id="settings-community-desc">Alle Kontakt/Freundschaftsanfragen werden automatisch als Lese-und-Schreiben Fans akzepdiert</span>
|
||||
</div>
|
||||
<div id="settings-community-break" ></div>
|
||||
<div id="settings-freelove-wrapper">
|
||||
<label id="settings-freelove-label" for="settings-freelove">Automatisches Freundschafts-Profil</label>
|
||||
<input type="radio" name="page-flags" id="settings-freelove" $freelove_selected value="$page_freelove" />
|
||||
<span id="settings-freelove-desc">Alle Kontakt/Freundschaftsanfragen werden automatisch als Freund akzepdiert</span>
|
||||
</div>
|
||||
<div id="settings-freelove-break" ></div>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<p id="hide-friends-text">
|
||||
Verberge meine Kontaktliste von Leuten die dieses Profil ansehen?
|
||||
</p>
|
||||
|
||||
<div id="hide-friends-yes-wrapper">
|
||||
<label id="hide-friends-yes-label" for="hide-friends-yes">Ja</label>
|
||||
<input type="radio" name="hide-friends" id="hide-friends-yes" $yes_selected value="1" />
|
||||
|
||||
<div id="hide-friends-break" ></div>
|
||||
</div>
|
||||
<div id="hide-friends-no-wrapper">
|
||||
<label id="hide-friends-no-label" for="hide-friends-no">Nein</label>
|
||||
<input type="radio" name="hide-friends" id="hide-friends-no" $no_selected value="0" />
|
||||
|
||||
<div id="hide-friends-end"></div>
|
||||
</div>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<p id="profile-in-directory">
|
||||
Soll dein Standard-Profil im Verzeichnis dieser Seite veröffentlich werden?
|
||||
</p>
|
||||
|
||||
<div id="profile-in-dir-yes-wrapper">
|
||||
<label id="profile-in-dir-yes-label" for="profile-in-dir-yes">Ja</label>
|
||||
<input type="radio" name="profile_in_directory" id="profile-in-dir-yes" $yes_selected value="1" />
|
||||
|
||||
<div id="profile-in-dir-break" ></div>
|
||||
</div>
|
||||
<div id="profile-in-dir-no-wrapper">
|
||||
<label id="profile-in-dir-no-label" for="profile-in-dir-no">Nein</label>
|
||||
<input type="radio" name="profile_in_directory" id="profile-in-dir-no" $no_selected value="0" />
|
||||
|
||||
<div id="profile-in-dir-end"></div>
|
||||
</div>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<p id="profile-in-directory">
|
||||
Soll dein Standard-Profil im globalen Verzeichnis veröffentlicht werden?
|
||||
</p>
|
||||
|
||||
<div id="profile-in-netdir-yes-wrapper">
|
||||
<label id="profile-in-netdir-yes-label" for="profile-in-netdir-yes">Ja</label>
|
||||
<input type="radio" name="profile_in_netdirectory" id="profile-in-netdir-yes" $yes_selected value="1" />
|
||||
|
||||
<div id="profile-in-netdir-break" ></div>
|
||||
</div>
|
||||
<div id="profile-in-netdir-no-wrapper">
|
||||
<label id="profile-in-netdir-no-label" for="profile-in-netdir-no">Nein</label>
|
||||
<input type="radio" name="profile_in_netdirectory" id="profile-in-netdir-no" $no_selected value="0" />
|
||||
|
||||
<div id="profile-in-netdir-end"></div>
|
||||
</div>
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
<!DOCTYPE html ><?php // This is a perfect example of why I prefer to use template files rather than mixed PHP/HTML ?>
|
||||
<html>
|
||||
<head>
|
||||
<title><?php if(x($page,'title')) echo $page['title']; ?></title>
|
||||
<?php if(x($page,'htmlhead')) echo $page['htmlhead']; ?>
|
||||
</head>
|
||||
<body>
|
||||
<header><?php if(x($page,'header')) echo $page['header']; ?></header>
|
||||
<nav><div id="top-margin"></div><?php if(x($page,'nav')) echo $page['nav']; ?></nav>
|
||||
<aside>
|
||||
<?php if((is_array($profile)) && count($profile)) { ?>
|
||||
<div class="vcard">
|
||||
<?php if(strlen($profile['name'])) { ?>
|
||||
<div class="fn"><?php echo $profile['name']; ?></div>
|
||||
<?php } ?>
|
||||
|
||||
<?php if(strlen($profile['photo'])) { ?>
|
||||
<div id="profile-photo-wrapper"><img class="photo" src="<?php echo $profile['photo']; ?>" alt="<?php echo $profile['name']; ?>" /></div>
|
||||
<?php } ?>
|
||||
|
||||
<div id="profile-extra-links">
|
||||
<ul>
|
||||
<?php if($profile['uid'] != $_SESSION['uid']) { ?>
|
||||
<li><a id="dfrn-request-link" href="dfrn_request/<?php echo $profile['nickname']; ?>">In Verbindung treten</a></li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if ( (strlen($profile['address']))
|
||||
|| (strlen($profile['locality']))
|
||||
|| (strlen($profile['region']))
|
||||
|| (strlen($profile['postal-code']))
|
||||
|| (strlen($profile['country-name']))) { ?>
|
||||
<div class="location">Standort:
|
||||
<div class="adr">
|
||||
<div class="street-address"><?php if(strlen($profile['address'])) echo $profile['address']; ?></div>
|
||||
<span class="city-state-zip"><span class="locality"><?php echo $profile['locality']; ?></span><?php if(strlen($profile['locality'])) echo ', '; ?><span class="region"><?php echo $profile['region'] ?></span><?php if(strlen($profile['postal-code'])) { ?> <span class="postal-code"><?php echo $profile['postal-code']; ?></span><?php } ?></span>
|
||||
<span class="country-name"><?php echo $profile['country-name']; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php if(strlen($profile['gender'])) { ?>
|
||||
<div class="mf">Geschlecht: <span class="x-gender"><?php echo $profile['gender']; ?></span></div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php if(strlen($profile['pubkey'])) { ?>
|
||||
<div class="key" style="display: none;"><?php echo $profile['pubkey']; ?></div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if(strlen($profile['marital'])) { ?>
|
||||
<div class="marital"><span class="marital-label"><span class="heart">♥</span> Status: </span><span class="marital-text"><?php echo $profile['marital']; ?></span></div>
|
||||
<?php } ?>
|
||||
<?php if(strlen($profile['homepage'])) { ?>
|
||||
<div class="homepage"><span class="homepage-label">Homepage: </span><span class="homepage-url"><?php echo linkify($profile['homepage']); ?></span></div>
|
||||
<?php } ?>
|
||||
<?php if(x($page,'aside')) echo $page['aside'] ?>
|
||||
</aside>
|
||||
<section>
|
||||
<?php if(x($page,'content')) echo $page['content']; ?>
|
||||
<div id="page-footer"></div>
|
||||
</section>
|
||||
<footer>
|
||||
<?php if(x($page,'footer')) echo $page['footer']; ?>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
@ -1,226 +0,0 @@
|
|||
<?php
|
||||
|
||||
$o .= '';
|
||||
|
||||
$o .= <<< EOT
|
||||
|
||||
<h2>Profile</h2>
|
||||
|
||||
|
||||
EOT;
|
||||
|
||||
if($a->profile['name']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-name-wrapper" >
|
||||
<div id="advanced-profile-name-text">Full Name:</div>
|
||||
<div id="advanced-profile-name">{$a->profile['name']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-name-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['gender']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-gender-wrapper" >
|
||||
<div id="advanced-profile-gender-text">Gender:</div>
|
||||
<div id="advanced-profile-gender">{$a->profile['gender']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-gender-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if(($a->profile['dob']) && ($a->profile['dob'] != '0000-00-00')) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-dob-wrapper" >
|
||||
<div id="advanced-profile-dob-text">Birthday:</div>
|
||||
EOT;
|
||||
|
||||
// If no year, add an arbitrary one so just we can parse the month and day.
|
||||
|
||||
$o .= '<div id="advanced-profile-dob">'
|
||||
. ((intval($a->profile['dob']))
|
||||
? day_translate(datetime_convert('UTC','UTC',$a->profile['dob'] . ' 00:00 +00:00','j F, Y'))
|
||||
: day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],6) . ' 00:00 +00:00','j F')))
|
||||
. "</div>\r\n</div>";
|
||||
|
||||
$o .= '<div id="advanced-profile-dob-end"></div>';
|
||||
|
||||
}
|
||||
|
||||
if($age = age($a->profile['dob'],$a->profile['timezone'],'')) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-age-wrapper" >
|
||||
<div id="advanced-profile-age-text">Age:</div>
|
||||
<div id="advanced-profile-age">$age</div>
|
||||
</div>
|
||||
<div id="advanced-profile-age-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['marital']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-marital-wrapper" >
|
||||
<div id="advanced-profile-marital-text"><span class="heart">♥</span> Status:</div>
|
||||
<div id="advanced-profile-marital">{$a->profile['marital']}</div>
|
||||
EOT;
|
||||
|
||||
if($a->profile['with'])
|
||||
$o .= "<div id=\"advanced-profile-with\">({$a->profile['with']})</div>";
|
||||
$o .= <<< EOT
|
||||
</div>
|
||||
<div id="advanced-profile-marital-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['sexual']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-sexual-wrapper" >
|
||||
<div id="advanced-profile-sexual-text">Sexual Preference:</div>
|
||||
<div id="advanced-profile-sexual">{$a->profile['sexual']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-sexual-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['homepage']) {
|
||||
$homepage = linkify($a->profile['homepage']);
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-homepage-wrapper" >
|
||||
<div id="advanced-profile-homepage-text">Homepage:</div>
|
||||
<div id="advanced-profile-homepage">$homepage</div>
|
||||
</div>
|
||||
<div id="advanced-profile-homepage-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['politic']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-politic-wrapper" >
|
||||
<div id="advanced-profile-politic-text">Political Views:</div>
|
||||
<div id="advanced-profile-politic">{$a->profile['politic']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-politic-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['religion']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-religion-wrapper" >
|
||||
<div id="advanced-profile-religion-text">Religion:</div>
|
||||
<div id="advanced-profile-religion">{$a->profile['religion']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-religion-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['about'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-about-wrapper" >
|
||||
<div id="advanced-profile-about-text">About:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-about">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-about-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['interest'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-interest-wrapper" >
|
||||
<div id="advanced-profile-interest-text">Hobbies/Interests:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-interest">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-interest-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['contact'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-contact-wrapper" >
|
||||
<div id="advanced-profile-contact-text">Contact information and Social Networks:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-contact">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-contact-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['music'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-music-wrapper" >
|
||||
<div id="advanced-profile-music-text">Musical interests:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-music">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-music-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['book'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-book-wrapper" >
|
||||
<div id="advanced-profile-book-text">Books, literature:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-book">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-book-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['tv'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-tv-wrapper" >
|
||||
<div id="advanced-profile-tv-text">Television:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-tv">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-tv-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['film'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-film-wrapper" >
|
||||
<div id="advanced-profile-film-text">Film/dance/culture/entertainment:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-film">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-film-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['romance'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-romance-wrapper" >
|
||||
<div id="advanced-profile-romance-text">Love/romance:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-romance">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-romance-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['work'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-work-wrapper" >
|
||||
<div id="advanced-profile-work-text">Work/employment:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-work">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-work-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['education'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-education-wrapper" >
|
||||
<div id="advanced-profile-education-text">School/education:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-education">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-education-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
|
||||
<div class="profile-listing" >
|
||||
<div class="profile-listing-photo-wrapper" >
|
||||
<a href="profiles/$id" class="profile-listing-edit-link" ><img class="profile-listing-photo" id="profile-listing-photo-$id" src="$photo" alt="Profilbild" /></a>
|
||||
</div>
|
||||
<div class="profile-listing-photo-end" ></div>
|
||||
<div class="profile-listing-name" id="profile-listing-name-$id"><a href="profiles/$id" class="profile-listing-edit-link" >$profile_name</a></div>
|
||||
</div>
|
||||
<div class="profile-listing-end"></div>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<h1>Profile</h1>
|
||||
<p id="profile-listing-desc" >
|
||||
<a href="profile_photo" >Profilbild ändern</a>
|
||||
</p>
|
||||
<div id="profile-listing-new-link-wrapper" >
|
||||
<a href="profiles/new" id="profile-listing-new-link" name="Neues Profil anlegen" >Neues Profil anlegen</a>
|
||||
</div>
|
||||
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
<h1>Profilbild Hochladen</h1>
|
||||
|
||||
<form enctype="multipart/form-data" action="profile_photo" method="post">
|
||||
|
||||
<div id="profile-photo-upload-wrapper">
|
||||
<label id="profile-photo-upload-label" for="profile-photo-upload">Datei hochladen: </label>
|
||||
<input name="userfile" type="file" id="profile-photo-upload" size="48" />
|
||||
</div>
|
||||
|
||||
<div id="profile-photo-submit-wrapper">
|
||||
<input type="submit" name="submit" id="profile-photo-submit" value="Upload">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<div id="profile-photo-link-select-wrapper">
|
||||
oder <a href='photos/$user'>wähle ein Bild aus einem Album</a>
|
||||
</div>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
|
||||
<div id="profile-tabs-wrapper" >
|
||||
<a href="$url" id="profile-tab-status-link" class="profile-tabs" >Status</a>
|
||||
<a href="$url?tab=profile" id="profile-tab-profile-link" class="profile-tabs" >Profil</a>
|
||||
<a href="$phototab" id="profile-tab-photos-link" class="profile-tabs" >Fotos</a>
|
||||
<div id="profile-tabs-end"></div>
|
||||
</div>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<h3>Zurücksetzen des Passworts</h3>
|
||||
|
||||
<p>
|
||||
Dein Passwort wurde wie gewünscht zurück gesetzt.
|
||||
</p>
|
||||
<p>
|
||||
Dein neues Passwort lautet:
|
||||
</p>
|
||||
<p>
|
||||
$newpass
|
||||
</p>
|
||||
<p>
|
||||
Sichere oder kopiere dein neues Passwort und melde dich <a href="$baseurl" >dann hier an</a>.
|
||||
</p>
|
||||
<p>
|
||||
Nachdem du dich angemeldet hast kannst du dein Passwort auf der "Einstellungen" Seite ändern.
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
<h1>Schwebende Neuanmeldungen</h1>
|
||||
|
||||
|
||||
|
|
@ -1,163 +0,0 @@
|
|||
<h1>Account Einstellungen</h1>
|
||||
|
||||
<div id="plugin-settings-link"><a href="settings/addon">Plugin Einstellungen</a></div>
|
||||
|
||||
$nickname_block
|
||||
|
||||
|
||||
<form action="settings" id="settings-form" method="post" autocomplete="off" >
|
||||
|
||||
|
||||
<h3 class="settings-heading">Grundeinstellungen</h3>
|
||||
|
||||
<div id="settings-username-wrapper" >
|
||||
<label id="settings-username-label" for="settings-username" >Kompletter Name: </label>
|
||||
<input type="text" name="username" id="settings-username" value="$username" />
|
||||
</div>
|
||||
<div id="settings-username-end" ></div>
|
||||
|
||||
<div id="settings-email-wrapper" >
|
||||
<label id="settings-email-label" for="settings-email" >EMail Adresse: </label>
|
||||
<input type="text" name="email" id="settings-email" value="$email" />
|
||||
</div>
|
||||
<div id="settings-email-end" ></div>
|
||||
|
||||
|
||||
|
||||
<div id="settings-timezone-wrapper" >
|
||||
<label id="settings-timezone-label" for="timezone_select" >Deine Zeitzone: </label>
|
||||
$zoneselect
|
||||
</div>
|
||||
<div id="settings-timezone-end" ></div>
|
||||
|
||||
<div id="settings-defloc-wrapper" >
|
||||
<label id="settings-defloc-label" for="settings-defloc" >Standardwert Sendestandort: </label>
|
||||
<input type="text" name="defloc" id="settings-defloc" value="$defloc" />
|
||||
</div>
|
||||
<div id="settings-defloc-end" ></div>
|
||||
|
||||
<div id="settings-allowloc-wrapper" >
|
||||
<label id="settings-allowloc-label" for="settings-allowloc" >Browser Standort verwenden: </label>
|
||||
<input type="checkbox" name="allow_location" id="settings-allowloc" value="1" $loc_checked />
|
||||
</div>
|
||||
<div id="settings-allowloc-end" ></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="settings-theme-select">
|
||||
<label id="settings-theme-label" for="theme-select" >Anzeige Thema: </label>
|
||||
$theme
|
||||
</div>
|
||||
<div id="settings-theme-end"></div>
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
<h3 class="settings-heading">Sicherheits und Privatsphären Einstellungen</h3>
|
||||
|
||||
|
||||
<input type="hidden" name="visibility" value="$visibility" />
|
||||
|
||||
<div id="settings-maxreq-wrapper">
|
||||
<label id="settings-maxreq-label" for="settings-maxreq" >Maximale Anzahl an Freundschaftsanfragen pro Tagy</label>
|
||||
<input id="settings-maxreq" name="maxreq" value="$maxreq" />
|
||||
<div id="settings-maxreq-desc">(um SPAM zu verhindern)</div>
|
||||
</div>
|
||||
<div id="settings-maxreq-end"></div>
|
||||
|
||||
|
||||
|
||||
|
||||
$profile_in_dir
|
||||
|
||||
$profile_in_net_dir
|
||||
|
||||
|
||||
|
||||
<div id="settings-default-perms" class="settings-default-perms" >
|
||||
<div id="settings-default-perms-menu" class="fakelink" onClick="openClose('settings-default-perms-select');" >⇩ $permissions</div>
|
||||
<div id="settings-default-perms-menu-end"></div>
|
||||
|
||||
<div id="settings-default-perms-select" style="display: none;" >
|
||||
|
||||
$aclselect
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="settings-default-perms-end"></div>
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<h3 class="settings-heading">Benachrichtigungs Einstellungen</h3>
|
||||
|
||||
|
||||
<div id="settings-notify-wrapper">
|
||||
<div id="settings-notify-desc">Benachrichtigungsemail senden wenn: </div>
|
||||
<label for="notify1" id="settings-label-notify1">Du eine Vorstellung empfängst</label>
|
||||
<input id="notify1" type="checkbox" $sel_notify1 name="notify1" value="1" />
|
||||
<div id="notify1-end"></div>
|
||||
<label for="notify2" id="settings-label-notify2">Deine Vorstellung bestätigt wurde</label>
|
||||
<input id="notify2" type="checkbox" $sel_notify2 name="notify2" value="2" />
|
||||
<div id="notify2-end"></div>
|
||||
<label for="notify3" id="settings-label-notify3">Jemand etwas auf deiner Profilwand postet</label>
|
||||
<input id="notify3" type="checkbox" $sel_notify3 name="notify3" value="4" />
|
||||
<div id="notify3-end"></div>
|
||||
<label for="notify4" id="settings-label-notify4">Jemand einen Folgebeitrag schreibt</label>
|
||||
<input id="notify4" type="checkbox" $sel_notify4 name="notify4" value="8" />
|
||||
<div id="notify4-end"></div>
|
||||
<label for="notify5" id="settings-label-notify5">Du eine private Nachricht erhälst</label>
|
||||
<input id="notify5" type="checkbox" $sel_notify5 name="notify5" value="16" />
|
||||
<div id="notify5-end"></div>
|
||||
</div>
|
||||
<div id="settings=notify-end"></div>
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
<h3 class="settings-heading">Passwort Einstellungen</h3>
|
||||
|
||||
|
||||
<div id="settings-password-wrapper" >
|
||||
<p id="settings-password-desc" >
|
||||
Lass die Passwortfelder frei außer du willst das Passwort ändern.
|
||||
</p>
|
||||
<label id="settings-password-label" for="settings-password" >Neues Passwort: </label>
|
||||
<input type="password" id="settings-password" name="npassword" />
|
||||
</div>
|
||||
<div id="settings-password-end" ></div>
|
||||
|
||||
<div id="settings-confirm-wrapper" >
|
||||
<label id="settings-confirm-label" for="settings-confirm" >Bestätigen: </label>
|
||||
<input type="password" id="settings-confirm" name="confirm" />
|
||||
</div>
|
||||
<div id="settings-confirm-end" ></div>
|
||||
|
||||
<div id="settings-openid-wrapper" >
|
||||
$oidhtml
|
||||
</div>
|
||||
<div id="settings-openid-end" ></div>
|
||||
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
<h3 class="settings-heading">Erweiterte Seiteneinstellungen</h3>
|
||||
|
||||
$pagetype
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
|
||||
<div id="settings-nick-wrapper" >
|
||||
<p id="settings-nickname-desc">
|
||||
<span class="error-message">Deine Profiladresse lautet <strong>'$nickname@$basepath'</strong></span>
|
||||
</p>
|
||||
$subdir
|
||||
|
||||
</div>
|
||||
<div id="settings-nick-end" ></div>
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
<p>
|
||||
Es scheint so als ob deine Friendika Installation in einem Unterverzeichnis von $hostname
|
||||
liegt, es könnte deshalb unzuverlässig arbeiten.
|
||||
</p>
|
||||
<p>
|
||||
Solltest du irgendwelche Probleme haben versuche bitte folgende Profil Adresse
|
||||
'<strong>$baseurl/profile/$nickname</strong>' eventuell funktioniert es damit
|
||||
besser.
|
||||
</p>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
|
||||
<div id="settings-nick-wrapper" >
|
||||
<p id="settings-nickname-desc">
|
||||
Deine Profil URL ist im Moment <strong>'$baseurl/profile/$uid'</strong>.
|
||||
Wenn du einen Spitznamen wählst kann man diese URL freundlicher ausdrücken
|
||||
z.B. <strong>'spitzname@$basepath'</strong>.
|
||||
<br />
|
||||
Einmal gewählt kann der Spitzname nicht mehr geändert werden. Er
|
||||
<strong>muss</strong> mit einem Buchstaben beginnen. Es sind ausschließlich
|
||||
Buchstaben, Zahlen sowie Binde- und Unterstriche erlaubt.
|
||||
</p>
|
||||
<label id="settings-nick-label" for="settings-nick" >URL Spitzname: </label>
|
||||
<input type="text" name="nick" id="settings-nick" value="$nickname" />
|
||||
</div>
|
||||
<div id="settings-nick-end" ></div>
|
||||
|
||||
1924
view/de/strings.php
|
|
@ -1,1116 +1,810 @@
|
|||
<?php
|
||||
$a->strings['Not Found'] = 'Nicht gefunden';
|
||||
$a->strings['Page not found.'] = 'Seite nicht gefunden.';
|
||||
$a->strings['Permission denied'] = 'Zugriff verweigert';
|
||||
$a->strings['Permission denied.'] = 'Zugriff verweigert.';
|
||||
$a->strings['Nickname or Email address: '] = 'Spitzname oder Email-Adresse: ';
|
||||
$a->strings['Password: '] = 'Passwort: ';
|
||||
$a->strings['Login'] = 'Anmeldung';
|
||||
$a->strings['Nickname/Email/OpenID: '] = 'Spitzname/Email/OpenID: ';
|
||||
$a->strings['Password (if not OpenID): '] = 'Passwort (falls nicht OpenID): ';
|
||||
$a->strings['Forgot your password?'] = 'Passwort vergessen?';
|
||||
$a->strings['Password Reset'] = 'Passwort zurücksetzen';
|
||||
$a->strings['prev'] = 'vorige';
|
||||
$a->strings['first'] = 'erste';
|
||||
$a->strings['last'] = 'letzte';
|
||||
$a->strings['next'] = 'nächste';
|
||||
$a->strings[' likes this.'] = ' mag dies.';
|
||||
$a->strings[' doesn\'t like this.'] = ' mag dies nicht.';
|
||||
$a->strings['people'] = 'Leute';
|
||||
$a->strings['like this.'] = 'mögen dies.';
|
||||
$a->strings['don\'t like this.'] = 'mögen dies nicht.';
|
||||
$a->strings['and'] = 'und';
|
||||
$a->strings[', and '] = ' und ';
|
||||
$a->strings[' other people'] = ' andere Leute';
|
||||
$a->strings[' like this.'] = ' mögen dies.';
|
||||
$a->strings[' don\'t like this.'] = ' mögen dies nicht.';
|
||||
$a->strings['No contacts'] = 'Keine Kontakte';
|
||||
$a->strings['Contacts'] = 'Kontakte';
|
||||
$a->strings['View Contacts'] = 'Kontakte anzeigen';
|
||||
$a->strings['Search'] = 'Suche';
|
||||
$a->strings['No profile'] = 'Kein Profil';
|
||||
$a->strings['Connect'] = 'Verbinden';
|
||||
$a->strings['Location:'] = 'Ort:';
|
||||
$a->strings[', '] = ', ';
|
||||
$a->strings['Gender:'] = 'Geschlecht:';
|
||||
$a->strings['Status:'] = 'Status:';
|
||||
$a->strings['Homepage:'] = 'Homepage:';
|
||||
$a->strings['Monday'] = 'Montag';
|
||||
$a->strings['Tuesday'] = 'Dienstag';
|
||||
$a->strings['Wednesday'] = 'Mittwoch';
|
||||
$a->strings['Thursday'] = 'Donnerstag';
|
||||
$a->strings['Friday'] = 'Freitag';
|
||||
$a->strings['Saturday'] = 'Samstag';
|
||||
$a->strings['Sunday'] = 'Sonntag';
|
||||
$a->strings['January'] = 'Januar';
|
||||
$a->strings['February'] = 'Februar';
|
||||
$a->strings['March'] = 'März';
|
||||
$a->strings['April'] = 'April';
|
||||
$a->strings['May'] = 'Mai';
|
||||
$a->strings['June'] = 'Juni';
|
||||
$a->strings['July'] = 'Juli';
|
||||
$a->strings['August'] = 'August';
|
||||
$a->strings['September'] = 'September';
|
||||
$a->strings['October'] = 'Oktober';
|
||||
$a->strings['November'] = 'November';
|
||||
$a->strings['December'] = 'Dezember';
|
||||
$a->strings['Birthdays this week:'] = 'Geburtstage diese Woche:';
|
||||
$a->strings['(Adjusted for local time)'] = '(an die lokale Zeit angepasst)';
|
||||
$a->strings['[today]'] = '[heute]';
|
||||
$a->strings['Unable to locate original post.'] = 'Konnte das original Posting nicht finden.';
|
||||
$a->strings['Empty post discarded.'] = 'Leere Nachricht wurde verworfen';
|
||||
$a->strings['Wall Photos'] = 'Wall Photos';
|
||||
$a->strings[' commented on your item at '] = ' commented on your item at ';
|
||||
$a->strings[' posted on your profile wall at '] = ' posted on your profile wall at ';
|
||||
$a->strings['System error. Post not saved.'] = 'Systemfehler. Nachricht konnte nicht gespeichert werden.';
|
||||
$a->strings['This message was sent to you by '] = 'Diese Nachricht wurde dir von ';
|
||||
$a->strings[', a member of the Friendika social network.'] = ', a member of the Friendika social network.';
|
||||
$a->strings['You may visit them online at'] = 'Du kannst sie online besuchen unter ';
|
||||
$a->strings['Please contact the sender by replying to this post if you do not wish to receive these messages.'] = 'Please contact the sender by replying to this post if you do not wish to receive these messages.';
|
||||
$a->strings['posted an update.'] = 'posted an update.';
|
||||
$a->strings['Item not found.'] = 'Item not found.';
|
||||
$a->strings['Invite Friends'] = 'Freunde einladen';
|
||||
$a->strings['Connect/Follow [profile address]'] = 'Kontaktiere/Folge [Profil Adresse]';
|
||||
$a->strings['Example: bob@example.com, http://example.com/barbara'] = 'Beispiel: bob@example.com, http://example.com/barbara';
|
||||
$a->strings['Follow'] = 'Folge';
|
||||
$a->strings['Could not access contact record.'] = 'Konnte nicht auf die Kontaktdaten zugreifen.';
|
||||
$a->strings['Could not locate selected profile.'] = 'Konnte das ausgewählte Profiel nicht finden.';
|
||||
$a->strings['Contact updated.'] = 'Kontakt aktualisiert.';
|
||||
$a->strings['Failed to update contact record.'] = 'Aktualisierung der Kontaktdaten fehlgeschlagen.';
|
||||
$a->strings['Contact has been '] = 'Kontakt ';
|
||||
$a->strings['blocked'] = 'wurde blockiert';
|
||||
$a->strings['unblocked'] = 'ist nicht mehr blockiert';
|
||||
$a->strings['ignored'] = 'wurde ignoriert';
|
||||
$a->strings['unignored'] = 'wird nicht mehr ignoriert';
|
||||
$a->strings['stopped following'] = 'wird nicht mehr gefolgt';
|
||||
$a->strings['Contact has been removed.'] = 'Kontakt wurde entfernt.';
|
||||
$a->strings['Contact not found.'] = 'Kontakt nicht gefunden.';
|
||||
$a->strings['Mutual Friendship'] = 'Beidseitige Freundschaft';
|
||||
$a->strings['is a fan of yours'] = 'ist ein Fan von dir';
|
||||
$a->strings['you are a fan of'] = 'du bist Fan von';
|
||||
$a->strings['Never'] = 'Niemals';
|
||||
$a->strings['(Update was successful)'] = '(Aktualisierung war erfolgreich)';
|
||||
$a->strings['(Update was not successful)'] = '(Aktualisierung war nicht erfolgreich)';
|
||||
$a->strings['Contact Editor'] = 'Kontakt Editor';
|
||||
$a->strings['Visit $name\'s profile'] = 'Besuche das Profil von $name';
|
||||
$a->strings['Block/Unblock contact'] = 'Kontakt blockieren/freischalten';
|
||||
$a->strings['Ignore contact'] = 'Ignoriere den Kontakt';
|
||||
$a->strings['Delete contact'] = 'Lösche den Kontakt';
|
||||
$a->strings['Last updated: '] = 'Letzte Aktualisierung: ';
|
||||
$a->strings['Update public posts: '] = 'Aktualisierung öffentlicher Nachrichten: ';
|
||||
$a->strings['Update now'] = 'Jetzt aktualisieren';
|
||||
$a->strings['Unblock this contact'] = 'Blockade dieses Kontakts aufheben';
|
||||
$a->strings['Block this contact'] = 'Diesen Kontakt blockieren';
|
||||
$a->strings['Unignore this contact'] = 'Diesen Kontakt nicht mehr ignorieren';
|
||||
$a->strings['Ignore this contact'] = 'Diesen Kontakt ignorieren';
|
||||
$a->strings['Currently blocked'] = 'Derzeit geblockt';
|
||||
$a->strings['Currently ignored'] = 'Derzeit ignoriert';
|
||||
$a->strings['Show Blocked Connections'] = 'Zeige geblockte Verbindungen';
|
||||
$a->strings['Hide Blocked Connections'] = 'Verstecke geblockte Verbindungen';
|
||||
$a->strings['Finding: '] = 'Funde: ';
|
||||
$a->strings['Find'] = 'Finde';
|
||||
$a->strings['Visit '] = 'Besuche ';
|
||||
$a->strings['\'s profile'] = 's Profile';
|
||||
$a->strings['Edit contact'] = 'Kontakt bearbeiten';
|
||||
$a->strings['Profile not found.'] = 'Profil nicht gefunden.';
|
||||
$a->strings['Response from remote site was not understood.'] = 'Antwort der entfernten Gegenstelle unverständlich.';
|
||||
$a->strings['Unexpected response from remote site: '] = 'Unerwartete Antwort der Gegenstelle: ';
|
||||
$a->strings['Confirmation completed successfully.'] = 'Bestätigung erfolgreich abgeschlossen.';
|
||||
$a->strings['Remote site reported: '] = 'Entfernte Seite meldet: ';
|
||||
$a->strings['Temporary failure. Please wait and try again.'] = 'Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal.';
|
||||
$a->strings['Introduction failed or was revoked.'] = 'Vorstellung schlug fehl oder wurde zurück gezogen.';
|
||||
$a->strings['Unable to set contact photo.'] = 'Konnte das Bild des Kontakts nicht speichern.';
|
||||
$a->strings['is now friends with'] = 'ist jetzt ein(e) Freund(in) von';
|
||||
$a->strings['No user record found for '] = 'Kein Nutzereintrag gefunden für ';
|
||||
$a->strings['Our site encryption key is apparently messed up.'] = 'Der Verschlüsslungsschlüssel unserer Seite ist anscheinend im Arsch.';
|
||||
$a->strings['Empty site URL was provided or URL could not be decrypted by us.'] = 'Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden.';
|
||||
$a->strings['Contact record was not found for you on our site.'] = 'Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden.';
|
||||
$a->strings['The ID provided by your system is a duplicate on our system. It should work if you try again.'] = 'Die ID die uns dein System angeboten hat ist hier bereits vergeben. Bitte versuche es noch einmal.';
|
||||
$a->strings['Unable to set your contact credentials on our system.'] = 'Deine Kontaktreferenzen konnten nicht in unserm System gespeichert werden.';
|
||||
$a->strings['Unable to update your contact profile details on our system'] = 'Die Updates für dein Profil konnten nicht gespeichert werden';
|
||||
$a->strings['Connection accepted at '] = 'Connection accepted at ';
|
||||
$a->strings['Administrator'] = 'Administrator';
|
||||
$a->strings['New mail received at '] = 'New mail received at ';
|
||||
$a->strings[' commented on an item at '] = ' commented on an item at ';
|
||||
$a->strings[' welcomes '] = ' welcomes ';
|
||||
$a->strings['This introduction has already been accepted.'] = 'Diese Vorstellung wurde bereits abgeschlossen.';
|
||||
$a->strings['Profile location is not valid or does not contain profile information.'] = 'Profile location is not valid or does not contain profile information.';
|
||||
$a->strings['Warning: profile location has no identifiable owner name.'] = 'Warning: profile location has no identifiable owner name.';
|
||||
$a->strings['Warning: profile location has no profile photo.'] = 'Warning: profile location has no profile photo.';
|
||||
$a->strings[' required parameter'] = ' required parameter';
|
||||
$a->strings[' was '] = ' was ';
|
||||
$a->strings['s were '] = 's were ';
|
||||
$a->strings['not found at the given location.'] = 'not found at the given location.';
|
||||
$a->strings['Introduction complete.'] = 'Vorstellung abgeschlossen.';
|
||||
$a->strings['Unrecoverable protocol error.'] = 'Nicht behebbarer Protokollfehler.';
|
||||
$a->strings['Profile unavailable.'] = 'Profil nicht verfügbar.';
|
||||
$a->strings[' has received too many connection requests today.'] = ' hat heute zu viele Nachfragen zwecks Kontaktaufnahme erhalten.';
|
||||
$a->strings['Spam protection measures have been invoked.'] = 'Maßnahmen zum Spamschutz wurden ergriffen.';
|
||||
$a->strings['Friends are advised to please try again in 24 hours.'] = 'Freunde sind angehalten es in 24 Stunden erneut zu versuchen.';
|
||||
$a->strings['Invalid locator'] = 'Invalid locator';
|
||||
$a->strings['Unable to resolve your name at the provided location.'] = 'Unable to resolve your name at the provided location.';
|
||||
$a->strings['You have already introduced yourself here.'] = 'Du hast dich hier bereits vorgestellt.';
|
||||
$a->strings['Apparently you are already friends with .'] = 'Offenbar bist du bereits ein Freund von ';
|
||||
$a->strings['Invalid profile URL.'] = 'Ungültige Profil URL.';
|
||||
$a->strings['Disallowed profile URL.'] = 'Nicht erlaubte Profil URL.';
|
||||
$a->strings['Your introduction has been sent.'] = 'Deine Vorstellung wurde abgeschickt.';
|
||||
$a->strings['Please login to confirm introduction.'] = 'Bitte melde dich an um die Vorstellung zu bestätigen.';
|
||||
$a->strings['Incorrect identity currently logged in. Please login to <strong>this</strong> profile.'] = 'Incorrect identity currently logged in. Please login to <strong>this</strong> profile.';
|
||||
$a->strings['[Name Withheld]'] = '[Name Zurückgehalten]';
|
||||
$a->strings['Friend/Connection Request'] = 'Freundschafts/Kontakt Anfrage';
|
||||
$a->strings['Please answer the following:'] = 'Bitte beantworte folgende Fragen:';
|
||||
$a->strings['Does $name know you?'] = 'Kennt $name dich?';
|
||||
$a->strings['Yes'] = 'Ja';
|
||||
$a->strings['No'] = 'Nein';
|
||||
$a->strings['Add a personal note:'] = 'Eine persönliche Notiz anfügen:';
|
||||
$a->strings['Please enter your profile address from one of the following supported social networks:'] = 'Bitte gib deine Profil Adresse von einem der unterstützten Sozialen Netzwerken an:';
|
||||
$a->strings['Friendika'] = 'Friendika';
|
||||
$a->strings['StatusNet/Federated Social Web'] = 'StatusNet/Federated Social Web';
|
||||
$a->strings['Private (secure) network'] = 'Privates (sicheres) Netzwerk';
|
||||
$a->strings['Public (insecure) network'] = 'Öffentliches (unsicheres) Netzwerk';
|
||||
$a->strings['Your profile address:'] = 'Deine Profiladresse:';
|
||||
$a->strings['Submit Request'] = 'Anfrage abschicken';
|
||||
$a->strings['Cancel'] = 'Abbrechen';
|
||||
$a->strings['Global Directory'] = 'Weltweites Verzeichnis';
|
||||
$a->strings['Private Message'] = 'Private Nachricht';
|
||||
$a->strings["I like this \x28toggle\x29"] = "Ich mag das \x28toggle\x29";
|
||||
$a->strings["I don't like this \x28toggle\x29"] = "Ich mag das nicht \x28toggle\x29";
|
||||
$a->strings['This is you'] = 'Das bist du';
|
||||
$a->strings['View $name\'s profile'] = 'Betrachte das Profil von $name';
|
||||
$a->strings['View $owner_name\'s profile'] = 'Betrachte das Profil von $owner_name';
|
||||
$a->strings['to'] = 'to';
|
||||
$a->strings['Wall-to-Wall'] = 'Wall-to-Wall';
|
||||
$a->strings['via Wall-To-Wall:'] = 'via Wall-To-Wall:';
|
||||
$a->strings['Item has been removed.'] = 'Eintrag wurde entfernt.';
|
||||
$a->strings['Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.'] = 'Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.';
|
||||
$a->strings['The profile address specified does not provide adequate information.'] = 'Die angegebene Profiladresse liefert unzureichende Informationen.';
|
||||
$a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können.';
|
||||
$a->strings['Unable to retrieve contact information.'] = 'Konnte die Kontaktinformationen nicht empfangen.';
|
||||
$a->strings['following'] = 'folgen';
|
||||
$a->strings['Group created.'] = 'Gruppe erstellt.';
|
||||
$a->strings['Could not create group.'] = 'Konnte die Gruppe nicht erstellen.';
|
||||
$a->strings['Group not found.'] = 'Gruppe nicht gefunden.';
|
||||
$a->strings['Group name changed.'] = 'Gruppenname geändert.';
|
||||
$a->strings['Membership list updated.'] = 'Mitgliedsliste aktualisiert.';
|
||||
$a->strings['Group removed.'] = 'Gruppe entfernt.';
|
||||
$a->strings['Unable to remove group.'] = 'Konnte die Gruppe nicht entfernen.';
|
||||
$a->strings['Delete'] = 'Löschen';
|
||||
$a->strings['Welcome to '] = 'Willkommen zu ';
|
||||
$a->strings['Could not create/connect to database.'] = 'Konnte die Verbindung zur Datenbank nicht aufbauen bzw. die Datenbank anlegen.';
|
||||
$a->strings['Connected to database.'] = 'Mit der Datenbank verbunden.';
|
||||
$a->strings['Database import succeeded.'] = 'Import der Datenbank erfolgreich.';
|
||||
$a->strings['IMPORTANT: You will need to [manually] setup a scheduled task for the poller.'] = 'WICHTIG: Du musst [manuell] einen cron Job (o.ä.) für den Poller einrichten.';
|
||||
$a->strings['Please see the file "INSTALL.txt".'] = 'Lies bitte die "INSTALL.txt".';
|
||||
$a->strings['Database import failed.'] = 'Import der Datenbank schlug fehl.';
|
||||
$a->strings['You may need to import the file "database.sql" manually using phpmyadmin or mysql.'] = 'Möglicherweise musst du die Datei "database.sql" manuell mit phpmyadmin oder mysql importieren.';
|
||||
$a->strings['Welcome to Friendika.'] = 'Willkommen bei Friendika.';
|
||||
$a->strings['Submit'] = 'Senden';
|
||||
$a->strings['Could not find a command line version of PHP in the web server PATH.'] = 'Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden.';
|
||||
$a->strings['This is required. Please adjust the configuration file .htconfig.php accordingly.'] = 'Diese wird von Friendika benötigt. Bitte passe die Konfigurationsdatei .htconfig.php entsprechend an.';
|
||||
$a->strings['The command line version of PHP on your system does not have "register_argc_argv" enabled.'] = 'Die Kommandozeilenversion von PHP auf deinem System hat "register_argc_argv" nicht aktiviert.';
|
||||
$a->strings['This is required for message delivery to work.'] = 'Dies wird für die Auslieferung von Nachrichten benötigt.';
|
||||
$a->strings['Error: the "openssl_pkey_new" function on this system is not able to generate encryption keys'] = 'Fehler: Die "openssl_pkey_new" Funktion auf diesem System ist nicht in der lage Verschlüsselungsschlüssel zu erzeugen';
|
||||
$a->strings['If running under Windows, please see "http://www.php.net/manual/en/openssl.installation.php".'] = 'Wenn der Server unter Windows läuft, schau dir bitte "http://www.php.net/manual/en/openssl.installation.php" an.';
|
||||
$a->strings['Error: Apache webserver mod-rewrite module is required but not installed.'] = 'Fehler: Das Apache Modul mod-rewrite wird benötigt, es ist allerdings nicht installiert.';
|
||||
$a->strings['Error: libCURL PHP module required but not installed.'] = 'Fehler: Das libCURL PHP Modul wird benötigt ist aber nicht installiert.';
|
||||
$a->strings['Error: GD graphics PHP module with JPEG support required but not installed.'] = 'Fehler: Das GD Graphikmodul für PHP mit JPEG Unterstützung ist nicht installiert.';
|
||||
$a->strings['Error: openssl PHP module required but not installed.'] = 'Fehler: Das openssl Modul von PHP ist nict installiert.';
|
||||
$a->strings['Error: mysqli PHP module required but not installed.'] = 'Fehler: Das mysqli Modul von PHP ist nicht installiert.';
|
||||
$a->strings['The web installer needs to be able to create a file called ".htconfig.php" in the top folder of your web server and it is unable to do so.'] = 'Der Installationswizzard muss in der Lage sein eine Datei im Stammverzeichnis deines Webservers anzuliegen ist allerdings derzeit nicht in der Lage dies zu tun.';
|
||||
$a->strings['This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can.'] = 'In den meisten Fällen ist dies ein Problem mit den Schreibrechten, der Webserver könnte keine Schreiberlaubnis haben, selbst wenn du sie hast.';
|
||||
$a->strings['Please check with your site documentation or support people to see if this situation can be corrected.'] = 'Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support Team um diese Situations zu beheben.';
|
||||
$a->strings['If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.'] = 'Sollte dies nicht möglich sein musst du die Installation manuell durchführen. Lies dazu bitte in der Datei "INSTALL.txt".';
|
||||
$a->strings['The database configuration file ".htconfig.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.'] = 'Die Konfigurationsdatei ".htconfig.php" konnte nicht angelegt werden. Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner Friendika Installation zu erzeugen.';
|
||||
$a->strings['Errors encountered creating database tables.'] = 'Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen.';
|
||||
$a->strings[' : '] = ' : ';
|
||||
$a->strings['Not a valid email address.'] = 'Keine gültige EMail Adresse.';
|
||||
$a->strings['Please join my network on '] = 'Bitte trete meinem Netzwerk bei ';
|
||||
$a->strings['Message delivery failed.'] = 'Zustellung der Nachricht fehlgeschlagen.';
|
||||
$a->strings[' messages sent.'] = ' Nachrichten gesendet.';
|
||||
$a->strings['Send invitations'] = 'Einladungen senden';
|
||||
$a->strings['Enter email addresses, one per line:'] = 'EMail Adressen eingeben, eine pro Zeile:';
|
||||
$a->strings['Your message:'] = 'Deine Nachricht:';
|
||||
$a->strings['Please join my social network on '] = 'Bitte trete meinem sozialen Netzwerk bei ';
|
||||
$a->strings['To accept this invitation, please visit:'] = 'Um diese Einladung anzunehmen beuche bitte:';
|
||||
$a->strings['Once you have registered, please connect with me via my profile page at:'] = 'Sobald du registriert bist kontaktiere mich bitte auf meiner Profilseite:';
|
||||
$a->strings['photo'] = 'Foto';
|
||||
$a->strings['status'] = 'Status';
|
||||
$a->strings['likes'] = 'mag das';
|
||||
$a->strings['doesn\'t like'] = 'mag das nicht';
|
||||
$a->strings['\'s'] = '\'s';
|
||||
$a->strings['Remote privacy information not available.'] = 'Entfernte Privatsphäreneinstellungen nicht verfügbar.';
|
||||
$a->strings['Visible to:'] = 'Sichtbar für:';
|
||||
$a->strings['Password reset requested at '] = 'Anfrage zum Zurücksetzen des Passworts erhalten ';
|
||||
$a->strings['No recipient selected.'] = 'Kein Empfänger gewählt.';
|
||||
$a->strings['[no subject]'] = '[kein Betreff]';
|
||||
$a->strings['Unable to locate contact information.'] = 'Konnte die Kontaktinformationen nicht finden.';
|
||||
$a->strings['Message sent.'] = 'Nachricht gesendet.';
|
||||
$a->strings['Message could not be sent.'] = 'Nachricht konnte nicht gesendet werden.';
|
||||
$a->strings['Messages'] = 'Nachrichten';
|
||||
$a->strings['Inbox'] = 'Eingang';
|
||||
$a->strings['Outbox'] = 'Ausgang';
|
||||
$a->strings['New Message'] = 'Neue Nachricht';
|
||||
$a->strings['Message deleted.'] = 'Nachricht gelöscht.';
|
||||
$a->strings['Conversation removed.'] = 'Unterhaltung gelöscht.';
|
||||
$a->strings['Send Private Message'] = 'Private Nachricht senden';
|
||||
$a->strings['To:'] = 'An:';
|
||||
$a->strings['Subject:'] = 'Betreff:';
|
||||
$a->strings['Upload photo'] = 'Foto hochladen';
|
||||
$a->strings['Insert web link'] = 'Weblink einfügen';
|
||||
$a->strings['Please wait'] = 'Bitte warten';
|
||||
$a->strings['No messages.'] = 'Keine Nachrichten.';
|
||||
$a->strings['Delete conversation'] = 'Unterhaltung löschen';
|
||||
$a->strings['Message not available.'] = 'Nachricht nicht verfügbar.';
|
||||
$a->strings['Delete message'] = 'Nachricht löschen';
|
||||
$a->strings['Send Reply'] = 'Antwort senden';
|
||||
$a->strings['Normal View'] = 'Normale Ansicht';
|
||||
$a->strings['New Item View'] = 'Neue Einträge';
|
||||
$a->strings['Share'] = 'Share';
|
||||
$a->strings['Insert YouTube video'] = 'YouTube Video einfügen';
|
||||
$a->strings['Set your location'] = 'Deinen Standort festlegen';
|
||||
$a->strings['Clear browser location'] = 'Browser Standort leeren';
|
||||
$a->strings['Permission settings'] = 'Berechtigungseinstellungen';
|
||||
$a->strings['CC: email addresses'] = 'CC: EMail Addresse';
|
||||
$a->strings['Example: bob@example.com, mary@example.com'] = 'Z.B.: bob@example.com, mary@example.com';
|
||||
$a->strings['No such group'] = 'Es gibt keine solche Gruppe';
|
||||
$a->strings['Group is empty'] = 'Gruppe ist leer';
|
||||
$a->strings['Group: '] = 'Gruppe: ';
|
||||
$a->strings['View in context'] = 'Im Zusammenhang betrachten';
|
||||
$a->strings['Invalid request identifier.'] = 'Invalid request identifier.';
|
||||
$a->strings['Discard'] = 'Verwerfen';
|
||||
$a->strings['Ignore'] = 'Ignorieren';
|
||||
$a->strings['Show Ignored Requests'] = 'Zeige ignorierte Anfragen';
|
||||
$a->strings['Hide Ignored Requests'] = 'Verberge ignorierte Anfragen';
|
||||
$a->strings['Claims to be known to you: '] = 'Behauptet dich zu kennen: ';
|
||||
$a->strings['yes'] = 'ja';
|
||||
$a->strings['no'] = 'nein';
|
||||
$a->strings['Approve as: '] = 'Genehmigen als: ';
|
||||
$a->strings['Friend'] = 'Freund';
|
||||
$a->strings['Fan/Admirer'] = 'Fan/Verehrer';
|
||||
$a->strings['Notification type: '] = 'Benachrichtigungs Typ: ';
|
||||
$a->strings['Friend/Connect Request'] = 'Kontakt-/Freundschaftsanfrage';
|
||||
$a->strings['New Follower'] = 'Neuer Bewunderer';
|
||||
$a->strings['Approve'] = 'Genehmigen';
|
||||
$a->strings['No notifications.'] = 'Keine Benachrichtigungen.';
|
||||
$a->strings['No registrations.'] = 'Keine Neuanmeldungen.';
|
||||
$a->strings['Login failed.'] = 'Annmeldung fehlgeschlagen.';
|
||||
$a->strings['Welcome back '] = 'Willkommen zurück ';
|
||||
$a->strings['Photo Albums'] = 'Fotoalben';
|
||||
$a->strings['Contact Photos'] = 'Kontaktbilder';
|
||||
$a->strings['Contact information unavailable'] = 'Kontakt Informationen nicht verfügbar';
|
||||
$a->strings['Profile Photos'] = 'Profilbilder';
|
||||
$a->strings['Album not found.'] = 'Album nicht gefunden.';
|
||||
$a->strings['Delete Album'] = 'Album löschen';
|
||||
$a->strings['Delete Photo'] = 'Foto löschen';
|
||||
$a->strings['was tagged in a'] = 'was tagged in a';
|
||||
$a->strings['by'] = 'by';
|
||||
$a->strings['Image exceeds size limit of '] = 'Die Bildgröße übersteigt das Limit von ';
|
||||
$a->strings['Unable to process image.'] = 'Konnte das Bild nicht bearbeiten.';
|
||||
$a->strings['Image upload failed.'] = 'Hochladen des Bildes gescheitert.';
|
||||
$a->strings['No photos selected'] = 'Keine Bilder ausgewählt';
|
||||
$a->strings['Upload Photos'] = 'Bilder hochladen';
|
||||
$a->strings['New album name: '] = 'Name des neuen Albums: ';
|
||||
$a->strings['or existing album name: '] = 'oder existierender Albumname: ';
|
||||
$a->strings['Permissions'] = 'Berechtigungen';
|
||||
$a->strings['Edit Album'] = 'Album bearbeiten';
|
||||
$a->strings['View Photo'] = 'Fotos betrachten';
|
||||
$a->strings['Photo not available'] = 'Foto nicht verfügbar';
|
||||
$a->strings['Edit photo'] = 'Foto bearbeiten';
|
||||
$a->strings['View Full Size'] = 'Betrachte Originalgröße';
|
||||
$a->strings['Tags: '] = 'Tags: ';
|
||||
$a->strings['[Remove any tag]'] = '[Tag entfernen]';
|
||||
$a->strings['New album name'] = 'Name des neuen Albums';
|
||||
$a->strings['Caption'] = 'Bildunterschrift';
|
||||
$a->strings['Add a Tag'] = 'Tag hinzufügen';
|
||||
$a->strings['Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'] = 'Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping';
|
||||
$a->strings['Recent Photos'] = 'Neuste Fotos';
|
||||
$a->strings['Upload New Photos'] = 'Weitere Fotos hochladen';
|
||||
$a->strings['View Album'] = 'Album betrachten';
|
||||
$a->strings['Image uploaded but image cropping failed.'] = 'Bilder hochgeladen aber das Zuschneiden ist fehlgeschlagen.';
|
||||
$a->strings['Image size reduction [175] failed.'] = 'Image size reduction [175] failed.';
|
||||
$a->strings['Image size reduction [80] failed.'] = 'Image size reduction [80] failed.';
|
||||
$a->strings['Image size reduction [48] failed.'] = 'Image size reduction [48] failed.';
|
||||
$a->strings['Unable to process image'] = 'Bild konnte nicht verarbeitet werden';
|
||||
$a->strings['Image uploaded successfully.'] = 'Bild erfolgreich auf den Server geladen.';
|
||||
$a->strings['Image size reduction [640] failed.'] = 'Image size reduction [640] failed.';
|
||||
$a->strings['Profile Name is required.'] = 'Profilname ist erforderlich.';
|
||||
$a->strings['Profile updated.'] = 'Profil aktualisiert.';
|
||||
$a->strings['Profile deleted.'] = 'Profil gelöscht.';
|
||||
$a->strings['Profile-'] = 'Profil-';
|
||||
$a->strings['New profile created.'] = 'Neues Profil angelegt';
|
||||
$a->strings['Profile unavailable to clone.'] = 'Profil nicht zum Duplizieren verfügbar.';
|
||||
$a->strings['This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.'] = 'Dies ist dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein.';
|
||||
$a->strings['Age: '] = 'Alter: ';
|
||||
$a->strings['Profile Image'] = 'Profilbild';
|
||||
$a->strings['Invalid OpenID url'] = 'Ungültige OpenID URL';
|
||||
$a->strings['Please enter the required information.'] = 'Bitte trage die erforderlichen Informationen ein.';
|
||||
$a->strings['Please use a shorter name.'] = 'Bitte verwende einen kürzeren Namen.';
|
||||
$a->strings['Name too short.'] = 'Der Name ist zu kurz.';
|
||||
$a->strings['That doesn\'t appear to be your full (First Last) name.'] = 'Das scheint kein vollständiger Name zu sein, verwende (Vorname Nachname).';
|
||||
$a->strings['Your email domain is not among those allowed on this site.'] = 'Die Domain deiner EMail Adresse ist nicht erlaubt auf dieser Seite.';
|
||||
$a->strings['Cannot use that email.'] = 'Konnte diese EMail Adresse nicht verwenden';
|
||||
$a->strings['Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.'] = 'Dein Spitzname darf nur aus Buchstaben und Zahlen ("a-z","0-9", "_" und "-") bestehen, außerdem muss er mit einem Buchstaben beginnen.';
|
||||
$a->strings['Nickname is already registered. Please choose another.'] = 'Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.';
|
||||
$a->strings['SERIOUS ERROR: Generation of security keys failed.'] = 'SERIOUS ERROR: Generation of security keys failed.';
|
||||
$a->strings['An error occurred during registration. Please try again.'] = 'Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.';
|
||||
$a->strings['An error occurred creating your default profile. Please try again.'] = 'Bei der Erstellung des Standard-Profils ist ein Fehler aufgetreten. Bitte versuche es noch einmal.';
|
||||
$a->strings['Registration details for '] = 'Details der Registrierung für ';
|
||||
$a->strings['Registration successful. Please check your email for further instructions.'] = 'Registration erfolgreich. Eine EMail mit weiteren Anweisungen wurde an dich gesendet.';
|
||||
$a->strings['Failed to send email message. Here is the message that failed.'] = 'Konnte die EMail nicht versenden. Hier ist die Nachricht die nicht gesendet werden konnte.';
|
||||
$a->strings['Your registration can not be processed.'] = 'Deine Registration konnte nicht verarbeitet werden.';
|
||||
$a->strings['Registration request at '] = 'Registrationsanfrage für ';
|
||||
$a->strings['Your registration is pending approval by the site owner.'] = 'Deine Registration muss noch vom Betreiber der Seite freigegeben werden.';
|
||||
$a->strings['You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking \'Register\'.'] = 'Du kannst dieses Formular auch (optional) mit deiner OpenID ausfüllen indem du deine OpenID angibst und \'Registrieren\' klickst.';
|
||||
$a->strings['If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'] = 'Wenn du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus.';
|
||||
$a->strings['Your OpenID (optional): '] = 'Deine OpenID (optional): ';
|
||||
$a->strings['Registration'] = 'Registration';
|
||||
$a->strings['Your Full Name (e.g. Joe Smith): '] = 'Vollständiger Name (z.B. Joe Smith): ';
|
||||
$a->strings['Your Email Address: '] = 'Deine EMail Adresse: ';
|
||||
$a->strings['Choose a profile nickname. This must begin with a text character. Your global profile locator will then be \'<strong>nickname@$sitename</strong>\'.'] = 'Wähle eine Spitznamen, der mit einem Buchstaben beginnt. Deine globale Profiladresse wird dann \'<strong>spitzname@$sitename</strong>\' sein.';
|
||||
$a->strings['Choose a nickname: '] = 'Spitznamen wählen: ';
|
||||
$a->strings['Register'] = 'Registrieren';
|
||||
$a->strings['Please login.'] = 'Bitte melde dich an.';
|
||||
$a->strings['Registration revoked for '] = 'Registration zurückgezogen ';
|
||||
$a->strings['Account approved.'] = 'Account freigegeben.';
|
||||
$a->strings['Remove My Account'] = 'Account löschen';
|
||||
$a->strings['This will completely remove your account. Once this has been done it is not recoverable.'] = 'This will completely remove your account. Once this has been done it is not recoverable.';
|
||||
$a->strings['Please enter your password for verification:'] = 'Please enter your password for verification:';
|
||||
$a->strings['Passwords do not match. Password unchanged.'] = 'Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert.';
|
||||
$a->strings['Empty passwords are not allowed. Password unchanged.'] = 'Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert.';
|
||||
$a->strings['Password changed.'] = 'Passwort ändern.';
|
||||
$a->strings['Password update failed. Please try again.'] = 'Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal';
|
||||
$a->strings[' Please use a shorter name.'] = ' Bitte verwende einen kürzeren Namen.';
|
||||
$a->strings[' Name too short.'] = ' Name ist zu kurz.';
|
||||
$a->strings[' Not valid email.'] = ' Keine gültige EMail.';
|
||||
$a->strings[' Cannot change to that email.'] = ' Cannot change to that email.';
|
||||
$a->strings['Settings updated.'] = 'Einstellungen aktualisiert.';
|
||||
$a->strings['Plugin Settings'] = 'Plugin Einstellungen';
|
||||
$a->strings['Account Settings'] = 'Account Einstellungen';
|
||||
$a->strings['No Plugin settings configured'] = 'Keine Erweiterungen konfiguriert';
|
||||
$a->strings['OpenID: '] = 'OpenID: ';
|
||||
$a->strings[' (Optional) Allow this OpenID to login to this account.'] = ' (Optional) Erlaube dieser OpenID sich für diesen Account anzumelden.';
|
||||
$a->strings['Profile is <strong>not published</strong>.'] = 'Profil ist <strong>nicht veröffentlicht</strong>.';
|
||||
$a->strings['Default Post Permissions'] = 'Grundeinstellung für Veröffentlichungen';
|
||||
$a->strings['Tag removed'] = 'Tag entfernt';
|
||||
$a->strings['Remove Item Tag'] = 'Gegenstands Tag entfernen';
|
||||
$a->strings['Select a tag to remove: '] = 'Wähle ein Tag zum Entfernen aus: ';
|
||||
$a->strings['Remove'] = 'Entfernen';
|
||||
$a->strings['No contacts.'] = 'Keine Kontakte.';
|
||||
$a->strings['Visible To:'] = 'Sichtbar für:';
|
||||
$a->strings['Groups'] = 'Gruppen';
|
||||
$a->strings['Except For:'] = 'Abgesehen von:';
|
||||
$a->strings['Logged out.'] = 'Abgemeldet.';
|
||||
$a->strings['Unknown | Not categorised'] = 'Unbekannt | Nicht kategorisiert';
|
||||
$a->strings['Block immediately'] = 'Sofort blockieren';
|
||||
$a->strings['Shady, spammer, self-marketer'] = 'Zwielichtig, Spammer, Selbstdarsteller';
|
||||
$a->strings['Known to me, but no opinion'] = 'Ist mir bekannt, hab aber keine Meinung';
|
||||
$a->strings['OK, probably harmless'] = 'OK, wahrscheinlich harmlos';
|
||||
$a->strings['Reputable, has my trust'] = 'Seriös, hat mein Vertrauen';
|
||||
$a->strings['Frequently'] = 'Häufig';
|
||||
$a->strings['Hourly'] = 'Stündlich';
|
||||
$a->strings['Twice daily'] = 'Zweimal Täglich';
|
||||
$a->strings['Daily'] = 'Täglich';
|
||||
$a->strings['Weekly'] = 'Wöchendlich';
|
||||
$a->strings['Monthly'] = 'Monatlich';
|
||||
$a->strings['Miscellaneous'] = 'Verschiedenes';
|
||||
$a->strings['less than a second ago'] = 'vor weniger als einer Sekunde';
|
||||
$a->strings['year'] = 'Jahr';
|
||||
$a->strings['years'] = 'Jahre';
|
||||
$a->strings['month'] = 'Monat';
|
||||
$a->strings['months'] = 'Monate';
|
||||
$a->strings['week'] = 'Woche';
|
||||
$a->strings['weeks'] = 'Wochen';
|
||||
$a->strings['day'] = 'Tag';
|
||||
$a->strings['days'] = 'Tage';
|
||||
$a->strings['hour'] = 'Stunde';
|
||||
$a->strings['hours'] = 'Stunden';
|
||||
$a->strings['minute'] = 'Minute';
|
||||
$a->strings['minutes'] = 'Minuten';
|
||||
$a->strings['second'] = 'Sekunde';
|
||||
$a->strings['seconds'] = 'Sekunden';
|
||||
$a->strings[' ago'] = ' her';
|
||||
$a->strings['Create a new group'] = 'Neue Gruppe erstellen';
|
||||
$a->strings['Everybody'] = 'Alle Kontakte';
|
||||
$a->strings['Birthday:'] = 'Geburtstag:';
|
||||
$a->strings['Logout'] = 'Abmelden';
|
||||
$a->strings['Home'] = 'Persönlich';
|
||||
$a->strings['Directory'] = 'Verzeichnis';
|
||||
$a->strings['Network'] = 'Netzwerk';
|
||||
$a->strings['Notifications'] = 'Benachrichtigungen';
|
||||
$a->strings['Settings'] = 'Einstellungen';
|
||||
$a->strings['Profiles'] = 'Profile';
|
||||
$a->strings['Embedding disabled'] = 'Einbettungen deaktiviert';
|
||||
$a->strings['Male'] = 'Männlich';
|
||||
$a->strings['Female'] = 'Weiblich';
|
||||
$a->strings['Currently Male'] = 'Momentan Männlich';
|
||||
$a->strings['Currently Female'] = 'Momentan Weiblich';
|
||||
$a->strings['Mostly Male'] = 'Hauptsächlich Männlich';
|
||||
$a->strings['Mostly Female'] = 'Hauptsächlich Weiblich';
|
||||
$a->strings['Transgender'] = 'Transgender';
|
||||
$a->strings['Intersex'] = 'Intersex';
|
||||
$a->strings['Transsexual'] = 'Transsexuel';
|
||||
$a->strings['Hermaphrodite'] = 'Hermaphrodit';
|
||||
$a->strings['Neuter'] = 'Neuter';
|
||||
$a->strings['Non-specific'] = 'Nicht spezifiziert';
|
||||
$a->strings['Other'] = 'Andere';
|
||||
$a->strings['Undecided'] = 'Unentschieden';
|
||||
$a->strings['Males'] = 'Männer';
|
||||
$a->strings['Females'] = 'Frauen';
|
||||
$a->strings['Gay'] = 'Schwul';
|
||||
$a->strings['Lesbian'] = 'Lesbisch';
|
||||
$a->strings['No Preference'] = 'Keine Vorlieben';
|
||||
$a->strings['Bisexual'] = 'Bisexuel';
|
||||
$a->strings['Autosexual'] = 'Autosexual';
|
||||
$a->strings['Abstinent'] = 'Abstinent';
|
||||
$a->strings['Virgin'] = 'Jungfrau';
|
||||
$a->strings['Deviant'] = 'Deviant';
|
||||
$a->strings['Fetish'] = 'Fetish';
|
||||
$a->strings['Oodles'] = 'Oodles';
|
||||
$a->strings['Nonsexual'] = 'Nonsexual';
|
||||
$a->strings['Single'] = 'Single';
|
||||
$a->strings['Lonely'] = 'Einsam';
|
||||
$a->strings['Available'] = 'Verfügbar';
|
||||
$a->strings['Unavailable'] = 'Nicht verfügbar';
|
||||
$a->strings['Dating'] = 'Dating';
|
||||
$a->strings['Unfaithful'] = 'Untreu';
|
||||
$a->strings['Sex Addict'] = 'Sex Besessen';
|
||||
$a->strings['Friends'] = 'Freunde';
|
||||
$a->strings['Friends/Benefits'] = 'Friends/Benefits';
|
||||
$a->strings['Casual'] = 'Casual';
|
||||
$a->strings['Engaged'] = 'Verlobt';
|
||||
$a->strings['Married'] = 'Verheiratet';
|
||||
$a->strings['Partners'] = 'Partner';
|
||||
$a->strings['Cohabiting'] = 'kohabitierend';
|
||||
$a->strings['Happy'] = 'Glücklich';
|
||||
$a->strings['Not Looking'] = 'Nicht auf der Suche';
|
||||
$a->strings['Swinger'] = 'Swinger';
|
||||
$a->strings['Betrayed'] = 'Betrogen';
|
||||
$a->strings['Separated'] = 'Getrennt';
|
||||
$a->strings['Unstable'] = 'Unstabil';
|
||||
$a->strings['Divorced'] = 'Geschieden';
|
||||
$a->strings['Widowed'] = 'Verwidwet';
|
||||
$a->strings['Uncertain'] = 'Unsicher';
|
||||
$a->strings['Complicated'] = 'Kompliziert';
|
||||
$a->strings['Don\'t care'] = 'Ist mir nicht wichtig';
|
||||
$a->strings['Ask me'] = 'Frag mich';
|
||||
$a->strings['Facebook status update failed.'] = 'Konnte den Facebook Status nicht aktualisieren.';
|
||||
$a->strings['Select files to upload: '] = 'Wähle Dateien zum Upload aus: ';
|
||||
$a->strings['Use the following controls only if the Java uploader [above] fails to launch.'] = 'Verwende die folgenden Kontrollen nur, wenn der Java Uploader [oben] nicht funktioniert.';
|
||||
$a->strings['Upload a file'] = 'Datei hochladen';
|
||||
$a->strings['Drop files here to upload'] = 'Ziehe die Dateien hier her die du hochladen willst';
|
||||
$a->strings['Failed'] = 'Fehlgeschlagen';
|
||||
$a->strings['No files were uploaded.'] = 'Keine Dateien hochgeladen.';
|
||||
$a->strings['Uploaded file is empty'] = 'Hochgeladene Datei ist leer';
|
||||
$a->strings['Uploaded file is too large'] = 'Hochgeladene Datei ist zu groß';
|
||||
$a->strings['File has an invalid extension, it should be one of '] = 'Die Dateiextension ist nicht erlaubt, sie muss eine der folgenden sein ';
|
||||
$a->strings['Upload was cancelled, or server error encountered'] = 'Upload abgebrochen oder Serverfehler aufgetreten';
|
||||
$a->strings['Randplace Settings'] = 'Randplace Einstellungen';
|
||||
$a->strings['Enable Randplace Plugin'] = 'Randplace Erweiterung aktivieren';
|
||||
$a->strings['No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation.'] = 'Kein OAuth Consumer Schlüsselpaar für StatusNet gefunden. Registriere deinen Friendika Account als Desktopapplikation und trage hier den OAuth Consumer Schlüssel, das Geheimnis und die Basis-URL der StatusNet API ein.<br />Bevor du eine neue Anwendung registrierst, kannst du auch erstmal den Admin deiner Friendika Seite fragen, ob es für deine bevorzugte StatusNet Instanz eventuell bereits ein OAuth Schlüsselpaar gibt.';
|
||||
$a->strings['OAuth Consumer Key'] = 'OAuth Consumer Schlüssel';
|
||||
$a->strings['OAuth Consumer Secret'] = 'OAuth Consumer Geheimnis';
|
||||
$a->strings['Base API Path (remember the trailing /)'] = 'Basis-URL der StatusNet API (vergiss den abschließenden / nicht)';
|
||||
$a->strings['To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to StatusNet.'] = 'To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to StatusNet.';
|
||||
$a->strings['Log in with StatusNet'] = 'Bei StatusNet anmelden';
|
||||
$a->strings['Copy the security code from StatusNet here'] = 'Kopiere den Sicherheitscode von StatusNet hier her';
|
||||
$a->strings['Currently connected to: '] = 'Momentan verbunden mit: ';
|
||||
$a->strings['If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account as well.'] = 'Wenn dies aktiviert ist, werden alle deine <strong>öffentlichen</strong> Nachricten auch auf dem verbundenen StatusNet Account veröffentlicht.';
|
||||
$a->strings['Send public postings to StatusNet'] = 'Veröffentliche öffentliche Nachrichten auf StatusNet';
|
||||
$a->strings['Clear OAuth configuration'] = 'OAuth Konfiguration löschen';
|
||||
$a->strings['Twitter Posting Settings'] = 'Twitter Posting Einstellungen';
|
||||
$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'No consumer key pair for Twitter found. Please contact your site administrator.';
|
||||
$a->strings['At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter.'] = 'Auf dieser Friendika Instanz wurde das Twitter Plugin aktiviert dein Account ist allerdings noch nicht mit einem Twitter Account verbunden. Um deinen Account mit Twitter zu verbinden, klick auf den Button weiter unten und gib die PIN die du auf Twitter erhälst hier ein. Es werden ausschließlich deine <strong>öffentlichen</strong> Nachrichten auf Twitter veröffentlicht.';
|
||||
$a->strings['Copy the PIN from Twitter here'] = 'Kopiere die Twitter PIN hier her';
|
||||
$a->strings['If enabled all your <strong>public</strong> postings will be posted to the associated Twitter account as well.'] = 'Wenn dies aktiviert ist, werden alle deine <strong>öffentlichen</strong> Nachricten auch auf dem verbundenen Twitter Account veröffentlicht.';
|
||||
$a->strings['Send public postings to Twitter'] = 'Veröffentliche öffentliche Nachrichten auf Twitter';
|
||||
$a->strings['Africa/Abidjan'] = 'Africa/Abidjan';
|
||||
$a->strings['Africa/Accra'] = 'Africa/Accra';
|
||||
$a->strings['Africa/Addis_Ababa'] = 'Africa/Addis_Ababa';
|
||||
$a->strings['Africa/Algiers'] = 'Africa/Algiers';
|
||||
$a->strings['Africa/Asmara'] = 'Africa/Asmara';
|
||||
$a->strings['Africa/Asmera'] = 'Africa/Asmera';
|
||||
$a->strings['Africa/Bamako'] = 'Africa/Bamako';
|
||||
$a->strings['Africa/Bangui'] = 'Africa/Bangui';
|
||||
$a->strings['Africa/Banjul'] = 'Africa/Banjul';
|
||||
$a->strings['Africa/Bissau'] = 'Africa/Bissau';
|
||||
$a->strings['Africa/Blantyre'] = 'Africa/Blantyre';
|
||||
$a->strings['Africa/Brazzaville'] = 'Africa/Brazzaville';
|
||||
$a->strings['Africa/Bujumbura'] = 'Africa/Bujumbura';
|
||||
$a->strings['Africa/Cairo'] = 'Africa/Cairo';
|
||||
$a->strings['Africa/Casablanca'] = 'Africa/Casablanca';
|
||||
$a->strings['Africa/Ceuta'] = 'Africa/Ceuta';
|
||||
$a->strings['Africa/Conakry'] = 'Africa/Conakry';
|
||||
$a->strings['Africa/Dakar'] = 'Africa/Dakar';
|
||||
$a->strings['Africa/Dar_es_Salaam'] = 'Africa/Dar_es_Salaam';
|
||||
$a->strings['Africa/Djibouti'] = 'Africa/Djibouti';
|
||||
$a->strings['Africa/Douala'] = 'Africa/Douala';
|
||||
$a->strings['Africa/El_Aaiun'] = 'Africa/El_Aaiun';
|
||||
$a->strings['Africa/Freetown'] = 'Africa/Freetown';
|
||||
$a->strings['Africa/Gaborone'] = 'Africa/Gaborone';
|
||||
$a->strings['Africa/Harare'] = 'Africa/Harare';
|
||||
$a->strings['Africa/Johannesburg'] = 'Africa/Johannesburg';
|
||||
$a->strings['Africa/Kampala'] = 'Africa/Kampala';
|
||||
$a->strings['Africa/Khartoum'] = 'Africa/Khartoum';
|
||||
$a->strings['Africa/Kigali'] = 'Africa/Kigali';
|
||||
$a->strings['Africa/Kinshasa'] = 'Africa/Kinshasa';
|
||||
$a->strings['Africa/Lagos'] = 'Africa/Lagos';
|
||||
$a->strings['Africa/Libreville'] = 'Africa/Libreville';
|
||||
$a->strings['Africa/Lome'] = 'Africa/Lome';
|
||||
$a->strings['Africa/Luanda'] = 'Africa/Luanda';
|
||||
$a->strings['Africa/Lubumbashi'] = 'Africa/Lubumbashi';
|
||||
$a->strings['Africa/Lusaka'] = 'Africa/Lusaka';
|
||||
$a->strings['Africa/Malabo'] = 'Africa/Malabo';
|
||||
$a->strings['Africa/Maputo'] = 'Africa/Maputo';
|
||||
$a->strings['Africa/Maseru'] = 'Africa/Maseru';
|
||||
$a->strings['Africa/Mbabane'] = 'Africa/Mbabane';
|
||||
$a->strings['Africa/Mogadishu'] = 'Africa/Mogadishu';
|
||||
$a->strings['Africa/Monrovia'] = 'Africa/Monrovia';
|
||||
$a->strings['Africa/Nairobi'] = 'Africa/Nairobi';
|
||||
$a->strings['Africa/Ndjamena'] = 'Africa/Ndjamena';
|
||||
$a->strings['Africa/Niamey'] = 'Africa/Niamey';
|
||||
$a->strings['Africa/Nouakchott'] = 'Africa/Nouakchott';
|
||||
$a->strings['Africa/Ouagadougou'] = 'Africa/Ouagadougou';
|
||||
$a->strings['Africa/Porto-Novo'] = 'Africa/Porto-Novo';
|
||||
$a->strings['Africa/Sao_Tome'] = 'Africa/Sao_Tome';
|
||||
$a->strings['Africa/Timbuktu'] = 'Africa/Timbuktu';
|
||||
$a->strings['Africa/Tripoli'] = 'Africa/Tripoli';
|
||||
$a->strings['Africa/Tunis'] = 'Africa/Tunis';
|
||||
$a->strings['Africa/Windhoek'] = 'Africa/Windhoek';
|
||||
$a->strings['America/Adak'] = 'America/Adak';
|
||||
$a->strings['America/Anchorage'] = 'America/Anchorage';
|
||||
$a->strings['America/Anguilla'] = 'America/Anguilla';
|
||||
$a->strings['America/Antigua'] = 'America/Antigua';
|
||||
$a->strings['America/Araguaina'] = 'America/Araguaina';
|
||||
$a->strings['America/Argentina/Buenos_Aires'] = 'America/Argentina/Buenos_Aires';
|
||||
$a->strings['America/Argentina/Catamarca'] = 'America/Argentina/Catamarca';
|
||||
$a->strings['America/Argentina/ComodRivadavia'] = 'America/Argentina/ComodRivadavia';
|
||||
$a->strings['America/Argentina/Cordoba'] = 'America/Argentina/Cordoba';
|
||||
$a->strings['America/Argentina/Jujuy'] = 'America/Argentina/Jujuy';
|
||||
$a->strings['America/Argentina/La_Rioja'] = 'America/Argentina/La_Rioja';
|
||||
$a->strings['America/Argentina/Mendoza'] = 'America/Argentina/Mendoza';
|
||||
$a->strings['America/Argentina/Rio_Gallegos'] = 'America/Argentina/Rio_Gallegos';
|
||||
$a->strings['America/Argentina/Salta'] = 'America/Argentina/Salta';
|
||||
$a->strings['America/Argentina/San_Juan'] = 'America/Argentina/San_Juan';
|
||||
$a->strings['America/Argentina/San_Luis'] = 'America/Argentina/San_Luis';
|
||||
$a->strings['America/Argentina/Tucuman'] = 'America/Argentina/Tucuman';
|
||||
$a->strings['America/Argentina/Ushuaia'] = 'America/Argentina/Ushuaia';
|
||||
$a->strings['America/Aruba'] = 'America/Aruba';
|
||||
$a->strings['America/Asuncion'] = 'America/Asuncion';
|
||||
$a->strings['America/Atikokan'] = 'America/Atikokan';
|
||||
$a->strings['America/Atka'] = 'America/Atka';
|
||||
$a->strings['America/Bahia'] = 'America/Bahia';
|
||||
$a->strings['America/Barbados'] = 'America/Barbados';
|
||||
$a->strings['America/Belem'] = 'America/Belem';
|
||||
$a->strings['America/Belize'] = 'America/Belize';
|
||||
$a->strings['America/Blanc-Sablon'] = 'America/Blanc-Sablon';
|
||||
$a->strings['America/Boa_Vista'] = 'America/Boa_Vista';
|
||||
$a->strings['America/Bogota'] = 'America/Bogota';
|
||||
$a->strings['America/Boise'] = 'America/Boise';
|
||||
$a->strings['America/Buenos_Aires'] = 'America/Buenos_Aires';
|
||||
$a->strings['America/Cambridge_Bay'] = 'America/Cambridge_Bay';
|
||||
$a->strings['America/Campo_Grande'] = 'America/Campo_Grande';
|
||||
$a->strings['America/Cancun'] = 'America/Cancun';
|
||||
$a->strings['America/Caracas'] = 'America/Caracas';
|
||||
$a->strings['America/Catamarca'] = 'America/Catamarca';
|
||||
$a->strings['America/Cayenne'] = 'America/Cayenne';
|
||||
$a->strings['America/Cayman'] = 'America/Cayman';
|
||||
$a->strings['America/Chicago'] = 'America/Chicago';
|
||||
$a->strings['America/Chihuahua'] = 'America/Chihuahua';
|
||||
$a->strings['America/Coral_Harbour'] = 'America/Coral_Harbour';
|
||||
$a->strings['America/Cordoba'] = 'America/Cordoba';
|
||||
$a->strings['America/Costa_Rica'] = 'America/Costa_Rica';
|
||||
$a->strings['America/Cuiaba'] = 'America/Cuiaba';
|
||||
$a->strings['America/Curacao'] = 'America/Curacao';
|
||||
$a->strings['America/Danmarkshavn'] = 'America/Danmarkshavn';
|
||||
$a->strings['America/Dawson'] = 'America/Dawson';
|
||||
$a->strings['America/Dawson_Creek'] = 'America/Dawson_Creek';
|
||||
$a->strings['America/Denver'] = 'America/Denver';
|
||||
$a->strings['America/Detroit'] = 'America/Detroit';
|
||||
$a->strings['America/Dominica'] = 'America/Dominica';
|
||||
$a->strings['America/Edmonton'] = 'America/Edmonton';
|
||||
$a->strings['America/Eirunepe'] = 'America/Eirunepe';
|
||||
$a->strings['America/El_Salvador'] = 'America/El_Salvador';
|
||||
$a->strings['America/Ensenada'] = 'America/Ensenada';
|
||||
$a->strings['America/Fort_Wayne'] = 'America/Fort_Wayne';
|
||||
$a->strings['America/Fortaleza'] = 'America/Fortaleza';
|
||||
$a->strings['America/Glace_Bay'] = 'America/Glace_Bay';
|
||||
$a->strings['America/Godthab'] = 'America/Godthab';
|
||||
$a->strings['America/Goose_Bay'] = 'America/Goose_Bay';
|
||||
$a->strings['America/Grand_Turk'] = 'America/Grand_Turk';
|
||||
$a->strings['America/Grenada'] = 'America/Grenada';
|
||||
$a->strings['America/Guadeloupe'] = 'America/Guadeloupe';
|
||||
$a->strings['America/Guatemala'] = 'America/Guatemala';
|
||||
$a->strings['America/Guayaquil'] = 'America/Guayaquil';
|
||||
$a->strings['America/Guyana'] = 'America/Guyana';
|
||||
$a->strings['America/Halifax'] = 'America/Halifax';
|
||||
$a->strings['America/Havana'] = 'America/Havana';
|
||||
$a->strings['America/Hermosillo'] = 'America/Hermosillo';
|
||||
$a->strings['America/Indiana/Indianapolis'] = 'America/Indiana/Indianapolis';
|
||||
$a->strings['America/Indiana/Knox'] = 'America/Indiana/Knox';
|
||||
$a->strings['America/Indiana/Marengo'] = 'America/Indiana/Marengo';
|
||||
$a->strings['America/Indiana/Petersburg'] = 'America/Indiana/Petersburg';
|
||||
$a->strings['America/Indiana/Tell_City'] = 'America/Indiana/Tell_City';
|
||||
$a->strings['America/Indiana/Vevay'] = 'America/Indiana/Vevay';
|
||||
$a->strings['America/Indiana/Vincennes'] = 'America/Indiana/Vincennes';
|
||||
$a->strings['America/Indiana/Winamac'] = 'America/Indiana/Winamac';
|
||||
$a->strings['America/Indianapolis'] = 'America/Indianapolis';
|
||||
$a->strings['America/Inuvik'] = 'America/Inuvik';
|
||||
$a->strings['America/Iqaluit'] = 'America/Iqaluit';
|
||||
$a->strings['America/Jamaica'] = 'America/Jamaica';
|
||||
$a->strings['America/Jujuy'] = 'America/Jujuy';
|
||||
$a->strings['America/Juneau'] = 'America/Juneau';
|
||||
$a->strings['America/Kentucky/Louisville'] = 'America/Kentucky/Louisville';
|
||||
$a->strings['America/Kentucky/Monticello'] = 'America/Kentucky/Monticello';
|
||||
$a->strings['America/Knox_IN'] = 'America/Knox_IN';
|
||||
$a->strings['America/La_Paz'] = 'America/La_Paz';
|
||||
$a->strings['America/Lima'] = 'America/Lima';
|
||||
$a->strings['America/Los_Angeles'] = 'America/Los_Angeles';
|
||||
$a->strings['America/Louisville'] = 'America/Louisville';
|
||||
$a->strings['America/Maceio'] = 'America/Maceio';
|
||||
$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';
|
||||
$a->strings['America/Merida'] = 'America/Merida';
|
||||
$a->strings['America/Mexico_City'] = 'America/Mexico_City';
|
||||
$a->strings['America/Miquelon'] = 'America/Miquelon';
|
||||
$a->strings['America/Moncton'] = 'America/Moncton';
|
||||
$a->strings['America/Monterrey'] = 'America/Monterrey';
|
||||
$a->strings['America/Montevideo'] = 'America/Montevideo';
|
||||
$a->strings['America/Montreal'] = 'America/Montreal';
|
||||
$a->strings['America/Montserrat'] = 'America/Montserrat';
|
||||
$a->strings['America/Nassau'] = 'America/Nassau';
|
||||
$a->strings['America/New_York'] = 'America/New_York';
|
||||
$a->strings['America/Nipigon'] = 'America/Nipigon';
|
||||
$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';
|
||||
$a->strings['America/Phoenix'] = 'America/Phoenix';
|
||||
$a->strings['America/Port-au-Prince'] = 'America/Port-au-Prince';
|
||||
$a->strings['America/Port_of_Spain'] = 'America/Port_of_Spain';
|
||||
$a->strings['America/Porto_Acre'] = 'America/Porto_Acre';
|
||||
$a->strings['America/Porto_Velho'] = 'America/Porto_Velho';
|
||||
$a->strings['America/Puerto_Rico'] = 'America/Puerto_Rico';
|
||||
$a->strings['America/Rainy_River'] = 'America/Rainy_River';
|
||||
$a->strings['America/Rankin_Inlet'] = 'America/Rankin_Inlet';
|
||||
$a->strings['America/Recife'] = 'America/Recife';
|
||||
$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';
|
||||
$a->strings['America/Sao_Paulo'] = 'America/Sao_Paulo';
|
||||
$a->strings['America/Scoresbysund'] = 'America/Scoresbysund';
|
||||
$a->strings['America/Shiprock'] = 'America/Shiprock';
|
||||
$a->strings['America/St_Barthelemy'] = 'America/St_Barthelemy';
|
||||
$a->strings['America/St_Johns'] = 'America/St_Johns';
|
||||
$a->strings['America/St_Kitts'] = 'America/St_Kitts';
|
||||
$a->strings['America/St_Lucia'] = 'America/St_Lucia';
|
||||
$a->strings['America/St_Thomas'] = 'America/St_Thomas';
|
||||
$a->strings['America/St_Vincent'] = 'America/St_Vincent';
|
||||
$a->strings['America/Swift_Current'] = 'America/Swift_Current';
|
||||
$a->strings['America/Tegucigalpa'] = 'America/Tegucigalpa';
|
||||
$a->strings['America/Thule'] = 'America/Thule';
|
||||
$a->strings['America/Thunder_Bay'] = 'America/Thunder_Bay';
|
||||
$a->strings['America/Tijuana'] = 'America/Tijuana';
|
||||
$a->strings['America/Toronto'] = 'America/Toronto';
|
||||
$a->strings['America/Tortola'] = 'America/Tortola';
|
||||
$a->strings['America/Vancouver'] = 'America/Vancouver';
|
||||
$a->strings['America/Virgin'] = 'America/Virgin';
|
||||
$a->strings['America/Whitehorse'] = 'America/Whitehorse';
|
||||
$a->strings['America/Winnipeg'] = 'America/Winnipeg';
|
||||
$a->strings['America/Yakutat'] = 'America/Yakutat';
|
||||
$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';
|
||||
$a->strings['Antarctica/Rothera'] = 'Antarctica/Rothera';
|
||||
$a->strings['Antarctica/South_Pole'] = 'Antarctica/South_Pole';
|
||||
$a->strings['Antarctica/Syowa'] = 'Antarctica/Syowa';
|
||||
$a->strings['Antarctica/Vostok'] = 'Antarctica/Vostok';
|
||||
$a->strings['Arctic/Longyearbyen'] = 'Arctic/Longyearbyen';
|
||||
$a->strings['Asia/Aden'] = 'Asia/Aden';
|
||||
$a->strings['Asia/Almaty'] = 'Asia/Almaty';
|
||||
$a->strings['Asia/Amman'] = 'Asia/Amman';
|
||||
$a->strings['Asia/Anadyr'] = 'Asia/Anadyr';
|
||||
$a->strings['Asia/Aqtau'] = 'Asia/Aqtau';
|
||||
$a->strings['Asia/Aqtobe'] = 'Asia/Aqtobe';
|
||||
$a->strings['Asia/Ashgabat'] = 'Asia/Ashgabat';
|
||||
$a->strings['Asia/Ashkhabad'] = 'Asia/Ashkhabad';
|
||||
$a->strings['Asia/Baghdad'] = 'Asia/Baghdad';
|
||||
$a->strings['Asia/Bahrain'] = 'Asia/Bahrain';
|
||||
$a->strings['Asia/Baku'] = 'Asia/Baku';
|
||||
$a->strings['Asia/Bangkok'] = 'Asia/Bangkok';
|
||||
$a->strings['Asia/Beirut'] = 'Asia/Beirut';
|
||||
$a->strings['Asia/Bishkek'] = 'Asia/Bishkek';
|
||||
$a->strings['Asia/Brunei'] = 'Asia/Brunei';
|
||||
$a->strings['Asia/Calcutta'] = 'Asia/Calcutta';
|
||||
$a->strings['Asia/Choibalsan'] = 'Asia/Choibalsan';
|
||||
$a->strings['Asia/Chongqing'] = 'Asia/Chongqing';
|
||||
$a->strings['Asia/Chungking'] = 'Asia/Chungking';
|
||||
$a->strings['Asia/Colombo'] = 'Asia/Colombo';
|
||||
$a->strings['Asia/Dacca'] = 'Asia/Dacca';
|
||||
$a->strings['Asia/Damascus'] = 'Asia/Damascus';
|
||||
$a->strings['Asia/Dhaka'] = 'Asia/Dhaka';
|
||||
$a->strings['Asia/Dili'] = 'Asia/Dili';
|
||||
$a->strings['Asia/Dubai'] = 'Asia/Dubai';
|
||||
$a->strings['Asia/Dushanbe'] = 'Asia/Dushanbe';
|
||||
$a->strings['Asia/Gaza'] = 'Asia/Gaza';
|
||||
$a->strings['Asia/Harbin'] = 'Asia/Harbin';
|
||||
$a->strings['Asia/Ho_Chi_Minh'] = 'Asia/Ho_Chi_Minh';
|
||||
$a->strings['Asia/Hong_Kong'] = 'Asia/Hong_Kong';
|
||||
$a->strings['Asia/Hovd'] = 'Asia/Hovd';
|
||||
$a->strings['Asia/Irkutsk'] = 'Asia/Irkutsk';
|
||||
$a->strings['Asia/Istanbul'] = 'Asia/Istanbul';
|
||||
$a->strings['Asia/Jakarta'] = 'Asia/Jakarta';
|
||||
$a->strings['Asia/Jayapura'] = 'Asia/Jayapura';
|
||||
$a->strings['Asia/Jerusalem'] = 'Asia/Jerusalem';
|
||||
$a->strings['Asia/Kabul'] = 'Asia/Kabul';
|
||||
$a->strings['Asia/Kamchatka'] = 'Asia/Kamchatka';
|
||||
$a->strings['Asia/Karachi'] = 'Asia/Karachi';
|
||||
$a->strings['Asia/Kashgar'] = 'Asia/Kashgar';
|
||||
$a->strings['Asia/Kathmandu'] = 'Asia/Kathmandu';
|
||||
$a->strings['Asia/Katmandu'] = 'Asia/Katmandu';
|
||||
$a->strings['Asia/Kolkata'] = 'Asia/Kolkata';
|
||||
$a->strings['Asia/Krasnoyarsk'] = 'Asia/Krasnoyarsk';
|
||||
$a->strings['Asia/Kuala_Lumpur'] = 'Asia/Kuala_Lumpur';
|
||||
$a->strings['Asia/Kuching'] = 'Asia/Kuching';
|
||||
$a->strings['Asia/Kuwait'] = 'Asia/Kuwait';
|
||||
$a->strings['Asia/Macao'] = 'Asia/Macao';
|
||||
$a->strings['Asia/Macau'] = 'Asia/Macau';
|
||||
$a->strings['Asia/Magadan'] = 'Asia/Magadan';
|
||||
$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';
|
||||
$a->strings['Asia/Phnom_Penh'] = 'Asia/Phnom_Penh';
|
||||
$a->strings['Asia/Pontianak'] = 'Asia/Pontianak';
|
||||
$a->strings['Asia/Pyongyang'] = 'Asia/Pyongyang';
|
||||
$a->strings['Asia/Qatar'] = 'Asia/Qatar';
|
||||
$a->strings['Asia/Qyzylorda'] = 'Asia/Qyzylorda';
|
||||
$a->strings['Asia/Rangoon'] = 'Asia/Rangoon';
|
||||
$a->strings['Asia/Riyadh'] = 'Asia/Riyadh';
|
||||
$a->strings['Asia/Saigon'] = 'Asia/Saigon';
|
||||
$a->strings['Asia/Sakhalin'] = 'Asia/Sakhalin';
|
||||
$a->strings['Asia/Samarkand'] = 'Asia/Samarkand';
|
||||
$a->strings['Asia/Seoul'] = 'Asia/Seoul';
|
||||
$a->strings['Asia/Shanghai'] = 'Asia/Shanghai';
|
||||
$a->strings['Asia/Singapore'] = 'Asia/Singapore';
|
||||
$a->strings['Asia/Taipei'] = 'Asia/Taipei';
|
||||
$a->strings['Asia/Tashkent'] = 'Asia/Tashkent';
|
||||
$a->strings['Asia/Tbilisi'] = 'Asia/Tbilisi';
|
||||
$a->strings['Asia/Tehran'] = 'Asia/Tehran';
|
||||
$a->strings['Asia/Tel_Aviv'] = 'Asia/Tel_Aviv';
|
||||
$a->strings['Asia/Thimbu'] = 'Asia/Thimbu';
|
||||
$a->strings['Asia/Thimphu'] = 'Asia/Thimphu';
|
||||
$a->strings['Asia/Tokyo'] = 'Asia/Tokyo';
|
||||
$a->strings['Asia/Ujung_Pandang'] = 'Asia/Ujung_Pandang';
|
||||
$a->strings['Asia/Ulaanbaatar'] = 'Asia/Ulaanbaatar';
|
||||
$a->strings['Asia/Ulan_Bator'] = 'Asia/Ulan_Bator';
|
||||
$a->strings['Asia/Urumqi'] = 'Asia/Urumqi';
|
||||
$a->strings['Asia/Vientiane'] = 'Asia/Vientiane';
|
||||
$a->strings['Asia/Vladivostok'] = 'Asia/Vladivostok';
|
||||
$a->strings['Asia/Yakutsk'] = 'Asia/Yakutsk';
|
||||
$a->strings['Asia/Yekaterinburg'] = 'Asia/Yekaterinburg';
|
||||
$a->strings['Asia/Yerevan'] = 'Asia/Yerevan';
|
||||
$a->strings['Atlantic/Azores'] = 'Atlantic/Azores';
|
||||
$a->strings['Atlantic/Bermuda'] = 'Atlantic/Bermuda';
|
||||
$a->strings['Atlantic/Canary'] = 'Atlantic/Canary';
|
||||
$a->strings['Atlantic/Cape_Verde'] = 'Atlantic/Cape_Verde';
|
||||
$a->strings['Atlantic/Faeroe'] = 'Atlantic/Faeroe';
|
||||
$a->strings['Atlantic/Faroe'] = 'Atlantic/Faroe';
|
||||
$a->strings['Atlantic/Jan_Mayen'] = 'Atlantic/Jan_Mayen';
|
||||
$a->strings['Atlantic/Madeira'] = 'Atlantic/Madeira';
|
||||
$a->strings['Atlantic/Reykjavik'] = 'Atlantic/Reykjavik';
|
||||
$a->strings['Atlantic/South_Georgia'] = 'Atlantic/South_Georgia';
|
||||
$a->strings['Atlantic/St_Helena'] = 'Atlantic/St_Helena';
|
||||
$a->strings['Atlantic/Stanley'] = 'Atlantic/Stanley';
|
||||
$a->strings['Australia/ACT'] = 'Australia/ACT';
|
||||
$a->strings['Australia/Adelaide'] = 'Australia/Adelaide';
|
||||
$a->strings['Australia/Brisbane'] = 'Australia/Brisbane';
|
||||
$a->strings['Australia/Broken_Hill'] = 'Australia/Broken_Hill';
|
||||
$a->strings['Australia/Canberra'] = 'Australia/Canberra';
|
||||
$a->strings['Australia/Currie'] = 'Australia/Currie';
|
||||
$a->strings['Australia/Darwin'] = 'Australia/Darwin';
|
||||
$a->strings['Australia/Eucla'] = 'Australia/Eucla';
|
||||
$a->strings['Australia/Hobart'] = 'Australia/Hobart';
|
||||
$a->strings['Australia/LHI'] = 'Australia/LHI';
|
||||
$a->strings['Australia/Lindeman'] = 'Australia/Lindeman';
|
||||
$a->strings['Australia/Lord_Howe'] = 'Australia/Lord_Howe';
|
||||
$a->strings['Australia/Melbourne'] = 'Australia/Melbourne';
|
||||
$a->strings['Australia/North'] = 'Australia/North';
|
||||
$a->strings['Australia/NSW'] = 'Australia/NSW';
|
||||
$a->strings['Australia/Perth'] = 'Australia/Perth';
|
||||
$a->strings['Australia/Queensland'] = 'Australia/Queensland';
|
||||
$a->strings['Australia/South'] = 'Australia/South';
|
||||
$a->strings['Australia/Sydney'] = 'Australia/Sydney';
|
||||
$a->strings['Australia/Tasmania'] = 'Australia/Tasmania';
|
||||
$a->strings['Australia/Victoria'] = 'Australia/Victoria';
|
||||
$a->strings['Australia/West'] = 'Australia/West';
|
||||
$a->strings['Australia/Yancowinna'] = 'Australia/Yancowinna';
|
||||
$a->strings['Brazil/Acre'] = 'Brazil/Acre';
|
||||
$a->strings['Brazil/DeNoronha'] = 'Brazil/DeNoronha';
|
||||
$a->strings['Brazil/East'] = 'Brazil/East';
|
||||
$a->strings['Brazil/West'] = 'Brazil/West';
|
||||
$a->strings['Canada/Atlantic'] = 'Canada/Atlantic';
|
||||
$a->strings['Canada/Central'] = 'Canada/Central';
|
||||
$a->strings['Canada/East-Saskatchewan'] = 'Canada/East-Saskatchewan';
|
||||
$a->strings['Canada/Eastern'] = 'Canada/Eastern';
|
||||
$a->strings['Canada/Mountain'] = 'Canada/Mountain';
|
||||
$a->strings['Canada/Newfoundland'] = 'Canada/Newfoundland';
|
||||
$a->strings['Canada/Pacific'] = 'Canada/Pacific';
|
||||
$a->strings['Canada/Saskatchewan'] = 'Canada/Saskatchewan';
|
||||
$a->strings['Canada/Yukon'] = 'Canada/Yukon';
|
||||
$a->strings['CET'] = 'CET';
|
||||
$a->strings['Chile/Continental'] = 'Chile/Continental';
|
||||
$a->strings['Chile/EasterIsland'] = 'Chile/EasterIsland';
|
||||
$a->strings['CST6CDT'] = 'CST6CDT';
|
||||
$a->strings['Cuba'] = 'Cuba';
|
||||
$a->strings['EET'] = 'EET';
|
||||
$a->strings['Egypt'] = 'Egypt';
|
||||
$a->strings['Eire'] = 'Eire';
|
||||
$a->strings['EST'] = 'EST';
|
||||
$a->strings['EST5EDT'] = 'EST5EDT';
|
||||
$a->strings['Etc/GMT'] = 'Etc/GMT';
|
||||
$a->strings['Etc/GMT+0'] = 'Etc/GMT+0';
|
||||
$a->strings['Etc/GMT+1'] = 'Etc/GMT+1';
|
||||
$a->strings['Etc/GMT+10'] = 'Etc/GMT+10';
|
||||
$a->strings['Etc/GMT+11'] = 'Etc/GMT+11';
|
||||
$a->strings['Etc/GMT+12'] = 'Etc/GMT+12';
|
||||
$a->strings['Etc/GMT+2'] = 'Etc/GMT+2';
|
||||
$a->strings['Etc/GMT+3'] = 'Etc/GMT+3';
|
||||
$a->strings['Etc/GMT+4'] = 'Etc/GMT+4';
|
||||
$a->strings['Etc/GMT+5'] = 'Etc/GMT+5';
|
||||
$a->strings['Etc/GMT+6'] = 'Etc/GMT+6';
|
||||
$a->strings['Etc/GMT+7'] = 'Etc/GMT+7';
|
||||
$a->strings['Etc/GMT+8'] = 'Etc/GMT+8';
|
||||
$a->strings['Etc/GMT+9'] = 'Etc/GMT+9';
|
||||
$a->strings['Etc/GMT-0'] = 'Etc/GMT-0';
|
||||
$a->strings['Etc/GMT-1'] = 'Etc/GMT-1';
|
||||
$a->strings['Etc/GMT-10'] = 'Etc/GMT-10';
|
||||
$a->strings['Etc/GMT-11'] = 'Etc/GMT-11';
|
||||
$a->strings['Etc/GMT-12'] = 'Etc/GMT-12';
|
||||
$a->strings['Etc/GMT-13'] = 'Etc/GMT-13';
|
||||
$a->strings['Etc/GMT-14'] = 'Etc/GMT-14';
|
||||
$a->strings['Etc/GMT-2'] = 'Etc/GMT-2';
|
||||
$a->strings['Etc/GMT-3'] = 'Etc/GMT-3';
|
||||
$a->strings['Etc/GMT-4'] = 'Etc/GMT-4';
|
||||
$a->strings['Etc/GMT-5'] = 'Etc/GMT-5';
|
||||
$a->strings['Etc/GMT-6'] = 'Etc/GMT-6';
|
||||
$a->strings['Etc/GMT-7'] = 'Etc/GMT-7';
|
||||
$a->strings['Etc/GMT-8'] = 'Etc/GMT-8';
|
||||
$a->strings['Etc/GMT-9'] = 'Etc/GMT-9';
|
||||
$a->strings['Etc/GMT0'] = 'Etc/GMT0';
|
||||
$a->strings['Etc/Greenwich'] = 'Etc/Greenwich';
|
||||
$a->strings['Etc/UCT'] = 'Etc/UCT';
|
||||
$a->strings['Etc/Universal'] = 'Etc/Universal';
|
||||
$a->strings['Etc/UTC'] = 'Etc/UTC';
|
||||
$a->strings['Etc/Zulu'] = 'Etc/Zulu';
|
||||
$a->strings['Europe/Amsterdam'] = 'Europe/Amsterdam';
|
||||
$a->strings['Europe/Andorra'] = 'Europe/Andorra';
|
||||
$a->strings['Europe/Athens'] = 'Europe/Athens';
|
||||
$a->strings['Europe/Belfast'] = 'Europe/Belfast';
|
||||
$a->strings['Europe/Belgrade'] = 'Europe/Belgrade';
|
||||
$a->strings['Europe/Berlin'] = 'Europe/Berlin';
|
||||
$a->strings['Europe/Bratislava'] = 'Europe/Bratislava';
|
||||
$a->strings['Europe/Brussels'] = 'Europe/Brussels';
|
||||
$a->strings['Europe/Bucharest'] = 'Europe/Bucharest';
|
||||
$a->strings['Europe/Budapest'] = 'Europe/Budapest';
|
||||
$a->strings['Europe/Chisinau'] = 'Europe/Chisinau';
|
||||
$a->strings['Europe/Copenhagen'] = 'Europe/Copenhagen';
|
||||
$a->strings['Europe/Dublin'] = 'Europe/Dublin';
|
||||
$a->strings['Europe/Gibraltar'] = 'Europe/Gibraltar';
|
||||
$a->strings['Europe/Guernsey'] = 'Europe/Guernsey';
|
||||
$a->strings['Europe/Helsinki'] = 'Europe/Helsinki';
|
||||
$a->strings['Europe/Isle_of_Man'] = 'Europe/Isle_of_Man';
|
||||
$a->strings['Europe/Istanbul'] = 'Europe/Istanbul';
|
||||
$a->strings['Europe/Jersey'] = 'Europe/Jersey';
|
||||
$a->strings['Europe/Kaliningrad'] = 'Europe/Kaliningrad';
|
||||
$a->strings['Europe/Kiev'] = 'Europe/Kiev';
|
||||
$a->strings['Europe/Lisbon'] = 'Europe/Lisbon';
|
||||
$a->strings['Europe/Ljubljana'] = 'Europe/Ljubljana';
|
||||
$a->strings['Europe/London'] = 'Europe/London';
|
||||
$a->strings['Europe/Luxembourg'] = 'Europe/Luxembourg';
|
||||
$a->strings['Europe/Madrid'] = 'Europe/Madrid';
|
||||
$a->strings['Europe/Malta'] = 'Europe/Malta';
|
||||
$a->strings['Europe/Mariehamn'] = 'Europe/Mariehamn';
|
||||
$a->strings['Europe/Minsk'] = 'Europe/Minsk';
|
||||
$a->strings['Europe/Monaco'] = 'Europe/Monaco';
|
||||
$a->strings['Europe/Moscow'] = 'Europe/Moscow';
|
||||
$a->strings['Europe/Nicosia'] = 'Europe/Nicosia';
|
||||
$a->strings['Europe/Oslo'] = 'Europe/Oslo';
|
||||
$a->strings['Europe/Paris'] = 'Europe/Paris';
|
||||
$a->strings['Europe/Podgorica'] = 'Europe/Podgorica';
|
||||
$a->strings['Europe/Prague'] = 'Europe/Prague';
|
||||
$a->strings['Europe/Riga'] = 'Europe/Riga';
|
||||
$a->strings['Europe/Rome'] = 'Europe/Rome';
|
||||
$a->strings['Europe/Samara'] = 'Europe/Samara';
|
||||
$a->strings['Europe/San_Marino'] = 'Europe/San_Marino';
|
||||
$a->strings['Europe/Sarajevo'] = 'Europe/Sarajevo';
|
||||
$a->strings['Europe/Simferopol'] = 'Europe/Simferopol';
|
||||
$a->strings['Europe/Skopje'] = 'Europe/Skopje';
|
||||
$a->strings['Europe/Sofia'] = 'Europe/Sofia';
|
||||
$a->strings['Europe/Stockholm'] = 'Europe/Stockholm';
|
||||
$a->strings['Europe/Tallinn'] = 'Europe/Tallinn';
|
||||
$a->strings['Europe/Tirane'] = 'Europe/Tirane';
|
||||
$a->strings['Europe/Tiraspol'] = 'Europe/Tiraspol';
|
||||
$a->strings['Europe/Uzhgorod'] = 'Europe/Uzhgorod';
|
||||
$a->strings['Europe/Vaduz'] = 'Europe/Vaduz';
|
||||
$a->strings['Europe/Vatican'] = 'Europe/Vatican';
|
||||
$a->strings['Europe/Vienna'] = 'Europe/Vienna';
|
||||
$a->strings['Europe/Vilnius'] = 'Europe/Vilnius';
|
||||
$a->strings['Europe/Volgograd'] = 'Europe/Volgograd';
|
||||
$a->strings['Europe/Warsaw'] = 'Europe/Warsaw';
|
||||
$a->strings['Europe/Zagreb'] = 'Europe/Zagreb';
|
||||
$a->strings['Europe/Zaporozhye'] = 'Europe/Zaporozhye';
|
||||
$a->strings['Europe/Zurich'] = 'Europe/Zurich';
|
||||
$a->strings['Factory'] = 'Factory';
|
||||
$a->strings['GB'] = 'GB';
|
||||
$a->strings['GB-Eire'] = 'GB-Eire';
|
||||
$a->strings['GMT'] = 'GMT';
|
||||
$a->strings['GMT+0'] = 'GMT+0';
|
||||
$a->strings['GMT-0'] = 'GMT-0';
|
||||
$a->strings['GMT0'] = 'GMT0';
|
||||
$a->strings['Greenwich'] = 'Greenwich';
|
||||
$a->strings['Hongkong'] = 'Hongkong';
|
||||
$a->strings['HST'] = 'HST';
|
||||
$a->strings['Iceland'] = 'Iceland';
|
||||
$a->strings['Indian/Antananarivo'] = 'Indian/Antananarivo';
|
||||
$a->strings['Indian/Chagos'] = 'Indian/Chagos';
|
||||
$a->strings['Indian/Christmas'] = 'Indian/Christmas';
|
||||
$a->strings['Indian/Cocos'] = 'Indian/Cocos';
|
||||
$a->strings['Indian/Comoro'] = 'Indian/Comoro';
|
||||
$a->strings['Indian/Kerguelen'] = 'Indian/Kerguelen';
|
||||
$a->strings['Indian/Mahe'] = 'Indian/Mahe';
|
||||
$a->strings['Indian/Maldives'] = 'Indian/Maldives';
|
||||
$a->strings['Indian/Mauritius'] = 'Indian/Mauritius';
|
||||
$a->strings['Indian/Mayotte'] = 'Indian/Mayotte';
|
||||
$a->strings['Indian/Reunion'] = 'Indian/Reunion';
|
||||
$a->strings['Iran'] = 'Iran';
|
||||
$a->strings['Israel'] = 'Israel';
|
||||
$a->strings['Jamaica'] = 'Jamaica';
|
||||
$a->strings['Japan'] = 'Japan';
|
||||
$a->strings['Kwajalein'] = 'Kwajalein';
|
||||
$a->strings['Libya'] = 'Libya';
|
||||
$a->strings['MET'] = 'MET';
|
||||
$a->strings['Mexico/BajaNorte'] = 'Mexico/BajaNorte';
|
||||
$a->strings['Mexico/BajaSur'] = 'Mexico/BajaSur';
|
||||
$a->strings['Mexico/General'] = 'Mexico/General';
|
||||
$a->strings['MST'] = 'MST';
|
||||
$a->strings['MST7MDT'] = 'MST7MDT';
|
||||
$a->strings['Navajo'] = 'Navajo';
|
||||
$a->strings['NZ'] = 'NZ';
|
||||
$a->strings['NZ-CHAT'] = 'NZ-CHAT';
|
||||
$a->strings['Pacific/Apia'] = 'Pacific/Apia';
|
||||
$a->strings['Pacific/Auckland'] = 'Pacific/Auckland';
|
||||
$a->strings['Pacific/Chatham'] = 'Pacific/Chatham';
|
||||
$a->strings['Pacific/Easter'] = 'Pacific/Easter';
|
||||
$a->strings['Pacific/Efate'] = 'Pacific/Efate';
|
||||
$a->strings['Pacific/Enderbury'] = 'Pacific/Enderbury';
|
||||
$a->strings['Pacific/Fakaofo'] = 'Pacific/Fakaofo';
|
||||
$a->strings['Pacific/Fiji'] = 'Pacific/Fiji';
|
||||
$a->strings['Pacific/Funafuti'] = 'Pacific/Funafuti';
|
||||
$a->strings['Pacific/Galapagos'] = 'Pacific/Galapagos';
|
||||
$a->strings['Pacific/Gambier'] = 'Pacific/Gambier';
|
||||
$a->strings['Pacific/Guadalcanal'] = 'Pacific/Guadalcanal';
|
||||
$a->strings['Pacific/Guam'] = 'Pacific/Guam';
|
||||
$a->strings['Pacific/Honolulu'] = 'Pacific/Honolulu';
|
||||
$a->strings['Pacific/Johnston'] = 'Pacific/Johnston';
|
||||
$a->strings['Pacific/Kiritimati'] = 'Pacific/Kiritimati';
|
||||
$a->strings['Pacific/Kosrae'] = 'Pacific/Kosrae';
|
||||
$a->strings['Pacific/Kwajalein'] = 'Pacific/Kwajalein';
|
||||
$a->strings['Pacific/Majuro'] = 'Pacific/Majuro';
|
||||
$a->strings['Pacific/Marquesas'] = 'Pacific/Marquesas';
|
||||
$a->strings['Pacific/Midway'] = 'Pacific/Midway';
|
||||
$a->strings['Pacific/Nauru'] = 'Pacific/Nauru';
|
||||
$a->strings['Pacific/Niue'] = 'Pacific/Niue';
|
||||
$a->strings['Pacific/Norfolk'] = 'Pacific/Norfolk';
|
||||
$a->strings['Pacific/Noumea'] = 'Pacific/Noumea';
|
||||
$a->strings['Pacific/Pago_Pago'] = 'Pacific/Pago_Pago';
|
||||
$a->strings['Pacific/Palau'] = 'Pacific/Palau';
|
||||
$a->strings['Pacific/Pitcairn'] = 'Pacific/Pitcairn';
|
||||
$a->strings['Pacific/Ponape'] = 'Pacific/Ponape';
|
||||
$a->strings['Pacific/Port_Moresby'] = 'Pacific/Port_Moresby';
|
||||
$a->strings['Pacific/Rarotonga'] = 'Pacific/Rarotonga';
|
||||
$a->strings['Pacific/Saipan'] = 'Pacific/Saipan';
|
||||
$a->strings['Pacific/Samoa'] = 'Pacific/Samoa';
|
||||
$a->strings['Pacific/Tahiti'] = 'Pacific/Tahiti';
|
||||
$a->strings['Pacific/Tarawa'] = 'Pacific/Tarawa';
|
||||
$a->strings['Pacific/Tongatapu'] = 'Pacific/Tongatapu';
|
||||
$a->strings['Pacific/Truk'] = 'Pacific/Truk';
|
||||
$a->strings['Pacific/Wake'] = 'Pacific/Wake';
|
||||
$a->strings['Pacific/Wallis'] = 'Pacific/Wallis';
|
||||
$a->strings['Pacific/Yap'] = 'Pacific/Yap';
|
||||
$a->strings['Poland'] = 'Poland';
|
||||
$a->strings['Portugal'] = 'Portugal';
|
||||
$a->strings['PRC'] = 'PRC';
|
||||
$a->strings['PST8PDT'] = 'PST8PDT';
|
||||
$a->strings['ROC'] = 'ROC';
|
||||
$a->strings['ROK'] = 'ROK';
|
||||
$a->strings['Singapore'] = 'Singapore';
|
||||
$a->strings['Turkey'] = 'Turkey';
|
||||
$a->strings['UCT'] = 'UCT';
|
||||
$a->strings['Universal'] = 'Universal';
|
||||
$a->strings['US/Alaska'] = 'US/Alaska';
|
||||
$a->strings['US/Aleutian'] = 'US/Aleutian';
|
||||
$a->strings['US/Arizona'] = 'US/Arizona';
|
||||
$a->strings['US/Central'] = 'US/Central';
|
||||
$a->strings['US/East-Indiana'] = 'US/East-Indiana';
|
||||
$a->strings['US/Eastern'] = 'US/Eastern';
|
||||
$a->strings['US/Hawaii'] = 'US/Hawaii';
|
||||
$a->strings['US/Indiana-Starke'] = 'US/Indiana-Starke';
|
||||
$a->strings['US/Michigan'] = 'US/Michigan';
|
||||
$a->strings['US/Mountain'] = 'US/Mountain';
|
||||
$a->strings['US/Pacific'] = 'US/Pacific';
|
||||
$a->strings['US/Pacific-New'] = 'US/Pacific-New';
|
||||
$a->strings['US/Samoa'] = 'US/Samoa';
|
||||
$a->strings['UTC'] = 'UTC';
|
||||
$a->strings['W-SU'] = 'W-SU';
|
||||
$a->strings['WET'] = 'WET';
|
||||
$a->strings['Zulu'] = 'Zulu';
|
||||
$a->strings['Three Dimensional Tic-Tac-Toe'] = 'Dreidimensionales Tic-Tac-Toe';
|
||||
$a->strings['New game'] = 'Neues Spiel';
|
||||
$a->strings['New game with handicap'] = 'Neues Handicap Spiel';
|
||||
$a->strings['Create a New Account'] = 'Neuen Account erstellen';
|
||||
$a->strings['link to source'] = 'Link zum original Posting';
|
||||
$a->strings['Applications'] = 'Anwendungen';
|
||||
$a->strings['noreply'] = '';
|
||||
$a->strings['Apps'] = 'Apps';
|
||||
$a->strings['Facebook disabled'] = 'Facebook deaktiviert';
|
||||
$a->strings['Facebook API key is missing.'] = 'Facebook API Schlüssel nicht gefunden';
|
||||
$a->strings['Facebook Connect'] = 'Mit Facebook verbinden';
|
||||
$a->strings['Install Facebook post connector'] = '';
|
||||
$a->strings['Remove Facebook post connector'] = '';
|
||||
$a->strings['Facebook'] = '';
|
||||
$a->strings['Facebook Connector Settings'] = 'Facebook Verbindungseinstellungen';
|
||||
$a->strings['Post to Facebook'] = 'Zu Facebook posten';
|
||||
$a->strings['Image: '] = 'Bild';
|
||||
$a->strings['Post to StatusNet'] = 'Nach StatusNet senden';
|
||||
$a->strings['StatusNet Posting Settings'] = 'StatusNet Posting Einstellungen';
|
||||
$a->strings['You go first...'] = 'Du fängst an...';
|
||||
$a->strings['I\'m going first this time...'] = 'Diesmal fange ich an...';
|
||||
$a->strings['You won!'] = 'Du gewinnst!';
|
||||
$a->strings['"Cat" game!'] = 'Unentschieden!';
|
||||
$a->strings['I won!'] = 'Ich gewinne!';
|
||||
$a->strings['Post to Twitter'] = '';
|
||||
?>
|
||||
|
||||
function string_plural_select($n){
|
||||
return ($n != 1);
|
||||
}
|
||||
;
|
||||
$a->strings["Not Found"] = "Nicht gefunden";
|
||||
$a->strings["Page not found."] = "Seite nicht gefunden.";
|
||||
$a->strings["Permission denied"] = "Zugriff verweigert";
|
||||
$a->strings["Permission denied."] = "Zugriff verweigert.";
|
||||
$a->strings["Delete this item?"] = "Diesen Beitrag löschen?";
|
||||
$a->strings["Comment"] = "Kommentar";
|
||||
$a->strings["Create a New Account"] = "Neuen Account erstellen";
|
||||
$a->strings["Register"] = "Registrieren";
|
||||
$a->strings["Nickname or Email address: "] = "Spitzname oder Email-Adresse: ";
|
||||
$a->strings["Password: "] = "Passwort: ";
|
||||
$a->strings["Login"] = "Anmeldung";
|
||||
$a->strings["Nickname/Email/OpenID: "] = "Spitzname/Email/OpenID: ";
|
||||
$a->strings["Password (if not OpenID): "] = "Passwort (falls nicht OpenID): ";
|
||||
$a->strings["Forgot your password?"] = "Passwort vergessen?";
|
||||
$a->strings["Password Reset"] = "Passwort zurücksetzen";
|
||||
$a->strings["Logout"] = "Abmelden";
|
||||
$a->strings["prev"] = "vorige";
|
||||
$a->strings["first"] = "erste";
|
||||
$a->strings["last"] = "letzte";
|
||||
$a->strings["next"] = "nächste";
|
||||
$a->strings["No contacts"] = "Keine Kontakte";
|
||||
$a->strings["%d Contact"] = array(
|
||||
0 => "%d Kontakt",
|
||||
1 => "%d Kontakte",
|
||||
);
|
||||
$a->strings["View Contacts"] = "Kontakte anzeigen";
|
||||
$a->strings["Search"] = "Suche";
|
||||
$a->strings["No profile"] = "Kein Profil";
|
||||
$a->strings["Connect"] = "Verbinden";
|
||||
$a->strings["Location:"] = "Ort:";
|
||||
$a->strings[", "] = ", ";
|
||||
$a->strings["Gender:"] = "Geschlecht:";
|
||||
$a->strings["Status:"] = "Status:";
|
||||
$a->strings["Homepage:"] = "Homepage:";
|
||||
$a->strings["Monday"] = "Montag";
|
||||
$a->strings["Tuesday"] = "Dienstag";
|
||||
$a->strings["Wednesday"] = "Mittwoch";
|
||||
$a->strings["Thursday"] = "Donnerstag";
|
||||
$a->strings["Friday"] = "Freitag";
|
||||
$a->strings["Saturday"] = "Samstag";
|
||||
$a->strings["Sunday"] = "Sonntag";
|
||||
$a->strings["January"] = "Januar";
|
||||
$a->strings["February"] = "Februar";
|
||||
$a->strings["March"] = "März";
|
||||
$a->strings["April"] = "April";
|
||||
$a->strings["May"] = "Mai";
|
||||
$a->strings["June"] = "Juni";
|
||||
$a->strings["July"] = "Juli";
|
||||
$a->strings["August"] = "August";
|
||||
$a->strings["September"] = "September";
|
||||
$a->strings["October"] = "Oktober";
|
||||
$a->strings["November"] = "November";
|
||||
$a->strings["December"] = "Dezember";
|
||||
$a->strings["g A l F d"] = "g A l F d";
|
||||
$a->strings["Birthday Reminders"] = "Geburtstagserinnerungen";
|
||||
$a->strings["Birthdays this week:"] = "Geburtstage diese Woche:";
|
||||
$a->strings["(Adjusted for local time)"] = "(an die lokale Zeit angepasst)";
|
||||
$a->strings["[today]"] = "[heute]";
|
||||
$a->strings["link to source"] = "Link zum original Posting";
|
||||
$a->strings["Welcome back %s"] = "Willkommen zurück %s";
|
||||
$a->strings["Manage Identities and/or Pages"] = "Verwalte Identitäten und/oder Seiten";
|
||||
$a->strings["(Toggle between different identities or community/group pages which share your account details.)"] = "(Wähle zwischen verschiedenen Identitäten oder Gemeinschafts/Gruppen Seiten die deine Accountdetails teilen.)";
|
||||
$a->strings["Select an identity to manage: "] = "Wähle eine Identität zum Verwalten:";
|
||||
$a->strings["Submit"] = "Senden";
|
||||
$a->strings["Image exceeds size limit of %d"] = "Bildgröße überschreitet das Limit von %d";
|
||||
$a->strings["Unable to process image."] = "Konnte das Bild nicht bearbeiten.";
|
||||
$a->strings["Wall Photos"] = "Pinnwand Bilder";
|
||||
$a->strings["Image upload failed."] = "Hochladen des Bildes gescheitert.";
|
||||
$a->strings["Administrator"] = "Administrator";
|
||||
$a->strings["noreply"] = "noreply";
|
||||
$a->strings["New mail received at "] = "New mail received at ";
|
||||
$a->strings["%s commented on an item at %s"] = "%s hat einen Beitrag auf %s kommentiert";
|
||||
$a->strings["Status"] = "Status";
|
||||
$a->strings["Profile"] = "Profil";
|
||||
$a->strings["Photos"] = "Bilder";
|
||||
$a->strings["Shared content is covered by the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."] = "Geteilte Inhalte innerhalb des Friendika Netzwerks sind unter der <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> verfügbar.";
|
||||
$a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil URL.";
|
||||
$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen.";
|
||||
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können.";
|
||||
$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen.";
|
||||
$a->strings["following"] = "folgen";
|
||||
$a->strings["Image uploaded but image cropping failed."] = "Bilder hochgeladen aber das Zuschneiden ist fehlgeschlagen.";
|
||||
$a->strings["Profile Photos"] = "Profilbilder";
|
||||
$a->strings["Image size reduction [%s] failed."] = "Verkleinern der Bildgröße von [%s] ist gescheitert.";
|
||||
$a->strings["Unable to process image"] = "Bild konnte nicht verarbeitet werden";
|
||||
$a->strings["Upload File:"] = "Datei hochladen:";
|
||||
$a->strings["Upload Profile Photo"] = "Profilbild hochladen";
|
||||
$a->strings["Upload"] = "Hochladen";
|
||||
$a->strings["or"] = "oder";
|
||||
$a->strings["skip this step"] = "diesen Schritt überspringen";
|
||||
$a->strings["select a photo from your photo albums"] = "wähle ein Foto von deinen Fotoalben";
|
||||
$a->strings["Crop Image"] = "Bild Zurechtschneiden";
|
||||
$a->strings["Please adjust the image cropping for optimum viewing."] = "Passe bitte den Bildausschnitt an damit das Bild optimal dargestellt werden kann.";
|
||||
$a->strings["Done Editing"] = "Bearbeitung abgeschlossen";
|
||||
$a->strings["Image uploaded successfully."] = "Bild erfolgreich auf den Server geladen.";
|
||||
$a->strings["Welcome to %s"] = "Willkommen zu %s";
|
||||
$a->strings["Please login."] = "Bitte melde dich an.";
|
||||
$a->strings["Registration revoked for %s"] = "Registration für %s wurde zurück gezogen";
|
||||
$a->strings["Registration details for %s"] = "Details der Registration von %s";
|
||||
$a->strings["Account approved."] = "Account freigegeben.";
|
||||
$a->strings["Profile not found."] = "Profil nicht gefunden.";
|
||||
$a->strings["Profile Name is required."] = "Profilname ist erforderlich.";
|
||||
$a->strings["Profile updated."] = "Profil aktualisiert.";
|
||||
$a->strings["Profile deleted."] = "Profil gelöscht.";
|
||||
$a->strings["Profile-"] = "Profil-";
|
||||
$a->strings["New profile created."] = "Neues Profil angelegt.";
|
||||
$a->strings["Profile unavailable to clone."] = "Profil nicht zum Duplizieren verfügbar.";
|
||||
$a->strings["Hide my contact/friend list from viewers of this profile?"] = "Verberge meine Kontakte/Freunde von Betrachtern dieses Profils?";
|
||||
$a->strings["Yes"] = "Ja";
|
||||
$a->strings["No"] = "Nein";
|
||||
$a->strings["Edit Profile Details"] = "Profil bearbeiten";
|
||||
$a->strings["View this profile"] = "Dieses Profil anzeigen";
|
||||
$a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen verwenden";
|
||||
$a->strings["Clone this profile"] = "Dieses Profil dublizieren";
|
||||
$a->strings["Delete this profile"] = "Dieses Profil löschen";
|
||||
$a->strings["Profile Name:"] = "Profilname:";
|
||||
$a->strings["Your Full Name:"] = "Dein kompletter Name:";
|
||||
$a->strings["Title/Description:"] = "Titel/Beschreibung:";
|
||||
$a->strings["Your Gender:"] = "Dein Geschlecht:";
|
||||
$a->strings["Birthday (y/m/d):"] = "Geburtstag (y/m/d):";
|
||||
$a->strings["Street Address:"] = "Adresse:";
|
||||
$a->strings["Locality/City:"] = "Wohnort/Stadt:";
|
||||
$a->strings["Postal/Zip Code:"] = "Postleitzahl:";
|
||||
$a->strings["Country:"] = "Land:";
|
||||
$a->strings["Region/State:"] = "Region/Bundesstaat:";
|
||||
$a->strings["<span class=\"heart\">♥</span> Marital Status:"] = "<span class=\"heart\">♥</span> Beziehungs Status:";
|
||||
$a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)";
|
||||
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiel: cathy123, Cathy Williams, cathy@example.com";
|
||||
$a->strings["Sexual Preference:"] = "Sexuelle Vorlieben:";
|
||||
$a->strings["Homepage URL:"] = "Adresse der Homepage:";
|
||||
$a->strings["Political Views:"] = "Politische Ansichten:";
|
||||
$a->strings["Religious Views:"] = "Religiöse Ansichten:";
|
||||
$a->strings["Public Keywords:"] = "Öffentliche Schlüsselwörter:";
|
||||
$a->strings["Private Keywords:"] = "Private Schlüsselwörter:";
|
||||
$a->strings["Example: fishing photography software"] = "Beispiel: Fischen Photographie Software";
|
||||
$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet um potentielle Freunde zu finden, könnte von Fremden eingesehen werden)";
|
||||
$a->strings["(Used for searching profiles, never shown to others)"] = "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)";
|
||||
$a->strings["Tell us about yourself..."] = "Erzähle und ein bisschen von dir...";
|
||||
$a->strings["Hobbies/Interests"] = "Hobbies/Interessen";
|
||||
$a->strings["Contact information and Social Networks"] = "Kontaktinformationen und Soziale Netzwerke";
|
||||
$a->strings["Musical interests"] = "Musikalische Interessen";
|
||||
$a->strings["Books, literature"] = "Literatur/Bücher";
|
||||
$a->strings["Television"] = "Fernsehen";
|
||||
$a->strings["Film/dance/culture/entertainment"] = "Filme/Tänze/Kultur/Unterhaltung";
|
||||
$a->strings["Love/romance"] = "Liebesleben";
|
||||
$a->strings["Work/employment"] = "Arbeit/Beschäftigung";
|
||||
$a->strings["School/education"] = "Schule/Ausbildung";
|
||||
$a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = "Dies ist dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein.";
|
||||
$a->strings["Age: "] = "Alter: ";
|
||||
$a->strings["Profiles"] = "Profile";
|
||||
$a->strings["Change profile photo"] = "Profilbild ändern";
|
||||
$a->strings["Create New Profile"] = "Neues Profil anlegen";
|
||||
$a->strings["Profile Image"] = "Profilbild";
|
||||
$a->strings["Visible to everybody"] = "Für jeden sichtbar";
|
||||
$a->strings["Edit visibility"] = "Sichtbarkeit bearbeiten";
|
||||
$a->strings["Passwords do not match. Password unchanged."] = "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert.";
|
||||
$a->strings["Empty passwords are not allowed. Password unchanged."] = "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert.";
|
||||
$a->strings["Password changed."] = "Passwort ändern.";
|
||||
$a->strings["Password update failed. Please try again."] = "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal.";
|
||||
$a->strings[" Please use a shorter name."] = " Bitte verwende einen kürzeren Namen.";
|
||||
$a->strings[" Name too short."] = " Name ist zu kurz.";
|
||||
$a->strings[" Not valid email."] = " Keine gültige EMail.";
|
||||
$a->strings[" Cannot change to that email."] = " Cannot change to that email.";
|
||||
$a->strings["Settings updated."] = "Einstellungen aktualisiert.";
|
||||
$a->strings["Plugin Settings"] = "Plugin Einstellungen";
|
||||
$a->strings["Account Settings"] = "Account Einstellungen";
|
||||
$a->strings["No Plugin settings configured"] = "Keine Erweiterungen konfiguriert";
|
||||
$a->strings["Normal Account"] = "Normaler Account";
|
||||
$a->strings["This account is a normal personal profile"] = "Dieser Account ist ein normales persönliches Profil";
|
||||
$a->strings["Soapbox Account"] = "Sandkasten Accunt";
|
||||
$a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Freundschaftsanfragen werden automatisch als Nurlese-Fans akzeptiert";
|
||||
$a->strings["Community/Celebrity Account"] = "Gemeinschafts/Berühmtheiten Account";
|
||||
$a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Freundschaftsanfragen werden automatisch als Lese-und-Schreib-Fans akzeptiert";
|
||||
$a->strings["Automatic Friend Account"] = "Automatischer Freundes Account";
|
||||
$a->strings["Automatically approve all connection/friend requests as friends"] = "Freundschaftsanfragen werden automatisch als Freund akzeptiert";
|
||||
$a->strings["OpenID: "] = "OpenID: ";
|
||||
$a->strings[" (Optional) Allow this OpenID to login to this account."] = " (Optional) Erlaube dieser OpenID sich für diesen Account anzumelden.";
|
||||
$a->strings["Publish your default profile in site directory?"] = "Dein Standard-Profil im Verzeichnis dieser Seite veröffentliche?";
|
||||
$a->strings["Publish your default profile in global social directory?"] = "Dein Standard-Profil im weltweiten Verzeichnis veröffentlichen?";
|
||||
$a->strings["Profile is <strong>not published</strong>."] = "Profil ist <strong>nicht veröffentlicht</strong>.";
|
||||
$a->strings["Your Identity Address is"] = "Die Adresse deines Profils lautet:";
|
||||
$a->strings["Export Personal Data"] = "Perönliche Daten exportieren";
|
||||
$a->strings["Basic Settings"] = "Grundeinstellungen";
|
||||
$a->strings["Full Name:"] = "Kompletter Name:";
|
||||
$a->strings["Email Address:"] = "Email Adresse:";
|
||||
$a->strings["Your Timezone:"] = "Deine Zeitzone:";
|
||||
$a->strings["Default Post Location:"] = "Standardstandort:";
|
||||
$a->strings["Use Browser Location:"] = "Verwende den Standort des Browsers:";
|
||||
$a->strings["Display Theme:"] = "Theme:";
|
||||
$a->strings["Security and Privacy Settings"] = "Sicherheits und Privatsphären Einstellungen";
|
||||
$a->strings["Maximum Friend Requests/Day:"] = "Maximale Anzahl von Freundschaftsanfragen/Tag:";
|
||||
$a->strings["(to prevent spam abuse)"] = "(um SPAM zu vermeiden)";
|
||||
$a->strings["Allow friends to post to your profile page:"] = "Erlaube es Freunden Beiträge auf deiner Pinnwand zu posten:";
|
||||
$a->strings["Automatically expire (delete) posts older than"] = "Automatisch Beiträge verfallen lassen (löschen) die älter sind als";
|
||||
$a->strings["days"] = "Tage";
|
||||
$a->strings["Notification Settings"] = "Benachrichtigungs Einstellungen";
|
||||
$a->strings["Send a notification email when:"] = "Benachrichtigungs-Email senden wenn:";
|
||||
$a->strings["You receive an introduction"] = "Du eine Vorstellung erhälst";
|
||||
$a->strings["Your introductions are confirmed"] = "Eine deiner Vorstellungen angenommen wurde";
|
||||
$a->strings["Someone writes on your profile wall"] = "Jemand etwas auf deiner Pinnwand postet";
|
||||
$a->strings["Someone writes a followup comment"] = "Jemand einen Kommentar verfasst";
|
||||
$a->strings["You receive a private message"] = "Du eine private Nachricht erhälst";
|
||||
$a->strings["Password Settings"] = "Passwort Einstellungen";
|
||||
$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer außer du willst das Passwort ändern";
|
||||
$a->strings["New Password:"] = "Neues Passwort:";
|
||||
$a->strings["Confirm:"] = "Bestätigen:";
|
||||
$a->strings["Advanced Page Settings"] = "Erweiterte Seiten Einstellungen";
|
||||
$a->strings["Default Post Permissions"] = "Grundeinstellung für Veröffentlichungen";
|
||||
$a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)";
|
||||
$a->strings["Email/Mailbox Setup"] = "Email/Postfach Einstellungen";
|
||||
$a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Wenn du mit Email Kontakten über diesen Service kommunizieren möchtest (optional) gib bitte die Einstellungen für dein Postfach an.";
|
||||
$a->strings["IMAP server name:"] = "IMAP Server Name:";
|
||||
$a->strings["IMAP port:"] = "IMAP Port:";
|
||||
$a->strings["Security (TLS or SSL):"] = "Sicherheit (TLS oder SSL)";
|
||||
$a->strings["Email login name:"] = "Email Login Name:";
|
||||
$a->strings["Email password:"] = "Email Passwort:";
|
||||
$a->strings["Reply-to address (Optional):"] = "Reply-to Adresse (Optional)";
|
||||
$a->strings["Send public posts to all email contacts:"] = "Sende öffentliche Einträge an alle Email Kontakte:";
|
||||
$a->strings["Email access is disabled on this site."] = "Zugriff auf Emails für diese Seite deaktiviert.";
|
||||
$a->strings["Public access denied."] = "Öffentlicher Zugriff verweigert.";
|
||||
$a->strings["No results."] = "Keine Ergebnisse.";
|
||||
$a->strings["Photo Albums"] = "Fotoalben";
|
||||
$a->strings["Contact Photos"] = "Kontaktbilder";
|
||||
$a->strings["Contact information unavailable"] = "Kontakt Informationen nicht verfügbar";
|
||||
$a->strings["Album not found."] = "Album nicht gefunden.";
|
||||
$a->strings["Delete Album"] = "Album löschen";
|
||||
$a->strings["Delete Photo"] = "Foto löschen";
|
||||
$a->strings["was tagged in a"] = "was tagged in a";
|
||||
$a->strings["photo"] = "Foto";
|
||||
$a->strings["by"] = "von";
|
||||
$a->strings["Image exceeds size limit of "] = "Die Bildgröße übersteigt das Limit von ";
|
||||
$a->strings["No photos selected"] = "Keine Bilder ausgewählt";
|
||||
$a->strings["Upload Photos"] = "Bilder hochladen";
|
||||
$a->strings["New album name: "] = "Name des neuen Albums: ";
|
||||
$a->strings["or existing album name: "] = "oder existierender Albumname: ";
|
||||
$a->strings["Permissions"] = "Berechtigungen";
|
||||
$a->strings["Edit Album"] = "Album bearbeiten";
|
||||
$a->strings["View Photo"] = "Fotos betrachten";
|
||||
$a->strings["Photo not available"] = "Foto nicht verfügbar";
|
||||
$a->strings["Edit photo"] = "Foto bearbeiten";
|
||||
$a->strings["Use as profile photo"] = "Als Profilbild verwenden";
|
||||
$a->strings["Private Message"] = "Private Nachricht";
|
||||
$a->strings["<< Prev"] = "<< Vorherige";
|
||||
$a->strings["View Full Size"] = "Betrachte Originalgröße";
|
||||
$a->strings["Next >>"] = "Nächste >>";
|
||||
$a->strings["Tags: "] = "Tags: ";
|
||||
$a->strings["[Remove any tag]"] = "[Tag entfernen]";
|
||||
$a->strings["New album name"] = "Name des neuen Albums";
|
||||
$a->strings["Caption"] = "Bildunterschrift";
|
||||
$a->strings["Add a Tag"] = "Tag hinzufügen";
|
||||
$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping";
|
||||
$a->strings["I like this (toggle)"] = "Ich mag das (toggle)";
|
||||
$a->strings["I don't like this (toggle)"] = "Ich mag das nicht (toggle)";
|
||||
$a->strings["Share"] = "Teilen";
|
||||
$a->strings["Please wait"] = "Bitte warten";
|
||||
$a->strings["This is you"] = "Das bist du";
|
||||
$a->strings["Delete"] = "Löschen";
|
||||
$a->strings["Recent Photos"] = "Neuste Fotos";
|
||||
$a->strings["Upload New Photos"] = "Weitere Fotos hochladen";
|
||||
$a->strings["View Album"] = "Album betrachten";
|
||||
$a->strings["Item not found."] = "Beitrag nicht gefunden.";
|
||||
$a->strings["Item has been removed."] = "Eintrag wurde entfernt.";
|
||||
$a->strings["Item not found"] = "Beitrag nicht gefunden";
|
||||
$a->strings["Edit post"] = "Beitrag bearbeiten";
|
||||
$a->strings["Visible to <strong>everybody</strong>"] = "Für <strong>Jedermann</strong> sichtbar";
|
||||
$a->strings["Post to Email"] = "An Email senden";
|
||||
$a->strings["Edit"] = "Bearbeiten";
|
||||
$a->strings["Upload photo"] = "Foto hochladen";
|
||||
$a->strings["Insert web link"] = "Weblink einfügen";
|
||||
$a->strings["Insert YouTube video"] = "YouTube Video einfügen";
|
||||
$a->strings["Insert Vorbis [.ogg] video"] = "Vorbis [.ogg] Video einfügen";
|
||||
$a->strings["Insert Vorbis [.ogg] audio"] = "Vorbis [.ogg] Audio einfügen";
|
||||
$a->strings["Set your location"] = "Deinen Standort festlegen";
|
||||
$a->strings["Clear browser location"] = "Browser Standort leeren";
|
||||
$a->strings["Permission settings"] = "Berechtigungseinstellungen";
|
||||
$a->strings["CC: email addresses"] = "CC: EMail Addresse";
|
||||
$a->strings["Example: bob@example.com, mary@example.com"] = "Z.B.: bob@example.com, mary@example.com";
|
||||
$a->strings["%s : Not a valid email address."] = "%s: Keine gültige Email Adresse.";
|
||||
$a->strings["Please join my network on %s"] = "Bitte trete meinem Netzwerk auf %s bei";
|
||||
$a->strings["%s : Message delivery failed."] = "%s: Zustellung der Nachricht fehlgeschlagen.";
|
||||
$a->strings["%d message sent."] = array(
|
||||
0 => "%d Nachricht gesendet.",
|
||||
1 => "%d Nachrichten gesendet.",
|
||||
);
|
||||
$a->strings["Send invitations"] = "Einladungen senden";
|
||||
$a->strings["Enter email addresses, one per line:"] = "Email Adressen eingeben, eine pro Zeile:";
|
||||
$a->strings["Your message:"] = "Deine Nachricht:";
|
||||
$a->strings["Please join my social network on %s"] = "Bitte trete meinem Sozialen Netzwerk auf %s bei";
|
||||
$a->strings["To accept this invitation, please visit:"] = "Um diese Einladung anzunehmen beuche bitte:";
|
||||
$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Sobald du registriert bist kontaktiere mich bitte auf meiner Profilseite:";
|
||||
$a->strings["Invite Friends"] = "Freunde einladen";
|
||||
$a->strings["Find People With Shared Interests"] = "Finde Personen die deine Interessen teilen";
|
||||
$a->strings["Connect/Follow"] = "Verbinden/Folgen";
|
||||
$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Beispiel: bob@example.com, http://example.com/barbara";
|
||||
$a->strings["Follow"] = "Folge";
|
||||
$a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen.";
|
||||
$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profiel nicht finden.";
|
||||
$a->strings["Contact updated."] = "Kontakt aktualisiert.";
|
||||
$a->strings["Failed to update contact record."] = "Aktualisierung der Kontaktdaten fehlgeschlagen.";
|
||||
$a->strings["Contact has been blocked"] = "Kontakt wurde blockiert";
|
||||
$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder frei gegeben";
|
||||
$a->strings["Contact has been ignored"] = "Der Kontakt wurde ignoriert";
|
||||
$a->strings["Contact has been unignored"] = "Kontakt wurde ignoriert";
|
||||
$a->strings["stopped following"] = "wird nicht mehr gefolgt";
|
||||
$a->strings["Contact has been removed."] = "Kontakt wurde entfernt.";
|
||||
$a->strings["Contact not found."] = "Kontakt nicht gefunden.";
|
||||
$a->strings["Mutual Friendship"] = "Beidseitige Freundschaft";
|
||||
$a->strings["is a fan of yours"] = "ist ein Fan von dir";
|
||||
$a->strings["you are a fan of"] = "du bist Fan von";
|
||||
$a->strings["Privacy Unavailable"] = "Privatsphäre nicht verfügbar";
|
||||
$a->strings["Private communications are not available for this contact."] = "Private Kommunikation ist für diesen Kontakt nicht verfügbar.";
|
||||
$a->strings["Never"] = "Niemals";
|
||||
$a->strings["(Update was successful)"] = "(Aktualisierung war erfolgreich)";
|
||||
$a->strings["(Update was not successful)"] = "(Aktualisierung war nicht erfolgreich)";
|
||||
$a->strings["Contact Editor"] = "Kontakt Editor";
|
||||
$a->strings["Profile Visibility"] = "Profil Anzeige";
|
||||
$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Bitte wähle eines deiner Profile das angezeitgt werden soll, wenn %s dein Profil aufruft.";
|
||||
$a->strings["Contact Information / Notes"] = "Kontakt Informationen / Notizen";
|
||||
$a->strings["Online Reputation"] = "Online Ruf";
|
||||
$a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = "Es könnte sein, dass deine Freunde etwas über den Ruf einer Peron erfahren möchten.";
|
||||
$a->strings["You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them."] = "Du kannst ihnen bei der Entscheidung helfen ob sie mit einer Person interagieren sollten oder nicht indem du Informationen über den <em>Ruf</em> der Person anbietest.";
|
||||
$a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = "Bitte nimm dir einen Moment und fülle diesen Punkt aus wenn du denkst das es anderen helfen könnte.";
|
||||
$a->strings["Visit \$name's profile"] = "Besuche das Profil von \$name";
|
||||
$a->strings["Block/Unblock contact"] = "Kontakt blockieren/freischalten";
|
||||
$a->strings["Ignore contact"] = "Ignoriere den Kontakt";
|
||||
$a->strings["Repair contact URL settings"] = "URL Einstellungen des Kontakts reparieren";
|
||||
$a->strings["Repair contact URL settings (WARNING: Advanced)"] = "URL Einstellungen des Kontakts reparieren (Achtung: Fortgeschritten)";
|
||||
$a->strings["View conversations"] = "Unterhaltungen anzeigen";
|
||||
$a->strings["Delete contact"] = "Lösche den Kontakt";
|
||||
$a->strings["Last updated: "] = "Letzte Aktualisierung: ";
|
||||
$a->strings["Update public posts: "] = "Aktualisierung öffentlicher Nachrichten: ";
|
||||
$a->strings["Update now"] = "Jetzt aktualisieren";
|
||||
$a->strings["Unblock this contact"] = "Blockade dieses Kontakts aufheben";
|
||||
$a->strings["Block this contact"] = "Diesen Kontakt blockieren";
|
||||
$a->strings["Unignore this contact"] = "Diesen Kontakt nicht mehr ignorieren";
|
||||
$a->strings["Ignore this contact"] = "Diesen Kontakt ignorieren";
|
||||
$a->strings["Currently blocked"] = "Derzeit geblockt";
|
||||
$a->strings["Currently ignored"] = "Derzeit ignoriert";
|
||||
$a->strings["Contacts"] = "Kontakte";
|
||||
$a->strings["Show Blocked Connections"] = "Zeige geblockte Verbindungen";
|
||||
$a->strings["Hide Blocked Connections"] = "Verstecke geblockte Verbindungen";
|
||||
$a->strings["Finding: "] = "Funde: ";
|
||||
$a->strings["Find"] = "Finde";
|
||||
$a->strings["Visit \$username's profile"] = "Besuche das Profil von \$username";
|
||||
$a->strings["Edit contact"] = "Kontakt bearbeiten";
|
||||
$a->strings["Remote privacy information not available."] = "Entfernte Privatsphäreneinstellungen nicht verfügbar.";
|
||||
$a->strings["Visible to:"] = "Sichtbar für:";
|
||||
$a->strings["Invalid OpenID url"] = "Ungültige OpenID URL";
|
||||
$a->strings["Please enter the required information."] = "Bitte trage die erforderlichen Informationen ein.";
|
||||
$a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Namen.";
|
||||
$a->strings["Name too short."] = "Der Name ist zu kurz.";
|
||||
$a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein.";
|
||||
$a->strings["Your email domain is not among those allowed on this site."] = "Die Domain deiner EMail Adresse ist nicht erlaubt auf dieser Seite.";
|
||||
$a->strings["Not a valid email address."] = "Keine gültige EMail Adresse.";
|
||||
$a->strings["Cannot use that email."] = "Konnte diese EMail Adresse nicht verwenden.";
|
||||
$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen.";
|
||||
$a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
|
||||
$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "SERIOUS ERROR: Generation of security keys failed.";
|
||||
$a->strings["An error occurred during registration. Please try again."] = "Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
|
||||
$a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standard-Profils ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
|
||||
$a->strings["Registration successful. Please check your email for further instructions."] = "Registration erfolgreich. Eine EMail mit weiteren Anweisungen wurde an dich gesendet.";
|
||||
$a->strings["Failed to send email message. Here is the message that failed."] = "Konnte die EMail nicht versenden. Hier ist die Nachricht die nicht gesendet werden konnte.";
|
||||
$a->strings["Your registration can not be processed."] = "Deine Registration konnte nicht verarbeitet werden.";
|
||||
$a->strings["Registration request at %s"] = "Registrationsanfrage auf %s";
|
||||
$a->strings["Your registration is pending approval by the site owner."] = "Deine Registration muss noch vom Betreiber der Seite freigegeben werden.";
|
||||
$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Du kannst dieses Formular auch (optional) mit deiner OpenID ausfüllen indem du deine OpenID angibst und 'Registrieren' klickst.";
|
||||
$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Wenn du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus.";
|
||||
$a->strings["Your OpenID (optional): "] = "Deine OpenID (optional): ";
|
||||
$a->strings["Include your profile in member directory?"] = "Soll dein Profil im Nutzerverzeichnis angezeigt werden?";
|
||||
$a->strings["Registration"] = "Registration";
|
||||
$a->strings["Your Full Name (e.g. Joe Smith): "] = "Vollständiger Name (z.B. Joe Smith): ";
|
||||
$a->strings["Your Email Address: "] = "Deine EMail Adresse: ";
|
||||
$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@\$sitename</strong>'."] = "Wähle einen Spitznamen für dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse deines Profils auf dieser Seite wird '<strong>spitzname@\$sitename</strong>' sein.";
|
||||
$a->strings["Choose a nickname: "] = "Spitznamen wählen: ";
|
||||
$a->strings["Post successful."] = "Erfolgreich gesendet.";
|
||||
$a->strings["Help:"] = "Hilfe:";
|
||||
$a->strings["Help"] = "Hilfe";
|
||||
$a->strings["Could not create/connect to database."] = "Konnte die Verbindung zur Datenbank nicht aufbauen bzw. die Datenbank anlegen.";
|
||||
$a->strings["Connected to database."] = "Mit der Datenbank verbunden.";
|
||||
$a->strings["Proceed with Installation"] = "Mit der Installation fortfahren";
|
||||
$a->strings["Your Friendika site database has been installed."] = "Die Datenbank deiner Friendika Seite wurde erfolgreich installiert.";
|
||||
$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen cron Job (o.ä.) für den Poller einrichten.";
|
||||
$a->strings["Please see the file \"INSTALL.txt\"."] = "Lies bitte die \"INSTALL.txt\".";
|
||||
$a->strings["Proceed to registration"] = "Mit der Registration fortfahren";
|
||||
$a->strings["Database import failed."] = "Import der Datenbank schlug fehl.";
|
||||
$a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = "Möglicherweise musst du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren.";
|
||||
$a->strings["Welcome to Friendika."] = "Willkommen bei Friendika.";
|
||||
$a->strings["Friendika Social Network"] = "Friendika Soziales Netzwerk";
|
||||
$a->strings["Installation"] = "Installation";
|
||||
$a->strings["In order to install Friendika we need to know how to contact your database."] = "Um Friendika installieren zu können müssen wir wissen, wie wir die Datenbank erreichen können.";
|
||||
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite falls du Fragen zu diesen Einstellungen haben solltest.";
|
||||
$a->strings["The database you specify below must already exist. If it does not, please create it before continuing."] = "Die Datenbank die du hier angibst muss bereits existieren. Wenn dies noch nicht der Fall ist lege sie bitte an bevor du fortfährst.";
|
||||
$a->strings["Database Server Name"] = "Datenbank Server";
|
||||
$a->strings["Database Login Name"] = "Datenbank Nutzer";
|
||||
$a->strings["Database Login Password"] = "Datenbank Passwort";
|
||||
$a->strings["Database Name"] = "Datenbank Name";
|
||||
$a->strings["Please select a default timezone for your website"] = "Bitte wähle die standard Zeitzone deiner Webseite";
|
||||
$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden.";
|
||||
$a->strings["This is required. Please adjust the configuration file .htconfig.php accordingly."] = "Diese wird von Friendika benötigt. Bitte passe die Konfigurationsdatei .htconfig.php entsprechend an.";
|
||||
$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Die Kommandozeilenversion von PHP auf deinem System hat \"register_argc_argv\" nicht aktiviert.";
|
||||
$a->strings["This is required for message delivery to work."] = "Dies wird für die Auslieferung von Nachrichten benötigt.";
|
||||
$a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Fehler: Die \"openssl_pkey_new\" Funktion auf diesem System ist nicht in der lage Verschlüsselungsschlüssel zu erzeugen";
|
||||
$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Wenn der Server unter Windows läuft, schau dir bitte \"http://www.php.net/manual/en/openssl.installation.php\" an.";
|
||||
$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Fehler: Das Apache Modul mod-rewrite wird benötigt, es ist allerdings nicht installiert.";
|
||||
$a->strings["Error: libCURL PHP module required but not installed."] = "Fehler: Das libCURL PHP Modul wird benötigt ist aber nicht installiert.";
|
||||
$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Fehler: Das GD Graphikmodul für PHP mit JPEG Unterstützung ist nicht installiert.";
|
||||
$a->strings["Error: openssl PHP module required but not installed."] = "Fehler: Das openssl Modul von PHP ist nict installiert.";
|
||||
$a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: Das mysqli Modul von PHP ist nicht installiert.";
|
||||
$a->strings["The web installer needs to be able to create a file called \".htconfig.php\ in the top folder of your web server and it is unable to do so."] = "Der Installationswizzard muss in der Lage sein eine Datei im Stammverzeichnis deines Webservers anzuliegen ist allerdings derzeit nicht in der Lage dies zu tun.";
|
||||
$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "In den meisten Fällen ist dies ein Problem mit den Schreibrechten, der Webserver könnte keine Schreiberlaubnis haben, selbst wenn du sie hast.";
|
||||
$a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support Team um diese Situations zu beheben.";
|
||||
$a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Sollte dies nicht möglich sein musst du die Installation manuell durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\".";
|
||||
$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner Friendika Installation zu erzeugen.";
|
||||
$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen.";
|
||||
$a->strings["Normal View"] = "Normale Ansicht";
|
||||
$a->strings["New Item View"] = "Neue Einträge";
|
||||
$a->strings["%d member"] = array(
|
||||
0 => "%d Mitglied",
|
||||
1 => "%d Mitglieder",
|
||||
);
|
||||
$a->strings["Warning: This group contains %s from an insecure network."] = "Warnung: Diese Gruppe beinhaltet %s aus einem unsicheren Netzwerk.";
|
||||
$a->strings["Private messages to this group are at risk of public disclosure."] = "Private Nachrichten an diese Gruppe könnten an die Öffentlichkeit geraten.";
|
||||
$a->strings["No such group"] = "Es gibt keine solche Gruppe";
|
||||
$a->strings["Group is empty"] = "Gruppe ist leer";
|
||||
$a->strings["Group: "] = "Gruppe: ";
|
||||
$a->strings["Contact: "] = "Kontakt ";
|
||||
$a->strings["Private messages to this person are at risk of public disclosure."] = "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen.";
|
||||
$a->strings["Invalid contact."] = "Ungültiger Kontakt.";
|
||||
$a->strings["Invalid profile identifier."] = "Ungültiger Profil-Bezeichner";
|
||||
$a->strings["Profile Visibility Editor"] = "Editor für die Profil-Sichtbarkeit";
|
||||
$a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an um ihn hinzuzufügen oder zu entfernen";
|
||||
$a->strings["Visible To"] = "Sichtbar für";
|
||||
$a->strings["All Contacts (with secure profile access)"] = "Alle Kontakte (mit gesichertem Profil zugriff)";
|
||||
$a->strings["Invalid request identifier."] = "Invalid request identifier.";
|
||||
$a->strings["Discard"] = "Verwerfen";
|
||||
$a->strings["Ignore"] = "Ignorieren";
|
||||
$a->strings["Pending Friend/Connect Notifications"] = "Anstehende Freundschafts/Kontakt Benachrichtigungen";
|
||||
$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
|
||||
$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
|
||||
$a->strings["Claims to be known to you: "] = "Behauptet dich zu kennen: ";
|
||||
$a->strings["yes"] = "ja";
|
||||
$a->strings["no"] = "nein";
|
||||
$a->strings["Approve as: "] = "Genehmigen als: ";
|
||||
$a->strings["Friend"] = "Freund";
|
||||
$a->strings["Fan/Admirer"] = "Fan/Verehrer";
|
||||
$a->strings["Notification type: "] = "Benachrichtigungs Typ: ";
|
||||
$a->strings["Friend/Connect Request"] = "Kontakt-/Freundschaftsanfrage";
|
||||
$a->strings["New Follower"] = "Neuer Bewunderer";
|
||||
$a->strings["Approve"] = "Genehmigen";
|
||||
$a->strings["No notifications."] = "Keine Benachrichtigungen.";
|
||||
$a->strings["User registrations waiting for confirm"] = "Neuanmeldungen die auf deine Bestätigung warten";
|
||||
$a->strings["Deny"] = "Verwehren";
|
||||
$a->strings["No registrations."] = "Keine Neuanmeldungen.";
|
||||
$a->strings["Contact settings applied."] = "Einstellungen zum Kontakt angewandt.";
|
||||
$a->strings["Contact update failed."] = "Konnte den Kontakt nicht aktualisieren.";
|
||||
$a->strings["Repair Contact Settings"] = "Kontakt Einstellungen reparieren";
|
||||
$a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working."] = "<strong>Warnung: Nur für erfahrene Nutzer</strong> sollten hier fehlerhafte Informationen eingetragen werden wirst du nicht mehr in der Lage sein mit diesem Kontakt zu kommunizieren.";
|
||||
$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "Bitte nutze den Zurück-Button deines Browsers <strong>jetzt</strong> wenn du dir unsicher bist was auf dieser Seite gemacht wird.";
|
||||
$a->strings["Name"] = "Name";
|
||||
$a->strings["Account Nickname"] = "Account Spitzname";
|
||||
$a->strings["Account URL"] = "Account URL";
|
||||
$a->strings["Friend Request URL"] = "URL für Freundschaftsanfragen";
|
||||
$a->strings["Friend Confirm URL"] = "URL für Bestätigungen von Freundschaftsanfragen";
|
||||
$a->strings["Notification Endpoint URL"] = "URL Endpunkt für Benachrichtigungen";
|
||||
$a->strings["Poll/Feed URL"] = "Pull/Feed URL";
|
||||
$a->strings["This introduction has already been accepted."] = "Diese Vorstellung wurde bereits abgeschlossen.";
|
||||
$a->strings["Profile location is not valid or does not contain profile information."] = "Profil Adresse ist ungültig oder stellt einige Profildaten nicht zur Verfügung.";
|
||||
$a->strings["Warning: profile location has no identifiable owner name."] = "Warning: profile location has no identifiable owner name.";
|
||||
$a->strings["Warning: profile location has no profile photo."] = "Warning: profile location has no profile photo.";
|
||||
$a->strings["%d required parameter was not found at the given location"] = array(
|
||||
0 => "",
|
||||
1 => "",
|
||||
);
|
||||
$a->strings["Introduction complete."] = "Vorstellung abgeschlossen.";
|
||||
$a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler.";
|
||||
$a->strings["Profile unavailable."] = "Profil nicht verfügbar.";
|
||||
$a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Freundschaftsanfragen erhalten.";
|
||||
$a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen.";
|
||||
$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten es in 24 Stunden erneut zu versuchen.";
|
||||
$a->strings["Invalid locator"] = "Ungültiger Locator";
|
||||
$a->strings["Unable to resolve your name at the provided location."] = "Unable to resolve your name at the provided location.";
|
||||
$a->strings["You have already introduced yourself here."] = "Du hast dich hier bereits vorgestellt.";
|
||||
$a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob du bereits ein Freund von %s bist.";
|
||||
$a->strings["Invalid profile URL."] = "Ungültige Profil URL.";
|
||||
$a->strings["Your introduction has been sent."] = "Deine Vorstellung wurde abgeschickt.";
|
||||
$a->strings["Please login to confirm introduction."] = "Bitte melde dich an um die Vorstellung zu bestätigen.";
|
||||
$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Incorrect identity currently logged in. Please login to <strong>this</strong> profile.";
|
||||
$a->strings["Welcome home %s."] = "Willkommen zurück %s.";
|
||||
$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige deine Vorstellung/Verbindungs Anfrage bei %s.";
|
||||
$a->strings["Confirm"] = "Bestätigen";
|
||||
$a->strings["[Name Withheld]"] = "[Name Zurückgehalten]";
|
||||
$a->strings["Introduction received at "] = "Vorstellung erhalten auf";
|
||||
$a->strings["Friend/Connection Request"] = "Freundschafts/Kontakt Anfrage";
|
||||
$a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca";
|
||||
$a->strings["Please answer the following:"] = "Bitte beantworte folgende Fragen:";
|
||||
$a->strings["Does \$name know you?"] = "Kennt \$name dich?";
|
||||
$a->strings["Add a personal note:"] = "Eine persönliche Notiz anfügen:";
|
||||
$a->strings["Please enter your 'Identity Address' from one of the following supported social networks:"] = "Bitte gib die Adresse deiner Identität in einem der unterstützten sozialen Netzwerke an:";
|
||||
$a->strings["Friendika"] = "Friendika";
|
||||
$a->strings["StatusNet/Federated Social Web"] = "StatusNet/Federated Social Web";
|
||||
$a->strings["Private (secure) network"] = "Privates (sicheres) Netzwerk";
|
||||
$a->strings["Public (insecure) network"] = "Öffentliches (unsicheres) Netzwerk";
|
||||
$a->strings["Your Identity Address:"] = "Adresse deiner Identität";
|
||||
$a->strings["Submit Request"] = "Anfrage abschicken";
|
||||
$a->strings["Cancel"] = "Abbrechen";
|
||||
$a->strings["status"] = "Status";
|
||||
$a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s mag %2\$s's %3\$s";
|
||||
$a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s mag %2\$s's %3\$s nicht";
|
||||
$a->strings["Password reset request issued. Check your email."] = "Zurücksetzen des Passworts eingeleitet. Bitte überprüfe deine Email.";
|
||||
$a->strings["Password reset requested at %s"] = "Anfrage zum Zurücksetzen des Passworts auf %s erhalten";
|
||||
$a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Anfrage konnte nicht verifiziert werden. (Eventuell hast du bereits ähnliche Anfrage gestellt.) Zurücksetzen des Passworts gescheitert.";
|
||||
$a->strings["Your password has been reset as requested."] = "Dein Passwort wurde wie gewünscht zurück gesetzt.";
|
||||
$a->strings["Your new password is"] = "Dein neues Passwort lautet";
|
||||
$a->strings["Save or copy your new password - and then"] = "Speichere oder kopiere dein neues Passwort - und dann";
|
||||
$a->strings["click here to login"] = "hier klicken um dich anzumelden";
|
||||
$a->strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "Du kannst das Passwort unter den <em>Einstellungen</em> ändern sobald du dich erfolgreich angemeldet hast.";
|
||||
$a->strings["Forgot your Password?"] = "Hast du dein Passwort vergessen?";
|
||||
$a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Gib deine Email-Adresse an und fordere ein neues Passwort an. Es werden dir dann weitere Informationen per Mail zugesand.";
|
||||
$a->strings["Nickname or Email: "] = "Spitzname oder Email:";
|
||||
$a->strings["Reset"] = "Zurücksetzen";
|
||||
$a->strings["Remove My Account"] = "Account löschen";
|
||||
$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Dies wird deinen Account endgültig löschen. Es gibt keine Möglichkeit ihn wiederherzustellen.";
|
||||
$a->strings["Please enter your password for verification:"] = "Bitte gib dein Passwort zur Verifikation ein:";
|
||||
$a->strings["Applications"] = "Anwendungen";
|
||||
$a->strings["Global Directory"] = "Weltweites Verzeichnis";
|
||||
$a->strings["Site Directory"] = "Verzeichnis";
|
||||
$a->strings["Gender: "] = "Geschlecht:";
|
||||
$a->strings["No entries (some entries may be hidden)."] = "Keine Einträge (einige Einträge könnten versteckt sein).";
|
||||
$a->strings["This is Friendika version"] = "Dies ist Friendika Version";
|
||||
$a->strings["running at web location"] = "die unter folgender Webadresse zu finden ist";
|
||||
$a->strings["Shared content within the Friendika network is provided under the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0 license</a>"] = "Geteilte Inhalte innerhalb des Friendika Netzwerks sind unter der <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0 license</a> verfügbar";
|
||||
$a->strings["Please visit <a href=\"http://project.friendika.com\">Project.Friendika.com</a> to learn more about the Friendika project."] = "Bitte besuche <a href=\"http://project.friendika.com\">Project.Friendika.com</a> um mehr über Friendika zu erfahren.";
|
||||
$a->strings["Bug reports and issues: please visit"] = "Probleme oder Fehler gefunden? Bitte besuche";
|
||||
$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = "Vorschläge, Lobeshymnen, Spenden usw. - bitte eine Email an \"Info\" at Friendika - dot com (englisch bevorzugt)";
|
||||
$a->strings["Installed plugins/addons/apps"] = "Installierte Plugins/Erweiterungen/Apps";
|
||||
$a->strings["No installed plugins/addons/apps"] = "Keine Plugins/Erweiterungen/Apps installiert";
|
||||
$a->strings["Unable to locate original post."] = "Konnte das original Posting nicht finden.";
|
||||
$a->strings["Empty post discarded."] = "Leere Nachricht wurde verworfen.";
|
||||
$a->strings["%s commented on your item at %s"] = "%s hat einen deiner Beiträge auf %s kommentiert";
|
||||
$a->strings["%s posted on your profile wall at %s"] = "%s hat etwas auf deiner Pinnwand bei %s gepostet";
|
||||
$a->strings["System error. Post not saved."] = "Systemfehler. Nachricht konnte nicht gespeichert werden.";
|
||||
$a->strings["This message was sent to you by %s, a member of the Friendika social network."] = "Diese Nachricht wurde dir von %s gesendet, einem Mitglied des Sozialen Netzwerks Friendika";
|
||||
$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen";
|
||||
$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Please contact the sender by replying to this post if you do not wish to receive these messages.";
|
||||
$a->strings["%s posted an update."] = "%s hat ein Update gepostet.";
|
||||
$a->strings["Tag removed"] = "Tag entfernt";
|
||||
$a->strings["Remove Item Tag"] = "Gegenstands Tag entfernen";
|
||||
$a->strings["Select a tag to remove: "] = "Wähle ein Tag zum Entfernen aus: ";
|
||||
$a->strings["Remove"] = "Entfernen";
|
||||
$a->strings["No recipient selected."] = "Kein Empfänger gewählt.";
|
||||
$a->strings["[no subject]"] = "[kein Betreff]";
|
||||
$a->strings["Unable to locate contact information."] = "Konnte die Kontaktinformationen nicht finden.";
|
||||
$a->strings["Message sent."] = "Nachricht gesendet.";
|
||||
$a->strings["Message could not be sent."] = "Nachricht konnte nicht gesendet werden.";
|
||||
$a->strings["Messages"] = "Nachrichten";
|
||||
$a->strings["Inbox"] = "Eingang";
|
||||
$a->strings["Outbox"] = "Ausgang";
|
||||
$a->strings["New Message"] = "Neue Nachricht";
|
||||
$a->strings["Message deleted."] = "Nachricht gelöscht.";
|
||||
$a->strings["Conversation removed."] = "Unterhaltung gelöscht.";
|
||||
$a->strings["Please enter a link URL:"] = "Bitte gib die URL des Links ein:";
|
||||
$a->strings["Send Private Message"] = "Private Nachricht senden";
|
||||
$a->strings["To:"] = "An:";
|
||||
$a->strings["Subject:"] = "Betreff:";
|
||||
$a->strings["No messages."] = "Keine Nachrichten.";
|
||||
$a->strings["Delete conversation"] = "Unterhaltung löschen";
|
||||
$a->strings["D, d M Y - g:i A"] = "D, d. M Y - g:i A";
|
||||
$a->strings["Message not available."] = "Nachricht nicht verfügbar.";
|
||||
$a->strings["Delete message"] = "Nachricht löschen";
|
||||
$a->strings["Send Reply"] = "Antwort senden";
|
||||
$a->strings["Response from remote site was not understood."] = "Antwort der entfernten Gegenstelle unverständlich.";
|
||||
$a->strings["Unexpected response from remote site: "] = "Unerwartete Antwort der Gegenstelle: ";
|
||||
$a->strings["Confirmation completed successfully."] = "Bestätigung erfolgreich abgeschlossen.";
|
||||
$a->strings["Remote site reported: "] = "Entfernte Seite meldet: ";
|
||||
$a->strings["Temporary failure. Please wait and try again."] = "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal.";
|
||||
$a->strings["Introduction failed or was revoked."] = "Vorstellung schlug fehl oder wurde zurück gezogen.";
|
||||
$a->strings["Unable to set contact photo."] = "Konnte das Bild des Kontakts nicht speichern.";
|
||||
$a->strings["%1\$s is now friends with %2\$s"] = "%1\$s ist nun mit %2\$s befreundet";
|
||||
$a->strings["No user record found for '%s' "] = "Für '%s' wurde kein Nutzer gefunden";
|
||||
$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsslungsschlüssel unserer Seite ist anscheinend im Arsch.";
|
||||
$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden.";
|
||||
$a->strings["Contact record was not found for you on our site."] = "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden.";
|
||||
$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "Die ID die uns dein System angeboten hat ist hier bereits vergeben. Bitte versuche es noch einmal.";
|
||||
$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserm System gespeichert werden.";
|
||||
$a->strings["Unable to update your contact profile details on our system"] = "Die Updates für dein Profil konnten nicht gespeichert werden";
|
||||
$a->strings["Connection accepted at %s"] = "Auf %s wurde die Verbindung akzeptiert";
|
||||
$a->strings["Login failed."] = "Annmeldung fehlgeschlagen.";
|
||||
$a->strings["Welcome "] = "Willkommen ";
|
||||
$a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch.";
|
||||
$a->strings["Welcome back "] = "Willkommen zurück ";
|
||||
$a->strings["%s welcomes %s"] = "%s heißt %s herzlich willkommen";
|
||||
$a->strings["No contacts."] = "Keine Kontakte.";
|
||||
$a->strings["Group created."] = "Gruppe erstellt.";
|
||||
$a->strings["Could not create group."] = "Konnte die Gruppe nicht erstellen.";
|
||||
$a->strings["Group not found."] = "Gruppe nicht gefunden.";
|
||||
$a->strings["Group name changed."] = "Gruppenname geändert.";
|
||||
$a->strings["Create a group of contacts/friends."] = "Eine Gruppe von Kontakten/Freunden anlegen.";
|
||||
$a->strings["Group Name: "] = "Gruppen Name:";
|
||||
$a->strings["Group removed."] = "Gruppe entfernt.";
|
||||
$a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen.";
|
||||
$a->strings["Group Editor"] = "Gruppen Editor";
|
||||
$a->strings["Members"] = "Mitglieder";
|
||||
$a->strings["All Contacts"] = "Alle Kontakte";
|
||||
$a->strings["Profile Match"] = "Profil Übereinstimmungen";
|
||||
$a->strings["No matches"] = "Keine Übereinstimmungen";
|
||||
$a->strings["Post to Twitter"] = "Nach Twitter senden";
|
||||
$a->strings["Twitter Posting Settings"] = "Twitter Posting Einstellungen";
|
||||
$a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite.";
|
||||
$a->strings["At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "Auf dieser Friendika Instanz wurde das Twitter Plugin aktiviert dein Account ist allerdings noch nicht mit einem Twitter Account verbunden. Um deinen Account mit Twitter zu verbinden, klick auf den Button weiter unten und gib die PIN die du auf Twitter erhälst hier ein. Es werden ausschließlich deine <strong>öffentlichen</strong> Nachrichten auf Twitter veröffentlicht.";
|
||||
$a->strings["Log in with Twitter"] = "bei Twitter anmelden";
|
||||
$a->strings["Copy the PIN from Twitter here"] = "Kopiere die Twitter PIN hier her";
|
||||
$a->strings["Currently connected to: "] = "Momentan verbunden mit: ";
|
||||
$a->strings["If enabled all your <strong>public</strong> postings will be posted to the associated Twitter account as well."] = "Wenn dies aktiviert ist, werden alle deine <strong>öffentlichen</strong> Nachricten auch auf dem verbundenen Twitter Account veröffentlicht.";
|
||||
$a->strings["Send public postings to Twitter"] = "Veröffentliche öffentliche Nachrichten auf Twitter";
|
||||
$a->strings["Clear OAuth configuration"] = "OAuth Konfiguration löschen";
|
||||
$a->strings["Post to StatusNet"] = "Nach StatusNet senden";
|
||||
$a->strings["StatusNet Posting Settings"] = "StatusNet Posting Einstellungen";
|
||||
$a->strings["No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation."] = "Kein OAuth Consumer Schlüsselpaar für StatusNet gefunden. Registriere deinen Friendika Account als Desktopapplikation und trage hier den OAuth Consumer Schlüssel, das Geheimnis und die Basis-URL der StatusNet API ein.<br />Bevor du eine neue Anwendung registrierst, kannst du auch erstmal den Admin deiner Friendika Seite fragen, ob es für deine bevorzugte StatusNet Instanz eventuell bereits ein OAuth Schlüsselpaar gibt.";
|
||||
$a->strings["OAuth Consumer Key"] = "OAuth Consumer Schlüssel";
|
||||
$a->strings["OAuth Consumer Secret"] = "OAuth Consumer Geheimnis";
|
||||
$a->strings["Base API Path (remember the trailing /)"] = "Basis-URL der StatusNet API (vergiss den abschließenden / nicht)";
|
||||
$a->strings["To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to StatusNet."] = "Um deinen Account mit einem StatusNet Account zu verknüpfen klicke den Button an um einen Sicherheitscode von StatusNet zu erhalten und kopiere diesen in die Eingabebox weiter unten. Es werden ausschließlich deine <strong>öffentlichen</strong> Nachrichten bei StatusNet veröffentllicht.";
|
||||
$a->strings["Log in with StatusNet"] = "Bei StatusNet anmelden";
|
||||
$a->strings["Copy the security code from StatusNet here"] = "Kopiere den Sicherheitscode von StatusNet hier her";
|
||||
$a->strings["If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account as well."] = "Wenn dies aktiviert ist, werden alle deine <strong>öffentlichen</strong> Nachricten auch auf dem verbundenen StatusNet Account veröffentlicht.";
|
||||
$a->strings["Send public postings to StatusNet"] = "Veröffentliche öffentliche Nachrichten auf StatusNet";
|
||||
$a->strings["Three Dimensional Tic-Tac-Toe"] = "Dreidimensionales Tic-Tac-Toe";
|
||||
$a->strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe";
|
||||
$a->strings["New game"] = "Neues Spiel";
|
||||
$a->strings["New game with handicap"] = "Neues Handicap Spiel";
|
||||
$a->strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "Drei dimensionales Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur das man es auf mehreren Ebenen gleichzeitig spielt.";
|
||||
$a->strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "In diesem Fall sind es drei Ebenen. Man gewinnt indem man drei in einer Reihe auf einer beliebigen Reihe schafft, oder drei übereinander oder diagonal auf verschiedenen Ebenen.";
|
||||
$a->strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "Beim Handicap-Spiel wird die zentrale Position der mittleren Ebene gesperrt da der Spieler der diese Ebene besitzt oft einen unfairen Vorteil genießt.";
|
||||
$a->strings["You go first..."] = "Du fängst an...";
|
||||
$a->strings["I'm going first this time..."] = "Diesmal fange ich an...";
|
||||
$a->strings["You won!"] = "Du gewinnst!";
|
||||
$a->strings["\"Cat\" game!"] = "Unentschieden!";
|
||||
$a->strings["I won!"] = "Ich gewinne!";
|
||||
$a->strings["Select files to upload: "] = "Wähle Dateien zum Upload aus: ";
|
||||
$a->strings["Use the following controls only if the Java uploader [above] fails to launch."] = "Verwende die folgenden Kontrollen nur, wenn der Java Uploader [oben] nicht funktioniert.";
|
||||
$a->strings["Facebook disabled"] = "Facebook deaktiviert";
|
||||
$a->strings["Updating contacts"] = "Aktualisiere Kontakte";
|
||||
$a->strings["Facebook API key is missing."] = "Facebook API Schlüssel nicht gefunden";
|
||||
$a->strings["Facebook Connect"] = "Mit Facebook verbinden";
|
||||
$a->strings["Install Facebook connector for this account."] = "Facebook Connector für diesen Account installieren.";
|
||||
$a->strings["Remove Facebook connector"] = "Facebook Connector entfernen";
|
||||
$a->strings["Post to Facebook by default"] = "Sende standardmäßig nach Facebook";
|
||||
$a->strings["Facebook"] = "Facebook";
|
||||
$a->strings["Facebook Connector Settings"] = "Facebook Verbindungseinstellungen";
|
||||
$a->strings["Post to Facebook"] = "Zu Facebook posten";
|
||||
$a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = "Das Senden nach Facebook wurde zurückgezogen da Konflikte bei den Multi-Netzwerks-Rechten vorliegen.";
|
||||
$a->strings["Image: "] = "Bild";
|
||||
$a->strings["View on Friendika"] = "Auf Friendika ansehen";
|
||||
$a->strings["Randplace Settings"] = "Randplace Einstellungen";
|
||||
$a->strings["Enable Randplace Plugin"] = "Randplace Erweiterung aktivieren";
|
||||
$a->strings["Upload a file"] = "Datei hochladen";
|
||||
$a->strings["Drop files here to upload"] = "Ziehe die Dateien hier her die du hochladen willst";
|
||||
$a->strings["Failed"] = "Fehlgeschlagen";
|
||||
$a->strings["No files were uploaded."] = "Keine Dateien hochgeladen.";
|
||||
$a->strings["Uploaded file is empty"] = "Hochgeladene Datei ist leer";
|
||||
$a->strings["Uploaded file is too large"] = "Hochgeladene Datei ist zu groß";
|
||||
$a->strings["File has an invalid extension, it should be one of "] = "Die Dateiextension ist nicht erlaubt, sie muss eine der folgenden sein ";
|
||||
$a->strings["Upload was cancelled, or server error encountered"] = "Upload abgebrochen oder Serverfehler aufgetreten";
|
||||
$a->strings["(no subject)"] = "(kein Betreff)";
|
||||
$a->strings["Unknown | Not categorised"] = "Unbekannt | Nicht kategorisiert";
|
||||
$a->strings["Block immediately"] = "Sofort blockieren";
|
||||
$a->strings["Shady, spammer, self-marketer"] = "Zwielichtig, Spammer, Selbstdarsteller";
|
||||
$a->strings["Known to me, but no opinion"] = "Ist mir bekannt, hab aber keine Meinung";
|
||||
$a->strings["OK, probably harmless"] = "OK, wahrscheinlich harmlos";
|
||||
$a->strings["Reputable, has my trust"] = "Seriös, hat mein Vertrauen";
|
||||
$a->strings["Frequently"] = "Häufig";
|
||||
$a->strings["Hourly"] = "Stündlich";
|
||||
$a->strings["Twice daily"] = "Zweimal Täglich";
|
||||
$a->strings["Daily"] = "Täglich";
|
||||
$a->strings["Weekly"] = "Wöchendlich";
|
||||
$a->strings["Monthly"] = "Monatlich";
|
||||
$a->strings["Male"] = "Männlich";
|
||||
$a->strings["Female"] = "Weiblich";
|
||||
$a->strings["Currently Male"] = "Momentan Männlich";
|
||||
$a->strings["Currently Female"] = "Momentan Weiblich";
|
||||
$a->strings["Mostly Male"] = "Hauptsächlich Männlich";
|
||||
$a->strings["Mostly Female"] = "Hauptsächlich Weiblich";
|
||||
$a->strings["Transgender"] = "Transgender";
|
||||
$a->strings["Intersex"] = "Intersex";
|
||||
$a->strings["Transsexual"] = "Transsexuel";
|
||||
$a->strings["Hermaphrodite"] = "Hermaphrodit";
|
||||
$a->strings["Neuter"] = "Neuter";
|
||||
$a->strings["Non-specific"] = "Nicht spezifiziert";
|
||||
$a->strings["Other"] = "Andere";
|
||||
$a->strings["Undecided"] = "Unentschieden";
|
||||
$a->strings["Males"] = "Männer";
|
||||
$a->strings["Females"] = "Frauen";
|
||||
$a->strings["Gay"] = "Schwul";
|
||||
$a->strings["Lesbian"] = "Lesbisch";
|
||||
$a->strings["No Preference"] = "Keine Vorlieben";
|
||||
$a->strings["Bisexual"] = "Bisexuel";
|
||||
$a->strings["Autosexual"] = "Autosexual";
|
||||
$a->strings["Abstinent"] = "Abstinent";
|
||||
$a->strings["Virgin"] = "Jungfrau";
|
||||
$a->strings["Deviant"] = "Deviant";
|
||||
$a->strings["Fetish"] = "Fetish";
|
||||
$a->strings["Oodles"] = "Oodles";
|
||||
$a->strings["Nonsexual"] = "Nonsexual";
|
||||
$a->strings["Single"] = "Single";
|
||||
$a->strings["Lonely"] = "Einsam";
|
||||
$a->strings["Available"] = "Verfügbar";
|
||||
$a->strings["Unavailable"] = "Nicht verfügbar";
|
||||
$a->strings["Dating"] = "Dating";
|
||||
$a->strings["Unfaithful"] = "Untreu";
|
||||
$a->strings["Sex Addict"] = "Sex Besessen";
|
||||
$a->strings["Friends"] = "Freunde";
|
||||
$a->strings["Friends/Benefits"] = "Friends/Benefits";
|
||||
$a->strings["Casual"] = "Casual";
|
||||
$a->strings["Engaged"] = "Verlobt";
|
||||
$a->strings["Married"] = "Verheiratet";
|
||||
$a->strings["Partners"] = "Partner";
|
||||
$a->strings["Cohabiting"] = "kohabitierend";
|
||||
$a->strings["Happy"] = "Glücklich";
|
||||
$a->strings["Not Looking"] = "Nicht auf der Suche";
|
||||
$a->strings["Swinger"] = "Swinger";
|
||||
$a->strings["Betrayed"] = "Betrogen";
|
||||
$a->strings["Separated"] = "Getrennt";
|
||||
$a->strings["Unstable"] = "Unstabil";
|
||||
$a->strings["Divorced"] = "Geschieden";
|
||||
$a->strings["Widowed"] = "Verwidwet";
|
||||
$a->strings["Uncertain"] = "Unsicher";
|
||||
$a->strings["Complicated"] = "Kompliziert";
|
||||
$a->strings["Don't care"] = "Ist mir nicht wichtig";
|
||||
$a->strings["Ask me"] = "Frag mich";
|
||||
$a->strings["Visible To:"] = "Sichtbar für:";
|
||||
$a->strings["Groups"] = "Gruppen";
|
||||
$a->strings["Except For:"] = "Abgesehen von:";
|
||||
$a->strings["Logged out."] = "Abgemeldet.";
|
||||
$a->strings["Image/photo"] = "Bild/Foto";
|
||||
$a->strings["Miscellaneous"] = "Verschiedenes";
|
||||
$a->strings["less than a second ago"] = "vor weniger als einer Sekunde";
|
||||
$a->strings["year"] = "Jahr";
|
||||
$a->strings["years"] = "Jahre";
|
||||
$a->strings["month"] = "Monat";
|
||||
$a->strings["months"] = "Monate";
|
||||
$a->strings["week"] = "Woche";
|
||||
$a->strings["weeks"] = "Wochen";
|
||||
$a->strings["day"] = "Tag";
|
||||
$a->strings["hour"] = "Stunde";
|
||||
$a->strings["hours"] = "Stunden";
|
||||
$a->strings["minute"] = "Minute";
|
||||
$a->strings["minutes"] = "Minuten";
|
||||
$a->strings["second"] = "Sekunde";
|
||||
$a->strings["seconds"] = "Sekunden";
|
||||
$a->strings[" ago"] = " her";
|
||||
$a->strings["Birthday:"] = "Geburtstag:";
|
||||
$a->strings["j F, Y"] = "j F, Y";
|
||||
$a->strings["j F"] = "j F";
|
||||
$a->strings["Age:"] = "Alter:";
|
||||
$a->strings["<span class=\"heart\">♥</span> Status:"] = "<span class=\"heart\">♥</span> Bezieungsstatus:";
|
||||
$a->strings["Religion:"] = "Religion:";
|
||||
$a->strings["About:"] = "Über:";
|
||||
$a->strings["Hobbies/Interests:"] = "Hobbies/Interessen:";
|
||||
$a->strings["Contact information and Social Networks:"] = "Kontaktinformationen und Soziale Netzwerke:";
|
||||
$a->strings["Musical interests:"] = "Musikalische Interessen:";
|
||||
$a->strings["Books, literature:"] = "Literatur/Bücher:";
|
||||
$a->strings["Television:"] = "Fernsehen:";
|
||||
$a->strings["Film/dance/culture/entertainment:"] = "Filme/Tänze/Kultur/Unterhaltung:";
|
||||
$a->strings["Love/Romance:"] = "Liebesleben:";
|
||||
$a->strings["Work/employment:"] = "Arbeit/Beschäftigung:";
|
||||
$a->strings["School/education:"] = "Schule/Ausbildung:";
|
||||
$a->strings["Home"] = "Persönlich";
|
||||
$a->strings["Apps"] = "Apps";
|
||||
$a->strings["Directory"] = "Verzeichnis";
|
||||
$a->strings["Network"] = "Netzwerk";
|
||||
$a->strings["Notifications"] = "Benachrichtigungen";
|
||||
$a->strings["Manage"] = "Verwalten";
|
||||
$a->strings["Settings"] = "Einstellungen";
|
||||
$a->strings["View %s's profile"] = "Betrachte %s's Profil";
|
||||
$a->strings["View in context"] = "Im Zusammenhang betrachten";
|
||||
$a->strings["See more posts like this"] = "Mehr Beiträge wie diesen anzeigen";
|
||||
$a->strings["See all %d comments"] = "Alle %d Kommentare anzeigen";
|
||||
$a->strings["to"] = "to";
|
||||
$a->strings["Wall-to-Wall"] = "Wall-to-Wall";
|
||||
$a->strings["via Wall-To-Wall:"] = "via Wall-To-Wall:";
|
||||
$a->strings["View status"] = "Status anzeigen";
|
||||
$a->strings["View profile"] = "Profil anzeigen";
|
||||
$a->strings["View photos"] = "Fotos ansehen";
|
||||
$a->strings["View recent"] = "Jüngste anzeigen";
|
||||
$a->strings["Send PM"] = "Private Nachricht senden";
|
||||
$a->strings["%s likes this."] = "%s mag dies.";
|
||||
$a->strings["%s doesn't like this."] = "%s mag dies nicht.";
|
||||
$a->strings["<span %1\$s>%2\$d people</span> like this."] = "<span %1\$s>%2\$d Personen</span> mögen dies.";
|
||||
$a->strings["<span %1\$s>%2\$d people</span> don't like this."] = "<span %1\$s>%2\$d Personen</span> mögen dies nicht.";
|
||||
$a->strings["and"] = "und";
|
||||
$a->strings[", and %d other people"] = " und %d andere";
|
||||
$a->strings["%s like this."] = "%s mag dies.";
|
||||
$a->strings["%s don't like this."] = "%s mag dies nicht.";
|
||||
$a->strings["Please enter a YouTube link:"] = "Bitte gebe den YouTube Link ein:";
|
||||
$a->strings["Please enter a video(.ogg) link/URL:"] = "Bitte gebe den Link zum Video(.ogg) an:";
|
||||
$a->strings["Please enter an audio(.ogg) link/URL:"] = "Bitte gebe den Link zum Audio(.ogg) an:";
|
||||
$a->strings["Where are you right now?"] = "Wo hälst du dich jetzt gerade auf?";
|
||||
$a->strings["Enter a title for this item"] = "Gib den Titel für diesen Beitrag ein";
|
||||
$a->strings["Set title"] = "Titel setzen";
|
||||
$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbanken Server '%s' nicht ermitteln.";
|
||||
$a->strings["You have a new follower at "] = "Du hast einen neuen Kontakt auf ";
|
||||
$a->strings["Create a new group"] = "Neue Gruppe erstellen";
|
||||
$a->strings["Everybody"] = "Alle Kontakte";
|
||||
$a->strings["Embedding disabled"] = "Einbettungen deaktiviert";
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
|
||||
<p id="dfrn-request-homecoming" >
|
||||
Welcome home $username.
|
||||
$welcome
|
||||
<br />
|
||||
Please confirm your introduction to $dfrn_url.
|
||||
$please
|
||||
|
||||
</p>
|
||||
<form id="dfrn-request-homecoming-form" action="dfrn_request/$nickname" method="post">
|
||||
|
|
@ -12,6 +12,6 @@ Please confirm your introduction to $dfrn_url.
|
|||
$aes_allow
|
||||
|
||||
<div id="dfrn-request-homecoming-submit-wrapper" >
|
||||
<input id="dfrn-request-homecoming-submit" type="submit" name="submit" value="Confirm" />
|
||||
<input id="dfrn-request-homecoming-submit" type="submit" name="submit" value="$submit" />
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -7,6 +7,7 @@ $page_desc<br />
|
|||
<li><a href="http://friendika.com" title="$private_net">$friendika</a> <img src="images/lock_icon.gif" alt="$private_net" title="$private_net" /></li>
|
||||
<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a> <img src="images/unlock_icon.gif" alt="$public_net" title="$public_net"/></li>
|
||||
</ul>
|
||||
$desc
|
||||
</p>
|
||||
|
||||
<form action="dfrn_request/$nickname" method="post" />
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
<h1>Elenco del Sito</h1>
|
||||
<h1>$sitedir</h1>
|
||||
|
||||
$globaldir
|
||||
$admin
|
||||
|
||||
$finding
|
||||
|
||||
<div id="directory-search-wrapper">
|
||||
<form id="directory-search-form" action="directory" method="get" >
|
||||
<input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="$search" />
|
||||
<input type="submit" name="submit" id="directory-search-submit" value="Trova" />
|
||||
<input type="submit" name="submit" id="directory-search-submit" value="$submit" />
|
||||
</form>
|
||||
</div>
|
||||
<div id="directory-search-end"></div>
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
<h1>Site Directory</h1>
|
||||
|
||||
$globaldir
|
||||
|
||||
$finding
|
||||
|
||||
<div id="directory-search-wrapper">
|
||||
<form id="directory-search-form" action="directory" method="get" >
|
||||
<input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="$search" />
|
||||
<input type="submit" name="submit" id="directory-search-submit" value="Find" />
|
||||
</form>
|
||||
</div>
|
||||
<div id="directory-search-end"></div>
|
||||
|
||||
|
|
@ -37,7 +37,7 @@ $a->config['admin_email'] = '';
|
|||
|
||||
// Maximum size of an imported message, 0 is unlimited
|
||||
|
||||
$a->config['max_import_size'] = 10000;
|
||||
$a->config['max_import_size'] = 200000;
|
||||
|
||||
// maximum size of uploaded photos
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
<div id="profile-edit-insecure">
|
||||
<p>
|
||||
The social network that $name belongs to is an open network with limited or non-existent privacy controls.
|
||||
Please use appropriate discretion.
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
|
||||
<h3>Friendika Social Network</h3>
|
||||
<h3>Installation</h3>
|
||||
|
||||
<p>
|
||||
In order to install Friendika we need to know how to contact your database. Please contact your hosting provider or site administrator if you have questions about these settings. The database you specify below must already exist. If it does not, please create it before continuing.
|
||||
</p>
|
||||
|
||||
<form id="install-form" action="$baseurl/install" method="post">
|
||||
|
||||
<input type="hidden" name="phpath" value="$phpath" />
|
||||
|
||||
<label for="install-dbhost" id="install-dbhost-label">Database Server Name</label>
|
||||
<input type="text" name="dbhost" id="install-dbhost" value="$dbhost" />
|
||||
<div id="install-dbhost-end"></div>
|
||||
|
||||
<label for="install-dbuser" id="install-dbuser-label">Database Login Name</label>
|
||||
<input type="text" name="dbuser" id="install-dbuser" value="$dbuser" />
|
||||
<div id="install-dbuser-end"></div>
|
||||
|
||||
<label for="install-dbpass" id="install-dbpass-label">Database Login Password</label>
|
||||
<input type="password" name="dbpass" id="install-dbpass" value="$dbpass" />
|
||||
<div id="install-dbpass-end"></div>
|
||||
|
||||
<label for="install-dbdata" id="install-dbdata-label">Database Name</label>
|
||||
<input type="text" name="dbdata" id="install-dbdata" value="$dbdata" />
|
||||
<div id="install-dbdata-end"></div>
|
||||
|
||||
<div id="install-tz-desc">
|
||||
Please select a default timezone for your website
|
||||
</div>
|
||||
|
||||
$tzselect
|
||||
|
||||
<div id="install-tz-end" ></div>
|
||||
<input id="install-submit" type="submit" name="submit" value="$submit" />
|
||||
|
||||
</form>
|
||||
<div id="install-end" ></div>
|
||||
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<h1>Pending Friend/Connect Notifications</h1>
|
||||
|
||||
<div id="notification-show-hide-wrapper" >
|
||||
<a href="$hide_url" id="notification-show-hide-link">$hide_text</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
<h3>Forgot your Password?</h3>
|
||||
|
||||
<p id="lostpass-desc">
|
||||
Enter your email address and submit to have your password reset. Then check your email for further instructions.
|
||||
</p>
|
||||
|
||||
<form action="lostpass" method="post" >
|
||||
<div id="login-name-wrapper">
|
||||
<label for="login-name" id="label-login-name">Nickname or Email: </label>
|
||||
<input type="text" maxlength="60" name="login-name" id="login-name" value="" />
|
||||
</div>
|
||||
<div id="login-extra-end"></div>
|
||||
<div id="login-submit-wrapper" >
|
||||
<input type="submit" name="submit" id="lostpass-submit-button" value="Reset" />
|
||||
</div>
|
||||
<div id="login-submit-end"></div>
|
||||
</form>
|
||||
|
||||
|
|
@ -1,104 +0,0 @@
|
|||
|
||||
<script language="javascript" type="text/javascript" src="$baseurl/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>
|
||||
<script language="javascript" type="text/javascript">
|
||||
|
||||
tinyMCE.init({
|
||||
theme : "advanced",
|
||||
mode : "specific_textareas",
|
||||
editor_selector: /(profile-jot-text|prvmail-text)/,
|
||||
plugins : "bbcode,paste",
|
||||
theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor",
|
||||
theme_advanced_buttons2 : "",
|
||||
theme_advanced_buttons3 : "",
|
||||
theme_advanced_toolbar_location : "top",
|
||||
theme_advanced_toolbar_align : "center",
|
||||
theme_advanced_blockformats : "blockquote,code",
|
||||
paste_text_sticky : true,
|
||||
entity_encoding : "raw",
|
||||
add_unload_trigger : false,
|
||||
remove_linebreaks : false,
|
||||
force_p_newlines : false,
|
||||
force_br_newlines : true,
|
||||
forced_root_block : '',
|
||||
convert_urls: false,
|
||||
content_css: "$baseurl/view/custom_tinymce.css",
|
||||
//Character count
|
||||
theme_advanced_path : false,
|
||||
setup : function(ed) {
|
||||
ed.onKeyUp.add(function(ed, e) {
|
||||
var txt = tinyMCE.activeEditor.getContent();
|
||||
var text = txt.length;
|
||||
if(txt.length <= 140) {
|
||||
$('#character-counter').removeClass('red');
|
||||
$('#character-counter').removeClass('orange');
|
||||
$('#character-counter').addClass('grey');
|
||||
}
|
||||
if((txt.length > 140) && (txt .length <= 420)) {
|
||||
$('#character-counter').removeClass('grey');
|
||||
$('#character-counter').removeClass('red');
|
||||
$('#character-counter').addClass('orange');
|
||||
}
|
||||
if(txt.length > 420) {
|
||||
$('#character-counter').removeClass('grey');
|
||||
$('#character-counter').removeClass('orange');
|
||||
$('#character-counter').addClass('red');
|
||||
}
|
||||
$('#character-counter').text(text);
|
||||
});
|
||||
|
||||
ed.onInit.add(function(ed) {
|
||||
ed.pasteAsPlainText = true;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" src="include/ajaxupload.js" ></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var uploader = new window.AjaxUpload(
|
||||
'prvmail-upload',
|
||||
{ action: 'wall_upload/$nickname',
|
||||
name: 'userfile',
|
||||
onSubmit: function(file,ext) { $('#profile-rotator').show(); },
|
||||
onComplete: function(file,response) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,response);
|
||||
$('#profile-rotator').hide();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
function jotGetLink() {
|
||||
reply = prompt("Please enter a link URL:");
|
||||
if(reply && reply.length) {
|
||||
$('#profile-rotator').show();
|
||||
$.get('parse_url?url=' + reply, function(data) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,data);
|
||||
$('#profile-rotator').hide();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function linkdropper(event) {
|
||||
var linkFound = event.dataTransfer.types.contains("text/uri-list");
|
||||
if(linkFound)
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
function linkdrop(event) {
|
||||
var reply = event.dataTransfer.getData("text/uri-list");
|
||||
event.target.textContent = reply;
|
||||
event.preventDefault();
|
||||
if(reply && reply.length) {
|
||||
$('#profile-rotator').show();
|
||||
$.get('parse_url?url=' + reply, function(data) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,data);
|
||||
$('#profile-rotator').hide();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<p id="profile-in-directory">
|
||||
Publish your default profile in site directory?
|
||||
</p>
|
||||
|
||||
<div id="profile-in-dir-yes-wrapper">
|
||||
<label id="profile-in-dir-yes-label" for="profile-in-dir-yes">Yes</label>
|
||||
<input type="radio" name="profile_in_directory" id="profile-in-dir-yes" $yes_selected value="1" />
|
||||
|
||||
<div id="profile-in-dir-break" ></div>
|
||||
</div>
|
||||
<div id="profile-in-dir-no-wrapper">
|
||||
<label id="profile-in-dir-no-label" for="profile-in-dir-no">No</label>
|
||||
<input type="radio" name="profile_in_directory" id="profile-in-dir-no" $no_selected value="0" />
|
||||
|
||||
<div id="profile-in-dir-end"></div>
|
||||
</div>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<p id="profile-in-directory">
|
||||
Publish your default profile in global social directory?
|
||||
</p>
|
||||
|
||||
<div id="profile-in-netdir-yes-wrapper">
|
||||
<label id="profile-in-netdir-yes-label" for="profile-in-netdir-yes">Yes</label>
|
||||
<input type="radio" name="profile_in_netdirectory" id="profile-in-netdir-yes" $yes_selected value="1" />
|
||||
|
||||
<div id="profile-in-netdir-break" ></div>
|
||||
</div>
|
||||
<div id="profile-in-netdir-no-wrapper">
|
||||
<label id="profile-in-netdir-no-label" for="profile-in-netdir-no">No</label>
|
||||
<input type="radio" name="profile_in_netdirectory" id="profile-in-netdir-no" $no_selected value="0" />
|
||||
|
||||
<div id="profile-in-netdir-end"></div>
|
||||
</div>
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
<!DOCTYPE html ><?php // This is a perfect example of why I prefer to use template files rather than mixed PHP/HTML ?>
|
||||
<html>
|
||||
<head>
|
||||
<title><?php if(x($page,'title')) echo $page['title']; ?></title>
|
||||
<?php if(x($page,'htmlhead')) echo $page['htmlhead']; ?>
|
||||
</head>
|
||||
<body>
|
||||
<header><?php if(x($page,'header')) echo $page['header']; ?></header>
|
||||
<nav><div id="top-margin"></div><?php if(x($page,'nav')) echo $page['nav']; ?></nav>
|
||||
<aside>
|
||||
<?php if((is_array($profile)) && count($profile)) { ?>
|
||||
<div class="vcard">
|
||||
<?php if(strlen($profile['name'])) { ?>
|
||||
<div class="fn"><?php echo $profile['name']; ?></div>
|
||||
<?php } ?>
|
||||
|
||||
<?php if(strlen($profile['photo'])) { ?>
|
||||
<div id="profile-photo-wrapper"><img class="photo" src="<?php echo $profile['photo']; ?>" alt="<?php echo $profile['name']; ?>" /></div>
|
||||
<?php } ?>
|
||||
|
||||
<div id="profile-extra-links">
|
||||
<ul>
|
||||
<?php if($profile['uid'] != $_SESSION['uid']) { ?>
|
||||
<li><a id="dfrn-request-link" href="dfrn_request/<?php echo $profile['nickname']; ?>">Connect</a></li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if ( (strlen($profile['address']))
|
||||
|| (strlen($profile['locality']))
|
||||
|| (strlen($profile['region']))
|
||||
|| (strlen($profile['postal-code']))
|
||||
|| (strlen($profile['country-name']))) { ?>
|
||||
<div class="location">Location:
|
||||
<div class="adr">
|
||||
<div class="street-address"><?php if(strlen($profile['address'])) echo $profile['address']; ?></div>
|
||||
<span class="city-state-zip"><span class="locality"><?php echo $profile['locality']; ?></span><?php if(strlen($profile['locality'])) echo ', '; ?><span class="region"><?php echo $profile['region'] ?></span><?php if(strlen($profile['postal-code'])) { ?> <span class="postal-code"><?php echo $profile['postal-code']; ?></span><?php } ?></span>
|
||||
<span class="country-name"><?php echo $profile['country-name']; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php if(strlen($profile['gender'])) { ?>
|
||||
<div class="mf">Gender: <span class="x-gender"><?php echo $profile['gender']; ?></span></div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php if(strlen($profile['pubkey'])) { ?>
|
||||
<div class="key" style="display: none;"><?php echo $profile['pubkey']; ?></div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if(strlen($profile['marital'])) { ?>
|
||||
<div class="marital"><span class="marital-label"><span class="heart">♥</span> Status: </span><span class="marital-text"><?php echo $profile['marital']; ?></span></div>
|
||||
<?php } ?>
|
||||
<?php if(strlen($profile['homepage'])) { ?>
|
||||
<div class="homepage"><span class="homepage-label">Homepage: </span><span class="homepage-url"><?php echo linkify($profile['homepage']); ?></span></div>
|
||||
<?php } ?>
|
||||
<?php if(x($page,'aside')) echo $page['aside'] ?>
|
||||
</aside>
|
||||
<section>
|
||||
<?php if(x($page,'content')) echo $page['content']; ?>
|
||||
<div id="page-footer"></div>
|
||||
</section>
|
||||
<footer>
|
||||
<?php if(x($page,'footer')) echo $page['footer']; ?>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
@ -1,225 +0,0 @@
|
|||
<?php
|
||||
|
||||
$o .= '';
|
||||
|
||||
$o .= <<< EOT
|
||||
|
||||
<h2>Profile</h2>
|
||||
|
||||
|
||||
EOT;
|
||||
|
||||
if($a->profile['name']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-name-wrapper" >
|
||||
<div id="advanced-profile-name-text">Full Name:</div>
|
||||
<div id="advanced-profile-name">{$a->profile['name']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-name-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['gender']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-gender-wrapper" >
|
||||
<div id="advanced-profile-gender-text">Gender:</div>
|
||||
<div id="advanced-profile-gender">{$a->profile['gender']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-gender-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if(($a->profile['dob']) && ($a->profile['dob'] != '0000-00-00')) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-dob-wrapper" >
|
||||
<div id="advanced-profile-dob-text">Birthday:</div>
|
||||
EOT;
|
||||
|
||||
// If no year, add an arbitrary one so just we can parse the month and day.
|
||||
|
||||
$o .= '<div id="advanced-profile-dob">'
|
||||
. ((intval($a->profile['dob']))
|
||||
? day_translate(datetime_convert('UTC','UTC',$a->profile['dob'] . ' 00:00 +00:00','j F, Y'))
|
||||
: day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],6) . ' 00:00 +00:00','j F')))
|
||||
. "</div>\r\n</div>";
|
||||
|
||||
$o .= '<div id="advanced-profile-dob-end"></div>';
|
||||
|
||||
}
|
||||
|
||||
if($age = age($a->profile['dob'],$a->profile['timezone'],'')) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-age-wrapper" >
|
||||
<div id="advanced-profile-age-text">Age:</div>
|
||||
<div id="advanced-profile-age">$age</div>
|
||||
</div>
|
||||
<div id="advanced-profile-age-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['marital']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-marital-wrapper" >
|
||||
<div id="advanced-profile-marital-text"><span class="heart">♥</span> Status:</div>
|
||||
<div id="advanced-profile-marital">{$a->profile['marital']}</div>
|
||||
EOT;
|
||||
|
||||
if($a->profile['with'])
|
||||
$o .= "<div id=\"advanced-profile-with\">({$a->profile['with']})</div>";
|
||||
$o .= <<< EOT
|
||||
</div>
|
||||
<div id="advanced-profile-marital-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['sexual']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-sexual-wrapper" >
|
||||
<div id="advanced-profile-sexual-text">Sexual Preference:</div>
|
||||
<div id="advanced-profile-sexual">{$a->profile['sexual']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-sexual-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['homepage']) {
|
||||
$homepage = linkify($a->profile['homepage']);
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-homepage-wrapper" >
|
||||
<div id="advanced-profile-homepage-text">Homepage:</div>
|
||||
<div id="advanced-profile-homepage">$homepage</div>
|
||||
</div>
|
||||
<div id="advanced-profile-homepage-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['politic']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-politic-wrapper" >
|
||||
<div id="advanced-profile-politic-text">Political Views:</div>
|
||||
<div id="advanced-profile-politic">{$a->profile['politic']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-politic-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($a->profile['religion']) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-religion-wrapper" >
|
||||
<div id="advanced-profile-religion-text">Religion:</div>
|
||||
<div id="advanced-profile-religion">{$a->profile['religion']}</div>
|
||||
</div>
|
||||
<div id="advanced-profile-religion-end"></div>
|
||||
EOT;
|
||||
}
|
||||
if($txt = prepare_text($a->profile['about'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-about-wrapper" >
|
||||
<div id="advanced-profile-about-text">About:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-about">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-about-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['interest'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-interest-wrapper" >
|
||||
<div id="advanced-profile-interest-text">Hobbies/Interests:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-interest">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-interest-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['contact'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-contact-wrapper" >
|
||||
<div id="advanced-profile-contact-text">Contact information and Social Networks:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-contact">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-contact-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['music'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-music-wrapper" >
|
||||
<div id="advanced-profile-music-text">Musical interests:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-music">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-music-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['book'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-book-wrapper" >
|
||||
<div id="advanced-profile-book-text">Books, literature:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-book">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-book-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['tv'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-tv-wrapper" >
|
||||
<div id="advanced-profile-tv-text">Television:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-tv">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-tv-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['film'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-film-wrapper" >
|
||||
<div id="advanced-profile-film-text">Film/dance/culture/entertainment:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-film">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-film-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['romance'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-romance-wrapper" >
|
||||
<div id="advanced-profile-romance-text">Love/romance:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-romance">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-romance-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['work'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-work-wrapper" >
|
||||
<div id="advanced-profile-work-text">Work/employment:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-work">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-work-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
if($txt = prepare_text($a->profile['education'])) {
|
||||
$o .= <<< EOT
|
||||
<div id="advanced-profile-education-wrapper" >
|
||||
<div id="advanced-profile-education-text">School/education:</div>
|
||||
<br />
|
||||
<div id="advanced-profile-education">$txt</div>
|
||||
</div>
|
||||
<div id="advanced-profile-education-end"></div>
|
||||
EOT;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,293 +0,0 @@
|
|||
<h1>Edit Profile Details</h1>
|
||||
|
||||
<div id="profile-edit-links">
|
||||
<ul>
|
||||
<li><a href="profile/$profile_id/view?tab=profile" id="profile-edit-view-link" title="View this profile">View this profile</a></li>
|
||||
<li><a href="profiles/clone/$profile_id" id="profile-edit-clone-link" title="Create a new profile using these settings">Clone this profile</a></li>
|
||||
<li></li>
|
||||
<li><a href="profiles/drop/$profile_id" id="profile-edit-drop-link" title="Delete this profile" $disabled >Delete this profile</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="profile-edit-links-end"></div>
|
||||
|
||||
$default
|
||||
|
||||
<div id="profile-edit-wrapper" >
|
||||
<form id="profile-edit-form" name="form1" action="profiles/$profile_id" method="post" >
|
||||
|
||||
<div id="profile-edit-profile-name-wrapper" >
|
||||
<label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >Profile Name: </label>
|
||||
<input type="text" size="32" name="profile_name" id="profile-edit-profile-name" value="$profile_name" /><div class="required">*</div>
|
||||
</div>
|
||||
<div id="profile-edit-profile-name-end"></div>
|
||||
|
||||
<div id="profile-edit-name-wrapper" >
|
||||
<label id="profile-edit-name-label" for="profile-edit-name" >Your Full Name: </label>
|
||||
<input type="text" size="32" name="name" id="profile-edit-name" value="$name" />
|
||||
</div>
|
||||
<div id="profile-edit-name-end"></div>
|
||||
|
||||
<div id="profile-edit-pdesc-wrapper" >
|
||||
<label id="profile-edit-pdesc-label" for="profile-edit-pdesc" >Title/Description: </label>
|
||||
<input type="text" size="32" name="pdesc" id="profile-edit-pdesc" value="$pdesc" />
|
||||
</div>
|
||||
<div id="profile-edit-pdesc-end"></div>
|
||||
|
||||
|
||||
<div id="profile-edit-gender-wrapper" >
|
||||
<label id="profile-edit-gender-label" for="gender-select" >Your Gender: </label>
|
||||
$gender
|
||||
</div>
|
||||
<div id="profile-edit-gender-end"></div>
|
||||
|
||||
<div id="profile-edit-dob-wrapper" >
|
||||
<label id="profile-edit-dob-label" for="dob-select" >Birthday (y/m/d): </label>
|
||||
<div id="profile-edit-dob" >
|
||||
$dob $age
|
||||
</div>
|
||||
</div>
|
||||
<div id="profile-edit-dob-end"></div>
|
||||
|
||||
$hide_friends
|
||||
|
||||
<div class="profile-edit-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="profile-edit-submit-button" value="Submit" />
|
||||
</div>
|
||||
<div class="profile-edit-submit-end"></div>
|
||||
|
||||
|
||||
<div id="profile-edit-address-wrapper" >
|
||||
<label id="profile-edit-address-label" for="profile-edit-address" >Street Address: </label>
|
||||
<input type="text" size="32" name="address" id="profile-edit-address" value="$address" />
|
||||
</div>
|
||||
<div id="profile-edit-address-end"></div>
|
||||
|
||||
<div id="profile-edit-locality-wrapper" >
|
||||
<label id="profile-edit-locality-label" for="profile-edit-locality" >Locality/City: </label>
|
||||
<input type="text" size="32" name="locality" id="profile-edit-locality" value="$locality" />
|
||||
</div>
|
||||
<div id="profile-edit-locality-end"></div>
|
||||
|
||||
|
||||
<div id="profile-edit-postal-code-wrapper" >
|
||||
<label id="profile-edit-postal-code-label" for="profile-edit-postal-code" >Postal/Zip Code: </label>
|
||||
<input type="text" size="32" name="postal_code" id="profile-edit-postal-code" value="$postal_code" />
|
||||
</div>
|
||||
<div id="profile-edit-postal-code-end"></div>
|
||||
|
||||
<div id="profile-edit-country-name-wrapper" >
|
||||
<label id="profile-edit-country-name-label" for="profile-edit-country-name" >Country: </label>
|
||||
<select name="country_name" id="profile-edit-country-name" onChange="Fill_States('$region');">
|
||||
<option selected="selected" >$country_name</option>
|
||||
<option>temp</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="profile-edit-country-name-end"></div>
|
||||
|
||||
<div id="profile-edit-region-wrapper" >
|
||||
<label id="profile-edit-region-label" for="profile-edit-region" >Region/State: </label>
|
||||
<select name="region" id="profile-edit-region" onChange="Update_Globals();" >
|
||||
<option selected="selected" >$region</option>
|
||||
<option>temp</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="profile-edit-region-end"></div>
|
||||
|
||||
<div class="profile-edit-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="profile-edit-submit-button" value="Submit" />
|
||||
</div>
|
||||
<div class="profile-edit-submit-end"></div>
|
||||
|
||||
<div id="profile-edit-marital-wrapper" >
|
||||
<label id="profile-edit-marital-label" for="profile-edit-marital" ><span class="heart">♥</span> (Marital) Status: </label>
|
||||
$marital
|
||||
</div>
|
||||
<label id="profile-edit-with-label" for="profile-edit-with" > Who: (if applicable) </label>
|
||||
<input type="text" size="32" name="with" id="profile-edit-with" title="Examples: cathy123, Cathy Williams, cathy@example.com" value="$with" />
|
||||
<div id="profile-edit-marital-end"></div>
|
||||
|
||||
<div id="profile-edit-sexual-wrapper" >
|
||||
<label id="profile-edit-sexual-label" for="sexual-select" >Sexual Preference: </label>
|
||||
$sexual
|
||||
</div>
|
||||
<div id="profile-edit-sexual-end"></div>
|
||||
|
||||
|
||||
|
||||
<div id="profile-edit-homepage-wrapper" >
|
||||
<label id="profile-edit-homepage-label" for="profile-edit-homepage" >Homepage URL: </label>
|
||||
<input type="text" size="32" name="homepage" id="profile-edit-homepage" value="$homepage" />
|
||||
</div>
|
||||
<div id="profile-edit-homepage-end"></div>
|
||||
|
||||
<div id="profile-edit-politic-wrapper" >
|
||||
<label id="profile-edit-politic-label" for="profile-edit-politic" >Political Views: </label>
|
||||
<input type="text" size="32" name="politic" id="profile-edit-politic" value="$politic" />
|
||||
</div>
|
||||
<div id="profile-edit-politic-end"></div>
|
||||
|
||||
<div id="profile-edit-religion-wrapper" >
|
||||
<label id="profile-edit-religion-label" for="profile-edit-religion" >Religion: </label>
|
||||
<input type="text" size="32" name="religion" id="profile-edit-religion" value="$religion" />
|
||||
</div>
|
||||
<div id="profile-edit-religion-end"></div>
|
||||
|
||||
<div id="profile-edit-keywords-wrapper" >
|
||||
<label id="profile-edit-keywords-label" for="profile-edit-keywords" >Keywords: </label>
|
||||
<input type="text" size="32" name="keywords" id="profile-edit-keywords" title="Example: fishing photography software" value="$keywords" />
|
||||
</div><div id="profile-edit-keywords-desc">(Used for searching public profiles, never shown to others)</div>
|
||||
<div id="profile-edit-keywords-end"></div>
|
||||
|
||||
|
||||
<div class="profile-edit-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="profile-edit-submit-button" value="Submit" />
|
||||
</div>
|
||||
<div class="profile-edit-submit-end"></div>
|
||||
|
||||
<div id="about-jot-wrapper" >
|
||||
<p id="about-jot-desc" >
|
||||
Tell us about yourself...
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="profile-jot-text" name="about" >$about</textarea>
|
||||
|
||||
</div>
|
||||
<div id="about-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="interest-jot-wrapper" >
|
||||
<p id="interest-jot-desc" >
|
||||
Hobbies/Interests
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="interest-jot-text" name="interest" >$interest</textarea>
|
||||
|
||||
</div>
|
||||
<div id="interest-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="contact-jot-wrapper" >
|
||||
<p id="contact-jot-desc" >
|
||||
Contact information and Social Networks
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="contact-jot-text" name="contact" >$contact</textarea>
|
||||
|
||||
</div>
|
||||
<div id="contact-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="profile-edit-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="profile-edit-submit-button" value="Submit" />
|
||||
</div>
|
||||
<div class="profile-edit-submit-end"></div>
|
||||
|
||||
|
||||
<div id="music-jot-wrapper" >
|
||||
<p id="music-jot-desc" >
|
||||
Musical interests
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="music-jot-text" name="music" >$music</textarea>
|
||||
|
||||
</div>
|
||||
<div id="music-jot-end"></div>
|
||||
</div>
|
||||
|
||||
<div id="book-jot-wrapper" >
|
||||
<p id="book-jot-desc" >
|
||||
Books, literature
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="book-jot-text" name="book" >$book</textarea>
|
||||
|
||||
</div>
|
||||
<div id="book-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="tv-jot-wrapper" >
|
||||
<p id="tv-jot-desc" >
|
||||
Television
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="tv-jot-text" name="tv" >$tv</textarea>
|
||||
|
||||
</div>
|
||||
<div id="tv-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="film-jot-wrapper" >
|
||||
<p id="film-jot-desc" >
|
||||
Film/dance/culture/entertainment
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="film-jot-text" name="film" >$film</textarea>
|
||||
|
||||
</div>
|
||||
<div id="film-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="profile-edit-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="profile-edit-submit-button" value="Submit" />
|
||||
</div>
|
||||
<div class="profile-edit-submit-end"></div>
|
||||
|
||||
|
||||
<div id="romance-jot-wrapper" >
|
||||
<p id="romance-jot-desc" >
|
||||
Love/romance
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="romance-jot-text" name="romance" >$romance</textarea>
|
||||
|
||||
</div>
|
||||
<div id="romance-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="work-jot-wrapper" >
|
||||
<p id="work-jot-desc" >
|
||||
Work/employment
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="work-jot-text" name="work" >$work</textarea>
|
||||
|
||||
</div>
|
||||
<div id="work-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="education-jot-wrapper" >
|
||||
<p id="education-jot-desc" >
|
||||
School/education
|
||||
</p>
|
||||
|
||||
<textarea rows="10" cols="72" id="education-jot-text" name="education" >$education</textarea>
|
||||
|
||||
</div>
|
||||
<div id="education-jot-end"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="profile-edit-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="profile-edit-submit-button" value="Submit" />
|
||||
</div>
|
||||
<div class="profile-edit-submit-end"></div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">Fill_Country('$country_name');Fill_States('$region');</script>
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
|
||||
<div class="profile-listing" >
|
||||
<div class="profile-listing-photo-wrapper" >
|
||||
<a href="profiles/$id" class="profile-listing-edit-link" ><img class="profile-listing-photo" id="profile-listing-photo-$id" src="$photo" alt="Profile Image" /></a>
|
||||
</div>
|
||||
<div class="profile-listing-photo-end" ></div>
|
||||
<div class="profile-listing-name" id="profile-listing-name-$id"><a href="profiles/$id" class="profile-listing-edit-link" >$profile_name</a></div>
|
||||
</div>
|
||||
<div class="profile-listing-end"></div>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<h1>Profiles</h1>
|
||||
<p id="profile-listing-desc" >
|
||||
<a href="profile_photo" >Change profile photo</a>
|
||||
</p>
|
||||
<div id="profile-listing-new-link-wrapper" >
|
||||
<a href="profiles/new" id="profile-listing-new-link" name="Create New Profile" >Create New Profile</a>
|
||||
</div>
|
||||
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
<h1>Upload Profile Photo</h1>
|
||||
|
||||
<form enctype="multipart/form-data" action="profile_photo" method="post">
|
||||
|
||||
<div id="profile-photo-upload-wrapper">
|
||||
<label id="profile-photo-upload-label" for="profile-photo-upload">Upload File: </label>
|
||||
<input name="userfile" type="file" id="profile-photo-upload" size="48" />
|
||||
</div>
|
||||
|
||||
<div id="profile-photo-submit-wrapper">
|
||||
<input type="submit" name="submit" id="profile-photo-submit" value="Upload">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<div id="profile-photo-link-select-wrapper">
|
||||
or <a href='photos/$user'>select a photo from albums</a>
|
||||
</div>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
|
||||
<div id="profile-tabs-wrapper" >
|
||||
<a href="$url" id="profile-tab-status-link" class="profile-tabs" >Status</a>
|
||||
<a href="$url?tab=profile" id="profile-tab-profile-link" class="profile-tabs" >Profile</a>
|
||||
<a href="$phototab" id="profile-tab-photos-link" class="profile-tabs" >Photos</a>
|
||||
<div id="profile-tabs-end"></div>
|
||||
</div>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<h3>Password Reset</h3>
|
||||
|
||||
<p>
|
||||
Your password has been reset as requested.
|
||||
</p>
|
||||
<p>
|
||||
Your new password is
|
||||
</p>
|
||||
<p>
|
||||
$newpass
|
||||
</p>
|
||||
<p>
|
||||
Save or copy your new password - and then <a href="$baseurl" >click here to login</a>.
|
||||
</p>
|
||||
<p>
|
||||
Your password may be changed from the 'Settings' page after successful login.
|
||||
|
|
@ -11,7 +11,20 @@ Password: $password
|
|||
You may change your password from your account "Settings" page after logging
|
||||
in.
|
||||
|
||||
Please take a few moments to review the other account settings on that page.
|
||||
Please take a few moments to review the other account settings on that page.
|
||||
|
||||
You may also wish to add some basic information to your default profile
|
||||
(on the "Profiles" page) so that other people can easily find you.
|
||||
|
||||
We recommend setting your full name, adding a profile photo,
|
||||
adding some profile "keywords" (very useful in making new friends) - and
|
||||
perhaps what country you live in; if you do not wish to be more specific
|
||||
than that.
|
||||
|
||||
We fully respect your right to privacy, and none of these items are necessary.
|
||||
If you are new and do not know anybody here, they may help
|
||||
you to make some new and interesting friends.
|
||||
|
||||
|
||||
Thank you and welcome to $sitename.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
<h1>User registrations waiting for confirm</h1>
|
||||
|
||||
|
||||
|
|
@ -1 +0,0 @@
|
|||
<li>$fullname ($email) : <a href="$approvelink">Approve</a> - <a href="$denylink">Deny</a></li>
|
||||
|
|
@ -1,163 +0,0 @@
|
|||
<h1>Account Settings</h1>
|
||||
|
||||
<div id="plugin-settings-link"><a href="settings/addon">Plugin Settings</a></div>
|
||||
|
||||
$nickname_block
|
||||
|
||||
|
||||
<form action="settings" id="settings-form" method="post" autocomplete="off" >
|
||||
|
||||
|
||||
<h3 class="settings-heading">Basic Settings</h3>
|
||||
|
||||
<div id="settings-username-wrapper" >
|
||||
<label id="settings-username-label" for="settings-username" >Full Name: </label>
|
||||
<input type="text" name="username" id="settings-username" value="$username" />
|
||||
</div>
|
||||
<div id="settings-username-end" ></div>
|
||||
|
||||
<div id="settings-email-wrapper" >
|
||||
<label id="settings-email-label" for="settings-email" >Email Address: </label>
|
||||
<input type="text" name="email" id="settings-email" value="$email" />
|
||||
</div>
|
||||
<div id="settings-email-end" ></div>
|
||||
|
||||
|
||||
|
||||
<div id="settings-timezone-wrapper" >
|
||||
<label id="settings-timezone-label" for="timezone_select" >Your Timezone: </label>
|
||||
$zoneselect
|
||||
</div>
|
||||
<div id="settings-timezone-end" ></div>
|
||||
|
||||
<div id="settings-defloc-wrapper" >
|
||||
<label id="settings-defloc-label" for="settings-defloc" >Default Post Location: </label>
|
||||
<input type="text" name="defloc" id="settings-defloc" value="$defloc" />
|
||||
</div>
|
||||
<div id="settings-defloc-end" ></div>
|
||||
|
||||
<div id="settings-allowloc-wrapper" >
|
||||
<label id="settings-allowloc-label" for="settings-allowloc" >Use Browser Location: </label>
|
||||
<input type="checkbox" name="allow_location" id="settings-allowloc" value="1" $loc_checked />
|
||||
</div>
|
||||
<div id="settings-allowloc-end" ></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="settings-theme-select">
|
||||
<label id="settings-theme-label" for="theme-select" >Display Theme: </label>
|
||||
$theme
|
||||
</div>
|
||||
<div id="settings-theme-end"></div>
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
<h3 class="settings-heading">Security and Privacy Settings</h3>
|
||||
|
||||
|
||||
<input type="hidden" name="visibility" value="$visibility" />
|
||||
|
||||
<div id="settings-maxreq-wrapper">
|
||||
<label id="settings-maxreq-label" for="settings-maxreq" >Maximum Friend Requests/Day</label>
|
||||
<input id="settings-maxreq" name="maxreq" value="$maxreq" />
|
||||
<div id="settings-maxreq-desc">(to prevent spam abuse)</div>
|
||||
</div>
|
||||
<div id="settings-maxreq-end"></div>
|
||||
|
||||
|
||||
|
||||
|
||||
$profile_in_dir
|
||||
|
||||
$profile_in_net_dir
|
||||
|
||||
|
||||
|
||||
<div id="settings-default-perms" class="settings-default-perms" >
|
||||
<div id="settings-default-perms-menu" class="fakelink" onClick="openClose('settings-default-perms-select');" >⇩ $permissions</div>
|
||||
<div id="settings-default-perms-menu-end"></div>
|
||||
|
||||
<div id="settings-default-perms-select" style="display: none;" >
|
||||
|
||||
$aclselect
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="settings-default-perms-end"></div>
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<h3 class="settings-heading">Notification Settings</h3>
|
||||
|
||||
|
||||
<div id="settings-notify-wrapper">
|
||||
<div id="settings-notify-desc">Send a notification email when: </div>
|
||||
<label for="notify1" id="settings-label-notify1">You receive an introduction</label>
|
||||
<input id="notify1" type="checkbox" $sel_notify1 name="notify1" value="1" />
|
||||
<div id="notify1-end"></div>
|
||||
<label for="notify2" id="settings-label-notify2">Your introductions are confirmed</label>
|
||||
<input id="notify2" type="checkbox" $sel_notify2 name="notify2" value="2" />
|
||||
<div id="notify2-end"></div>
|
||||
<label for="notify3" id="settings-label-notify3">Someone writes on your profile wall</label>
|
||||
<input id="notify3" type="checkbox" $sel_notify3 name="notify3" value="4" />
|
||||
<div id="notify3-end"></div>
|
||||
<label for="notify4" id="settings-label-notify4">Someone writes a followup comment</label>
|
||||
<input id="notify4" type="checkbox" $sel_notify4 name="notify4" value="8" />
|
||||
<div id="notify4-end"></div>
|
||||
<label for="notify5" id="settings-label-notify5">You receive a private message</label>
|
||||
<input id="notify5" type="checkbox" $sel_notify5 name="notify5" value="16" />
|
||||
<div id="notify5-end"></div>
|
||||
</div>
|
||||
<div id="settings=notify-end"></div>
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
<h3 class="settings-heading">Password Settings</h3>
|
||||
|
||||
|
||||
<div id="settings-password-wrapper" >
|
||||
<p id="settings-password-desc" >
|
||||
Leave password fields blank unless changing
|
||||
</p>
|
||||
<label id="settings-password-label" for="settings-password" >New Password: </label>
|
||||
<input type="password" id="settings-password" name="npassword" />
|
||||
</div>
|
||||
<div id="settings-password-end" ></div>
|
||||
|
||||
<div id="settings-confirm-wrapper" >
|
||||
<label id="settings-confirm-label" for="settings-confirm" >Confirm: </label>
|
||||
<input type="password" id="settings-confirm" name="confirm" />
|
||||
</div>
|
||||
<div id="settings-confirm-end" ></div>
|
||||
|
||||
<div id="settings-openid-wrapper" >
|
||||
$oidhtml
|
||||
</div>
|
||||
<div id="settings-openid-end" ></div>
|
||||
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
<h3 class="settings-heading">Advanced Page Settings</h3>
|
||||
|
||||
$pagetype
|
||||
|
||||
<div class="settings-submit-wrapper" >
|
||||
<input type="submit" name="submit" class="settings-submit" value="Submit" />
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
|
||||
<div id="settings-nick-wrapper" >
|
||||
<p id="settings-nickname-desc">
|
||||
<span class="error-message">Your profile address is <strong>'$nickname@$basepath'</strong></span>
|
||||
</p>
|
||||
$subdir
|
||||
|
||||
</div>
|
||||
<div id="settings-nick-end" ></div>
|
||||