aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addon/statusnet/statusnet.php2
-rw-r--r--addon/tictac/tictac.php661
-rw-r--r--boot.php24
-rw-r--r--database.sql1
-rw-r--r--images/remote-link.gifbin0 -> 357 bytes
-rw-r--r--images/smiley-brokenheart.gifbin0 -> 616 bytes
-rw-r--r--include/items.php9
-rw-r--r--include/main.js9
-rw-r--r--include/nav.php4
-rw-r--r--include/oembed.php39
-rw-r--r--index.php12
-rw-r--r--mod/apps.php14
-rw-r--r--mod/display.php4
-rw-r--r--mod/follow.php42
-rw-r--r--mod/item.php29
-rw-r--r--mod/message.php43
-rw-r--r--mod/network.php37
-rw-r--r--mod/photos.php9
-rw-r--r--mod/profile.php11
-rw-r--r--mod/update_network.php2
-rw-r--r--simplepie/simplepie.inc1
-rw-r--r--tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gifbin11794 -> 11827 bytes
-rw-r--r--update.php4
-rw-r--r--util/string_translator.php12
-rw-r--r--util/strings.php42
-rw-r--r--view/comment_item.tpl1
-rw-r--r--view/de/mail_received_html_body_eml.tpl4
-rw-r--r--view/de/msg-header.tpl14
-rw-r--r--view/de/strings.php49
-rw-r--r--view/de/wallwall_item.tpl1
-rw-r--r--view/en/mail_received_html_body_eml.tpl4
-rw-r--r--view/en/msg-header.tpl14
-rw-r--r--view/en/wallwall_item.tpl1
-rw-r--r--view/fr/mail_received_html_body_eml.tpl4
-rw-r--r--view/fr/msg-header.tpl14
-rw-r--r--view/fr/wallwall_item.tpl1
-rw-r--r--view/it/mail_received_html_body_eml.tpl4
-rw-r--r--view/it/msg-header.tpl14
-rw-r--r--view/it/settings_nick_unset.tpl11
-rw-r--r--view/it/strings.php33
-rw-r--r--view/it/wallwall_item.tpl1
-rw-r--r--view/theme/duepuntozero/style.css7
-rw-r--r--view/theme/loozah/style.css7
-rw-r--r--view/wall_item.tpl1
44 files changed, 1041 insertions, 155 deletions
diff --git a/addon/statusnet/statusnet.php b/addon/statusnet/statusnet.php
index bc47242fc..c7e16b56e 100644
--- a/addon/statusnet/statusnet.php
+++ b/addon/statusnet/statusnet.php
@@ -133,7 +133,7 @@ function statusnet_settings(&$a,&$s) {
$s .= '<input id="statusnet-consumerkey" type="text" name="statusnet-consumerkey" size="35" /><br />';
$s .= '<label id="statusnet-consumersecret-label" for="statusnet-consumersecret">'. t('OAuth Consumer Secret') .'</label>';
$s .= '<input id="statusnet-consumersecret" type="text" name="statusnet-consumersecret" size="35" /><br />';
- $s .= '<label id="statusnet-baseapi-label" for="statusnet-baseapi">'. t('Base API Path (remember the trailing /)') .'</label>';
+ $s .= '<label id="statusnet-baseapi-label" for="statusnet-baseapi">'. t("Base API Path \x28remember the trailing /\x29") .'</label>';
$s .= '<input id="statusnet-baseapi" type="text" name="statusnet-baseapi" size="35" /><br />';
$s .= '</div><div class="clear"></div>';
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
diff --git a/addon/tictac/tictac.php b/addon/tictac/tictac.php
new file mode 100644
index 000000000..d44254411
--- /dev/null
+++ b/addon/tictac/tictac.php
@@ -0,0 +1,661 @@
+<?php
+
+
+function tictac_install() {
+ register_hook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu');
+}
+
+function tictac_uninstall() {
+ unregister_hook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu');
+
+}
+
+function tictac_app_menu($a,&$b) {
+ $b['app_menu'] .= '<a href="tictac">Three Dimensional Tic-Tac-Toe</a><br />';
+}
+
+
+function tictac_module() {
+ return;
+}
+
+
+
+
+
+function tictac_content(&$a) {
+
+ $o = '';
+
+ if($_POST['move']) {
+ $handicap = $a->argv[1];
+ $mefirst = $a->argv[2];
+ $dimen = $a->argv[3];
+ $yours = $a->argv[4];
+ $mine = $a->argv[5];
+
+ $yours .= $_POST['move'];
+ }
+ elseif($a->argc > 1) {
+ $handicap = $a->argv[1];
+ $dimen = 3;
+ }
+ else {
+ $dimen = 3;
+ }
+
+ $o .= '<h3>3D Tic-Tac-Toe</h3><br />';
+
+ $t = new tictac($dimen,$handicap,$mefirst,$yours,$mine);
+ $o .= $t->play();
+
+ $o .= '<a href="tictac">New game</a><br />';
+ $o .= '<a href="tictac/1">New game with handicap</a><br />';
+$o .= <<< EOT
+<p>
+Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. 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.
+</p>
+<p>
+The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.
+</p>
+EOT;
+return $o;
+
+}
+
+class tictac {
+ private $dimen;
+ private $first_move = true;
+ private $handicap = 0;
+ private $yours;
+ private $mine;
+ private $winning_play;
+ private $you;
+ private $me;
+ private $debug = 1;
+ private $crosses = array('011','101','110','112','121','211');
+
+/*
+ '001','010','011','012','021',
+ '101','110','111','112','121',
+ '201','210','211','212','221');
+*/
+
+ private $corners = array(
+ '000','002','020','022',
+ '200','202','220','222');
+
+ private $planes = array(
+ array('000','001','002','010','011','012','020','021','022'), // horiz 1
+ array('100','101','102','110','111','112','120','121','122'), // 2
+ array('200','201','202','210','211','212','220','221','222'), // 3
+ array('000','010','020','100','110','120','200','210','220'), // vert left
+ array('000','001','002','100','101','102','200','201','202'), // vert top
+ array('002','012','022','102','112','122','202','212','222'), // vert right
+ array('020','021','022','120','121','122','220','221','222'), // vert bot
+ array('010','011','012','110','111','112','210','211','212'), // left vertx
+ array('001','011','021','101','111','221','201','211','221'), // top vertx
+ array('000','001','002','110','111','112','220','221','222'), // diag top
+ array('020','021','022','110','111','112','200','201','202'), // diag bot
+ array('000','010','020','101','111','121','202','212','222'), // diag left
+ array('002','012','022','101','111','121','200','210','220'), // diag right
+ array('002','011','020','102','111','120','202','211','220'), // diag x
+ array('000','011','022','100','111','122','200','211','222') // diag x
+
+ );
+
+
+ private $winner = array(
+ array('000','001','002'), // board 0 winners - left corner across
+ array('000','010','020'), // down
+ array('000','011','022'), // diag
+ array('001','011','021'), // middle-top down
+ array('010','011','012'), // middle-left across
+ array('002','011','020'), // right-top diag
+ array('002','012','022'), // right-top down
+ array('020','021','022'), // bottom-left across
+ array('100','101','102'), // board 1 winners
+ array('100','110','120'),
+ array('100','111','122'),
+ array('101','111','121'),
+ array('110','111','112'),
+ array('102','111','120'),
+ array('102','112','122'),
+ array('120','121','122'),
+ array('200','201','202'), // board 2 winners
+ array('200','210','220'),
+ array('200','211','222'),
+ array('201','211','221'),
+ array('210','211','212'),
+ array('202','211','220'),
+ array('202','212','222'),
+ array('220','221','222'),
+ array('000','100','200'), // top-left corner 3d
+ array('000','101','202'),
+ array('000','110','220'),
+ array('000','111','222'),
+ array('001','101','201'), // top-middle 3d
+ array('001','111','221'),
+ array('002','102','202'), // top-right corner 3d
+ array('002','101','200'),
+ array('002','112','222'),
+ array('002','111','220'),
+ array('010','110','210'), // left-middle 3d
+ array('010','111','212'),
+ array('011','111','211'), // middle-middle 3d
+ array('012','112','212'), // right-middle 3d
+ array('012','111','210'),
+ array('020','120','220'), // bottom-left corner 3d
+ array('020','110','200'),
+ array('020','121','222'),
+ array('020','111','202'),
+ array('021','121','221'), // bottom-middle 3d
+ array('021','111','201'),
+ array('022','122','222'), // bottom-right corner 3d
+ array('022','121','220'),
+ array('022','112','202'),
+ array('022','111','200')
+
+ );
+
+ function __construct($dimen,$handicap,$mefirst,$yours,$mine) {
+ $this->dimen = 3;
+ $this->handicap = (($handicap) ? 1 : 0);
+ $this->mefirst = (($mefirst) ? 1 : 0);
+ $this->yours = str_replace('XXX','',$yours);
+ $this->mine = $mine;
+ $this->you = $this->parse_moves('you');
+ $this->me = $this->parse_moves('me');
+
+ if(strlen($yours))
+ $this->first_move = false;
+ }
+
+ function play() {
+
+ if($this->first_move) {
+ if(rand(0,1) == 1) {
+ $o .= '<div class="errmsg">You go first...</div><br />';
+ $this->mefirst = 0;
+ $o .= $this->draw_board();
+ return $o;
+ }
+ $o .= '<div class="errmsg">I\'m going first this time...</div><br />';
+ $this->mefirst = 1;
+
+ }
+
+ if($this->check_youwin()) {
+ $o .= '<div class="errmsg">You won!</div><br />';
+ $o .= $this->draw_board();
+ return $o;
+ }
+
+ if($this->fullboard())
+ $o .= 'Cat game!';
+
+ $move = $this->winning_move();
+ if(strlen($move)) {
+ $this->mine .= $move;
+ $this->me = $this->parse_moves('me');
+ }
+ else {
+ $move = $this->defensive_move();
+ if(strlen($move)) {
+ $this->mine .= $move;
+ $this->me = $this->parse_moves('me');
+ }
+ else {
+ $move = $this->offensive_move();
+ if(strlen($move)) {
+ $this->mine .= $move;
+ $this->me = $this->parse_moves('me');
+ }
+ }
+ }
+
+ if($this->check_iwon())
+ $o .= '<div class="errmsg">I won!</div><br />';
+ if($this->fullboard())
+ $o .= 'Cat game!';
+ $o .= $this->draw_board();
+ return $o;
+ }
+
+ function parse_moves($player) {
+ if($player == 'me')
+ $str = $this->mine;
+ if($player == 'you')
+ $str = $this->yours;
+ $ret = array();
+ while(strlen($str)) {
+ $ret[] = substr($str,0,3);
+ $str = substr($str,3);
+ }
+ return $ret;
+ }
+
+
+ function check_youwin() {
+ for($x = 0; $x < count($this->winner); $x ++) {
+ if(in_array($this->winner[$x][0],$this->you) && in_array($this->winner[$x][1],$this->you) && in_array($this->winner[$x][2],$this->you)) {
+ $this->winning_play = $this->winner[$x];
+ return true;
+ }
+ }
+ return false;
+ }
+ function check_iwon() {
+ for($x = 0; $x < count($this->winner); $x ++) {
+ if(in_array($this->winner[$x][0],$this->me) && in_array($this->winner[$x][1],$this->me) && in_array($this->winner[$x][2],$this->me)) {
+ $this->winning_play = $this->winner[$x];
+ return true;
+ }
+ }
+ return false;
+ }
+ function defensive_move() {
+
+ for($x = 0; $x < count($this->winner); $x ++) {
+ if(($this->handicap) && in_array('111',$this->winner[$x]))
+ continue;
+ if(in_array($this->winner[$x][0],$this->you) && in_array($this->winner[$x][1],$this->you) && (! in_array($this->winner[$x][2],$this->me)))
+ return($this->winner[$x][2]);
+ if(in_array($this->winner[$x][0],$this->you) && in_array($this->winner[$x][2],$this->you) && (! in_array($this->winner[$x][1],$this->me)))
+ return($this->winner[$x][1]);
+ if(in_array($this->winner[$x][1],$this->you) && in_array($this->winner[$x][2],$this->you) && (! in_array($this->winner[$x][0],$this->me)))
+ return($this->winner[$x][0]);
+ }
+ return '';
+ }
+
+function winning_move() {
+
+ for($x = 0; $x < count($this->winner); $x ++) {
+ if(($this->handicap) && in_array('111',$this->winner[$x]))
+ continue;
+ if(in_array($this->winner[$x][0],$this->me) && in_array($this->winner[$x][1],$this->me) && (! in_array($this->winner[$x][2],$this->you)))
+ return($this->winner[$x][2]);
+ if(in_array($this->winner[$x][0],$this->me) && in_array($this->winner[$x][2],$this->me) && (! in_array($this->winner[$x][1],$this->you)))
+ return($this->winner[$x][1]);
+ if(in_array($this->winner[$x][1],$this->me) && in_array($this->winner[$x][2],$this->me) && (! in_array($this->winner[$x][0],$this->you)))
+ return($this->winner[$x][0]);
+ }
+
+}
+
+ function offensive_move() {
+
+ shuffle($this->planes);
+ shuffle($this->winner);
+ shuffle($this->corners);
+ shuffle($this->crosses);
+
+ if(! count($this->me)) {
+ if($this->handicap) {
+ $p = $this->uncontested_plane();
+ foreach($this->corners as $c)
+ if((in_array($c,$p))
+ && (! $this->is_yours($c)) && (! $this->is_mine($c)))
+ return($c);
+ }
+ else {
+ if((! $this->marked_yours(1,1,1)) && (! $this->marked_mine(1,1,1)))
+ return '111';
+ $p = $this->uncontested_plane();
+ foreach($this->crosses as $c)
+ if((in_array($c,$p))
+ && (! $this->is_yours($c)) && (! $this->is_mine($c)))
+ return($c);
+ }
+ }
+
+ if($this->handicap) {
+ if(count($this->me) >= 1) {
+ if(count($this->get_corners($this->me)) == 1) {
+ if(in_array($this->me[0],$this->corners)) {
+ $p = $this->my_best_plane();
+ foreach($this->winner as $w) {
+ if((in_array($w[0],$this->you))
+ || (in_array($w[1],$this->you))
+ || (in_array($w[2],$this->you)))
+ continue;
+ if(in_array($w[0],$this->corners)
+ && in_array($w[2],$this->corners)
+ && in_array($w[0],$p) && in_array($w[2],$p)) {
+ if($this->me[0] == $w[0])
+ return($w[2]);
+ elseif($this->me[0] == $w[2])
+ return($w[0]);
+ }
+ }
+ }
+ }
+ else {
+ $r = $this->get_corners($this->me);
+ if(count($r) > 1) {
+ $w1 = array(); $w2 = array();
+ foreach($this->winner as $w) {
+ if(in_array('111',$w))
+ continue;
+ if(($r[0] == $w[0]) || ($r[0] == $w[2]))
+ $w1[] = $w;
+ if(($r[1] == $w[0]) || ($r[1] == $w[2]))
+ $w2[] = $w;
+ }
+ if(count($w1) && count($w2)) {
+ foreach($w1 as $a) {
+ foreach($w2 as $b) {
+ if((in_array($a[0],$this->you))
+ || (in_array($a[1],$this->you))
+ || (in_array($a[2],$this->you))
+ || (in_array($b[0],$this->you))
+ || (in_array($b[1],$this->you))
+ || (in_array($b[2],$this->you)))
+ continue;
+ if(($a[0] == $b[0]) && ! $this->is_mine($a[0])) {
+ return $a[0];
+ }
+ elseif(($a[2] == $b[2]) && ! $this->is_mine($a[2])) {
+ return $a[2];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //&& (count($this->me) == 1) && (count($this->you) == 1)
+ // && in_array($this->you[0],$this->corners)
+ // && $this->is_neighbor($this->me[0],$this->you[0])) {
+
+ // Yuck. You foiled my plan. Since you obviously aren't playing to win,
+ // I'll try again. You may keep me busy for a few rounds, but I'm
+ // gonna' get you eventually.
+
+// $p = $this->uncontested_plane();
+ // foreach($this->crosses as $c)
+ // if(in_array($c,$p))
+ // return($c);
+
+// }
+
+
+ // find all the winners containing my points.
+ $mywinners = array();
+ foreach($this->winner as $w)
+ foreach($this->me as $m)
+ if((in_array($m,$w)) && (! in_array($w,$mywinners)))
+ $mywinners[] = $w;
+
+ // find all the rules where my points are in the center.
+ $trythese = array();
+ if(count($mywinners)) {
+ foreach($mywinners as $w) {
+ foreach($this->me as $m) {
+ if(($m == $w[1]) && ($this->uncontested_winner($w))
+ && (! in_array($w,$trythese)))
+ $trythese[] = $w;
+ }
+ }
+ }
+
+ $myplanes = array();
+ for($p = 0; $p < count($this->planes); $p ++) {
+ if($this->handicap && in_array('111',$this->planes[$p]))
+ continue;
+ foreach($this->me as $m)
+ if((in_array($m,$this->planes[$p]))
+ && (! in_array($this->planes[$p],$myplanes)))
+ $myplanes[] = $this->planes[$p];
+ }
+ shuffle($myplanes);
+
+ // find all winners which share an endpoint, and which are uncontested
+ $candidates = array();
+ if(count($trythese) && count($myplanes)) {
+ foreach($trythese as $t) {
+ foreach($this->winner as $w) {
+ if(! $this->uncontested_winner($w))
+ continue;
+ if((in_array($t[0],$w)) || (in_array($t[2],$w))) {
+ foreach($myplanes as $p)
+ if(in_array($w[0],$p) && in_array($w[1],$p) && in_array($w[2],$p) && ($w[1] != $this->me[0]))
+ if(! in_array($w,$candidates))
+ $candidates[] = $w;
+ }
+ }
+ }
+ }
+
+ // Find out if we are about to force a win.
+ // Looking for two winning vectors with a common endpoint
+ // and where we own the middle of both - we are now going to
+ // grab the endpoint. The game isn't yet over but we've already won.
+
+ if(count($candidates)) {
+ foreach($candidates as $c) {
+ if(in_array($c[1],$this->me)) {
+ // return endpoint
+ foreach($trythese as $t)
+ if($t[0] == $c[0])
+ return($t[0]);
+ elseif($t[2] == $c[2])
+ return($t[2]);
+ }
+ }
+
+ // find opponents planes
+ $yourplanes = array();
+ for($p = 0; $p < count($this->planes); $p ++) {
+ if($this->handicap && in_array('111',$this->planes[$p]))
+ continue;
+ if(in_array($this->you[0],$this->planes[$p]))
+ $yourplanes[] = $this->planes[$p];
+ }
+
+ shuffle($this->winner);
+ foreach($candidates as $c) {
+
+ // We now have a list of winning strategy vectors for our second point
+ // Pick one that will force you into defensive mode.
+ // Pick a point close to you so we don't risk giving you two
+ // in a row when you block us. That would force *us* into
+ // defensive mode.
+ // We want: or: not:
+ // X|O| X| | X| |
+ // |0| O|O| |O|
+ // | | | | |O|
+
+ if(count($this->you) == 1) {
+ foreach($this->winner as $w) {
+ if(in_array($this->me[0], $w) && in_array($c[1],$w)
+ && $this->uncontested_winner($w)
+ && $this->is_neighbor($this->you[0],$c[1])) {
+ return($c[1]);
+ }
+ }
+ }
+ }
+
+ // You're somewhere else entirely or have made more than one move
+ // - any strategy vector which puts you on the defense will have to do
+
+ foreach($candidates as $c) {
+ foreach($this->winner as $w) {
+ if(in_array($this->me[0], $w) && in_array($c[1],$w)
+ && $this->uncontested_winner($w)) {
+ return($c[1]);
+ }
+ }
+ }
+ }
+
+ // worst case scenario, no strategy we can play,
+ // just find an empty space and take it
+
+ for($x = 0; $x < $this->dimen; $x ++)
+ for($y = 0; $y < $this->dimen; $y ++)
+ for($z = 0; $z < $this->dimen; $z ++)
+ if((! $this->marked_yours($x,$y,$z))
+ && (! $this->marked_mine($x,$y,$z))) {
+ if($this->handicap && $x == 1 && $y == 1 && $z == 1)
+ continue;
+ return(sprintf("%d%d%d",$x,$y,$z));
+ }
+
+ return '';
+ }
+
+ function marked_yours($x,$y,$z) {
+ $str = sprintf("%d%d%d",$x,$y,$z);
+ if(in_array($str,$this->you))
+ return true;
+ return false;
+ }
+
+ function marked_mine($x,$y,$z) {
+ $str = sprintf("%d%d%d",$x,$y,$z);
+ if(in_array($str,$this->me))
+ return true;
+ return false;
+ }
+
+ function is_yours($str) {
+ if(in_array($str,$this->you))
+ return true;
+ return false;
+ }
+
+ function is_mine($str) {
+ if(in_array($str,$this->me))
+ return true;
+ return false;
+ }
+
+ function get_corners($a) {
+ $total = array();
+ if(count($a))
+ foreach($a as $b)
+ if(in_array($b,$this->corners))
+ $total[] = $b;
+ return $total;
+ }
+
+ function uncontested_winner($w) {
+ if($this->handicap && in_array('111',$w))
+ return false;
+ $contested = false;
+ if(count($this->you)) {
+ foreach($this->you as $you)
+ if(in_array($you,$w))
+ $contested = true;
+ }
+ return (($contested) ? false : true);
+ }
+
+
+ function is_neighbor($p1,$p2) {
+ list($x1,$y1,$z1) = sscanf($p1, "%1d%1d%1d");
+ list($x2,$y2,$z2) = sscanf($p2, "%1d%1d%1d");
+
+ if((($x1 == $x2) || ($x1 == $x2+1) || ($x1 == $x2-1)) &&
+ (($y1 == $y2) || ($y1 == $y2+1) || ($y1 == $y2-1)) &&
+ (($z1 == $z2) || ($z1 == $z2+1) || ($z1 == $z2-1)))
+ return true;
+ return false;
+
+ }
+
+ function my_best_plane() {
+
+ $second_choice = array();
+ shuffle($this->planes);
+ for($p = 0; $p < count($this->planes); $p ++ ) {
+ $contested = 0;
+ if($this->handicap && in_array('111',$this->planes[$p]))
+ continue;
+ if(! in_array($this->me[0],$this->planes[$p]))
+ continue;
+ foreach($this->you as $m) {
+ if(in_array($m,$this->planes[$p]))
+ $contested ++;
+ }
+ if(! $contested)
+ return($this->planes[$p]);
+ if($contested == 1)
+ $second_choice = $this->planes[$p];
+ }
+ return $second_choice;
+ }
+
+
+
+
+
+
+
+ function uncontested_plane() {
+ $freeplane = true;
+ shuffle($this->planes);
+ $pl = $this->planes;
+
+ for($p = 0; $p < count($pl); $p ++ ) {
+ if($this->handicap && in_array('111',$pl[$p]))
+ continue;
+ foreach($this->you as $m) {
+ if(in_array($m,$pl[$p]))
+ $freeplane = false;
+ }
+ if(! $freeplane) {
+ $freeplane = true;
+ continue;
+ }
+ if($freeplane)
+ return($pl[$p]);
+ }
+ return array();
+ }
+
+ function fullboard() {
+ return false;
+ }
+
+ function draw_board() {
+ if(! strlen($this->yours))
+ $this->yours = 'XXX';
+ $o .= "<form action=\"tictac/{$this->handicap}/{$this->mefirst}/{$this->dimen}/{$this->yours}/{$this->mine}\" method=\"post\" />";
+ for($x = 0; $x < $this->dimen; $x ++) {
+ $o .= '<table>';
+ for($y = 0; $y < $this->dimen; $y ++) {
+ $o .= '<tr>';
+ for($z = 0; $z < $this->dimen; $z ++) {
+ $s = sprintf("%d%d%d",$x,$y,$z);
+ $winner = ((is_array($this->winning_play) && in_array($s,$this->winning_play)) ? " color: #FF0000; " : "");
+ $bordertop = (($y != 0) ? " border-top: 2px solid #000;" : "");
+ $borderleft = (($z != 0) ? " border-left: 2px solid #000;" : "");
+ if($this->handicap && $x == 1 && $y == 1 && $z == 1)
+ $o .= "<td style=\"width: 25px; height: 25px; $bordertop $borderleft\" align=\"center\">&nbsp;</td>";
+ elseif($this->marked_yours($x,$y,$z))
+ $o .= "<td style=\"width: 25px; height: 25px; $bordertop $borderleft $winner\" align=\"center\">X</td>";
+ elseif($this->marked_mine($x,$y,$z))
+ $o .= "<td style=\"width: 25px; height: 25px; $bordertop $borderleft $winner\" align=\"center\">O</td>";
+ else {
+ $val = sprintf("%d%d%d",$x,$y,$z);
+ $o .= "<td style=\"width: 25px; height: 25px; $bordertop $borderleft\" align=\"center\"><input type=\"checkbox\" name=\"move\" value=\"$val\" onclick=\"this.form.submit();\" /></td>";
+ }
+ }
+ $o .= '</tr>';
+ }
+ $o .= '</table><br />';
+ }
+ $o .= '</form>';
+ return $o;
+
+ }
+
+
+}
+
diff --git a/boot.php b/boot.php
index 6a1d3a04b..7f6868936 100644
--- a/boot.php
+++ b/boot.php
@@ -2,8 +2,8 @@
set_time_limit(0);
-define ( 'BUILD_ID', 1038 );
-define ( 'FRIENDIKA_VERSION', '2.10.0906' );
+define ( 'BUILD_ID', 1039 );
+define ( 'FRIENDIKA_VERSION', '2.10.0907' );
define ( 'DFRN_PROTOCOL_VERSION', '2.1' );
define ( 'EOL', "<br />\r\n" );
@@ -196,6 +196,7 @@ class App {
public $timezone;
public $interactive = true;
public $plugins;
+ public $apps;
private $scheme;
private $hostname;
@@ -1804,7 +1805,7 @@ function like_puller($a,$item,&$arr,$mode) {
if((activity_match($item['verb'],$verb)) && ($item['id'] != $item['parent'])) {
$url = $item['author-link'];
- if(($item['network'] === 'dfrn') && (! $item['self']) && ($item['author-link'] == $item['url'])) {
+ 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" ';
}
@@ -1978,9 +1979,11 @@ function smilies($s) {
$a = get_app();
return str_replace(
- array( '&lt;3', ':-)', ';-)', ':-(', ':(', ':-P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'),
+ array( '&lt;3', '&lt;/3', '&lt;\\3', ':-)', ';-)', ':-(', ':(', ':-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" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-brokenheart.gif" alt="<\\3" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-smile.gif" alt=":-)" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-wink.gif" alt=";-)" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-frown.gif" alt=":-(" />',
@@ -2447,3 +2450,16 @@ function feed_salmonlinks($nick) {
return $salmon;
}}
+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>' : '');
+ return $plink;
+}}
+
+if(! function_exists('unamp')) {
+function unamp($s) {
+ return str_replace('&amp;', '&', $s);
+}}
+
diff --git a/database.sql b/database.sql
index 55671db85..93e444b6b 100644
--- a/database.sql
+++ b/database.sql
@@ -181,6 +181,7 @@ CREATE TABLE IF NOT EXISTS `item` (
`object` text NOT NULL,
`target-type` char(255) NOT NULL,
`target` text NOT NULL,
+ `plink` char(255) NOT NULL,
`resource-id` char(255) NOT NULL,
`tag` mediumtext NOT NULL,
`inform` mediumtext NOT NULL,
diff --git a/images/remote-link.gif b/images/remote-link.gif
new file mode 100644
index 000000000..008397fe8
--- /dev/null
+++ b/images/remote-link.gif
Binary files differ
diff --git a/images/smiley-brokenheart.gif b/images/smiley-brokenheart.gif
new file mode 100644
index 000000000..79ca0c31b
--- /dev/null
+++ b/images/smiley-brokenheart.gif
Binary files differ
diff --git a/include/items.php b/include/items.php
index b5bdd7833..0951adbae 100644
--- a/include/items.php
+++ b/include/items.php
@@ -246,7 +246,7 @@ function get_atom_elements($feed,$item) {
$res['uri'] = unxmlify($item->get_id());
$res['title'] = unxmlify($item->get_title());
$res['body'] = unxmlify($item->get_content());
-
+ $res['plink'] = unxmlify($item->get_link(0));
// look for a photo. We should check media size and find the best one,
// but for now let's just find any author photo
@@ -350,7 +350,7 @@ function get_atom_elements($feed,$item) {
'[youtube]$1[/youtube]', $res['body']);
$res['body'] = oembed_html2bbcode($res['body']);
-
+
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.DefinitionImpl', null);
@@ -363,7 +363,7 @@ function get_atom_elements($feed,$item) {
$res['body'] = html2bbcode($res['body']);
}
-
+
$allow = $item->get_item_tags(NAMESPACE_DFRN,'comment-allow');
if($allow && $allow[0]['data'] == 1)
$res['last-child'] = 1;
@@ -591,6 +591,7 @@ function item_store($arr,$force_parent = false) {
$arr['object'] = ((x($arr,'object')) ? trim($arr['object']) : '');
$arr['target-type'] = ((x($arr,'target-type')) ? notags(trim($arr['target-type'])) : '');
$arr['target'] = ((x($arr,'target')) ? trim($arr['target']) : '');
+ $arr['plink'] = ((x($arr,'plink')) ? notags(trim($arr['plink'])) : '');
$arr['allow_cid'] = ((x($arr,'allow_cid')) ? trim($arr['allow_cid']) : '');
$arr['allow_gid'] = ((x($arr,'allow_gid')) ? trim($arr['allow_gid']) : '');
$arr['deny_cid'] = ((x($arr,'deny_cid')) ? trim($arr['deny_cid']) : '');
@@ -1418,7 +1419,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
$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 .= '<link rel="alternate" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\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";
diff --git a/include/main.js b/include/main.js
index abd097e54..824f2dfdf 100644
--- a/include/main.js
+++ b/include/main.js
@@ -108,7 +108,10 @@
prev = 'live-' + src;
in_progress = true;
- $.get('update_' + src + '?p=' + profile_uid + '&msie=' + ((msie) ? 1 : 0),function(data) {
+ var udargs = ((netargs.length) ? '/' + netargs : '');
+ var update_url = 'update_' + src + udargs + '?p=' + profile_uid + '&page=' + profile_page + '&msie=' + ((msie) ? 1 : 0);
+
+ $.get(update_url,function(data) {
in_progress = false;
$('.wall-item-outside-wrapper',data).each(function() {
var ident = $(this).attr('id');
@@ -225,6 +228,10 @@
if(timer) clearTimeout(timer);
timer = setTimeout(NavUpdate,10);
}
+ if(data.reload) {
+ window.location.href=data.reload;
+ }
+
},
"json"
);
diff --git a/include/nav.php b/include/nav.php
index 94a71d227..228774d95 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -56,6 +56,10 @@
$a->page['nav'] .= '<a id="nav-register-link" class="nav-commlink" href="register" >'
. t('Register') . "</a>\r\n";
+ if(strlen($a->apps)) {
+ $a->page['nav'] .= '<a id="nav-apps-link" class="nav-link" href="apps">' . t('Apps') . "</a>\r\n";
+ }
+
$a->page['nav'] .= '<a id="nav-search-link" class="nav-link" href="search">' . t('Search') . "</a>\r\n";
$a->page['nav'] .= '<a id="nav-directory-link" class="nav-link" href="directory">' . t('Directory') . "</a>\r\n";
diff --git a/include/oembed.php b/include/oembed.php
index 4d6b0af16..4d2b7185e 100644
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -79,22 +79,31 @@ function oe_get_inner_html( $node ) {
* and replace it with [embed]url[/embed]
*/
function oembed_html2bbcode($text) {
- // If it doesn't parse at all, just return the text.
- $dom = @DOMDocument::loadHTML($text);
- if(! $dom)
+ // start parser only if 'oembed' is in text
+ if (strpos($text, "oembed")){
+
+ // convert non ascii chars to html entities
+ $html_text = mb_convert_encoding($text, 'HTML-ENTITIES', mb_detect_encoding($text));
+
+ // If it doesn't parse at all, just return the text.
+ $dom = @DOMDocument::loadHTML($html_text);
+ if(! $dom)
+ return $text;
+ $xpath = new DOMXPath($dom);
+ $attr = "oembed";
+
+ $xattr = oe_build_xpath("class","oembed");
+ $entries = $xpath->query("//span[$xattr]");
+
+ $xattr = oe_build_xpath("rel","oembed");
+ foreach($entries as $e) {
+ $href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue;
+ if(!is_null($href)) $e->parentNode->replaceChild(new DOMText("[embed]".$href."[embed]"), $e);
+ }
+ return oe_get_inner_html( $dom->getElementsByTagName("body")->item(0) );
+ } else {
return $text;
- $xpath = new DOMXPath($dom);
- $attr = "oembed";
-
- $xattr = oe_build_xpath("class","oembed");
- $entries = $xpath->query("//span[$xattr]");
-
- $xattr = oe_build_xpath("rel","oembed");
- foreach($entries as $e) {
- $href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue;
- if(!is_null($href)) $e->parentNode->replaceChild(new DOMText("[embed]".$href."[embed]"), $e);
- }
- return oe_get_inner_html( $dom->getElementsByTagName("body")->item(0) );
+ }
}
?> \ No newline at end of file
diff --git a/index.php b/index.php
index 661676bfd..55edd072e 100644
--- a/index.php
+++ b/index.php
@@ -113,6 +113,13 @@ else
check_config($a);
+$arr = array('app_menu' => $a->apps);
+
+call_hooks('app_menu', $arr);
+
+$a->apps = $arr['app_menu'];
+
+
/**
*
* We have already parsed the server path into $->argc and $a->argv
@@ -132,10 +139,9 @@ else
* further processing.
*/
-
if(strlen($a->module)) {
if(is_array($a->plugins) && in_array($a->module,$a->plugins) && file_exists("addon/{$a->module}/{$a->module}.php")) {
- include("addon/{$a->module}/{$a->module}.php");
+ include_once("addon/{$a->module}/{$a->module}.php");
if(function_exists($a->module . '_module'))
$a->module_loaded = true;
}
@@ -155,6 +161,8 @@ if(strlen($a->module)) {
}
}
+
+
/* initialise content region */
if(! x($a->page,'content'))
diff --git a/mod/apps.php b/mod/apps.php
new file mode 100644
index 000000000..1d08d2e7f
--- /dev/null
+++ b/mod/apps.php
@@ -0,0 +1,14 @@
+<?php
+
+
+function apps_content(&$a) {
+
+ $o .= '<h3>' . t('Applications') . '</h3>';
+
+ if($a->apps)
+ $o .= $a->apps;
+
+
+ return $o;
+
+} \ No newline at end of file
diff --git a/mod/display.php b/mod/display.php
index 3215ae90a..bdf6a6f97 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -153,7 +153,8 @@ function display_content(&$a) {
}
if($item['last-child']) {
$comment = replace_macros($cmnt_tpl,array(
- '$return_path' => $_SESSION['return_url'],
+ '$return_path' => '',
+ '$jsreload' => $_SESSION['return_url'],
'$type' => 'wall-comment',
'$id' => $item['item_id'],
'$parent' => $item['parent'],
@@ -272,6 +273,7 @@ function display_content(&$a) {
'$owner_url' => $owner_url,
'$owner_photo' => $owner_photo,
'$owner_name' => $owner_name,
+ '$plink' => get_plink($item),
'$drop' => $drop,
'$vote' => $likebuttons,
'$like' => $like,
diff --git a/mod/follow.php b/mod/follow.php
index eaee7d5ac..28441eae8 100644
--- a/mod/follow.php
+++ b/mod/follow.php
@@ -19,15 +19,15 @@ function follow_post(&$a) {
if(count($links)) {
foreach($links as $link) {
if($link['@attributes']['rel'] === NAMESPACE_DFRN)
- $dfrn = $link['@attributes']['href'];
+ $dfrn = unamp($link['@attributes']['href']);
if($link['@attributes']['rel'] === 'salmon')
- $notify = $link['@attributes']['href'];
+ $notify = unamp($link['@attributes']['href']);
if($link['@attributes']['rel'] === NAMESPACE_FEED)
- $poll = $link['@attributes']['href'];
+ $poll = unamp($link['@attributes']['href']);
if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard')
- $hcard = $link['@attributes']['href'];
+ $hcard = unamp($link['@attributes']['href']);
if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page')
- $profile = $link['@attributes']['href'];
+ $profile = unamp($link['@attributes']['href']);
}
@@ -43,10 +43,10 @@ function follow_post(&$a) {
if(strpos($link['@attributes']['href'],'@') === false) {
if(isset($profile)) {
if($link['@attributes']['href'] !== $profile)
- $alias = $link['@attributes']['href'];
+ $alias = unamp($link['@attributes']['href']);
}
else
- $profile = $link['@attributes']['href'];
+ $profile = unamp($link['@attributes']['href']);
}
}
}
@@ -103,7 +103,7 @@ function follow_post(&$a) {
$ret = scrape_feed($url);
if(count($ret) && ($ret['feed_atom'] || $ret['feed_rss'])) {
- $poll = ((x($ret,'feed_atom')) ? $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();
@@ -116,27 +116,35 @@ function follow_post(&$a) {
$vcard['photo'] = $feed->get_image_url();
$author = $feed->get_author();
if($author) {
- $vcard['fn'] = trim($author->get_name());
- $vcard['nick'] = strtolower($vcard['fn']);
+ $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 = $author->get_email();
+ $email = unxmlify($author->get_email());
}
else {
$item = $feed->get_item(0);
if($item) {
$author = $item->get_author();
if($author) {
- $vcard['fn'] = trim($author->get_name());
- $vcard['nick'] = strtolower($vcard['fn']);
+ $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 = $author->get_email();
+ $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'] = $rawmedia[0]['attribs']['']['url'];
+ $vcard['photo'] = unxmlify($rawmedia[0]['attribs']['']['url']);
}
}
}
@@ -150,6 +158,9 @@ function follow_post(&$a) {
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))) {
@@ -157,6 +168,7 @@ function follow_post(&$a) {
goaway($_SESSION['return_url']);
}
+
if(! $notify) {
notice( t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . EOL);
}
diff --git a/mod/item.php b/mod/item.php
index 2cc2b9eb2..8c6b181c0 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -35,7 +35,9 @@ function item_post(&$a) {
);
if(! count($r)) {
notice( t('Unable to locate original post.') . EOL);
- goaway($a->get_baseurl() . "/" . $_POST['return'] );
+ if(x($_POST,'return'))
+ goaway($a->get_baseurl() . "/" . $_POST['return'] );
+ killme();
}
$parent_item = $r[0];
if($parent_item['contact-id'] && $uid) {
@@ -53,7 +55,9 @@ function item_post(&$a) {
if(! can_write_wall($a,$profile_uid)) {
notice( t('Permission denied.') . EOL) ;
- return;
+ if(x($_POST,'return'))
+ goaway($a->get_baseurl() . "/" . $_POST['return'] );
+ killme();
}
$user = null;
@@ -92,8 +96,9 @@ function item_post(&$a) {
if(! strlen($body)) {
notice( t('Empty post discarded.') . EOL );
- goaway($a->get_baseurl() . "/" . $_POST['return'] );
-
+ if(x($_POST,'return'))
+ goaway($a->get_baseurl() . "/" . $_POST['return'] );
+ killme();
}
// get contact info for poster
@@ -429,10 +434,11 @@ function item_post(&$a) {
}
}
- $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `changed` = '%s', `last-child` = 1, `visible` = 1
+ $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `plink` = '%s', `changed` = '%s', `last-child` = 1, `visible` = 1
WHERE `id` = %d LIMIT 1",
intval($parent),
dbesc(($parent == $post_id) ? $uri : $parent_item['uri']),
+ dbesc($a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id),
dbesc(datetime_convert()),
intval($post_id)
);
@@ -490,10 +496,17 @@ function item_post(&$a) {
}
}
- if((x($_POST,'return')) && strlen($_POST['return']))
+ logger('post_complete');
+ if((x($_POST,'return')) && strlen($_POST['return'])) {
+ logger('return: ' . $_POST['return']);
goaway($a->get_baseurl() . "/" . $_POST['return'] );
-
+ }
$json = array('success' => 1);
+ if(x($_POST,'jsreload') && strlen($_POST['jsreload']))
+ $json['reload'] = $a->get_baseurl() . '/' . $_POST['jsreload'];
+
+ logger('post_json: ' . print_r($json,true), LOGGER_DEBUG);
+
echo json_encode($json);
killme();
// NOTREACHED
@@ -544,7 +557,7 @@ function item_content(&$a) {
// generate a resource-id and therefore aren't intimately linked to the item.
if(strlen($item['resource-id'])) {
- $q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ",
+ q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ",
dbesc($item['resource-id']),
intval($item['uid'])
);
diff --git a/mod/message.php b/mod/message.php
index 7615f22be..ef3be2c5e 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -2,11 +2,6 @@
require_once('include/acl_selectors.php');
-function message_init(&$a) {
-
-
-}
-
function message_post(&$a) {
if(! local_user()) {
@@ -69,6 +64,43 @@ function message_post(&$a) {
if(count($r))
$post_id = $r[0]['id'];
+ /**
+ *
+ * When a photo was uploaded into the message using the (profile wall) ajax
+ * uploader, The permissions are initially set to disallow anybody but the
+ * owner from seeing it. This is because the permissions may not yet have been
+ * set for the post. If it's private, the photo permissions should be set
+ * appropriately. But we didn't know the final permissions on the post until
+ * now. So now we'll look for links of uploaded messages that are in the
+ * post and set them to the same permissions as the post itself.
+ *
+ */
+
+ $match = null;
+
+ if(preg_match_all("/\[img\](.+?)\[\/img\]/",$body,$match)) {
+ $images = $match[1];
+ if(count($images)) {
+ foreach($images as $image) {
+ if(! stristr($image,$a->get_baseurl() . '/photo/'))
+ continue;
+ $image_uri = substr($image,strrpos($image,'/') + 1);
+ $image_uri = substr($image_uri,0, strpos($image_uri,'-'));
+ $r = q("UPDATE `photo` SET `allow_cid` = '%s'
+ WHERE `resource-id` = '%s' AND `album` = '%s' AND `uid` = %d ",
+ dbesc('<' . $recipient . '>'),
+ dbesc($image_uri),
+ dbesc( t('Wall Photos')),
+ intval(local_user())
+ );
+ }
+ }
+ }
+
+
+
+
+
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
if($post_id) {
@@ -80,7 +112,6 @@ function message_post(&$a) {
notice( t('Message could not be sent.') . EOL );
}
return;
-
}
function message_content(&$a) {
diff --git a/mod/network.php b/mod/network.php
index f09b302e9..79a2f2b38 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -39,22 +39,22 @@ function network_content(&$a, $update = 0) {
$group = 0;
$nouveau = false;
+ require_once('include/acl_selectors.php');
- if(! $update) {
- $o .= '<script> $(document).ready(function() { $(\'#nav-network-link\').addClass(\'nav-selected\'); });</script>';
+ if(($a->argc > 2) && $a->argv[2] === 'new')
+ $nouveau = true;
- if(($a->argc > 2) && $a->argv[2] === 'new')
+ if($a->argc > 1) {
+ if($a->argv[1] === 'new')
$nouveau = true;
-
- // pull out the group here because the updater might have different args
- if($a->argc > 1) {
- if($a->argv[1] === 'new')
- $nouveau = true;
- else {
- $group = intval($a->argv[1]);
- $group_acl = array('allow_gid' => '<' . $group . '>');
- }
+ else {
+ $group = intval($a->argv[1]);
+ $group_acl = array('allow_gid' => '<' . $group . '>');
}
+ }
+
+ if(! $update) {
+ $o .= '<script> $(document).ready(function() { $(\'#nav-network-link\').addClass(\'nav-selected\'); });</script>';
$_SESSION['return_url'] = $a->cmd;
@@ -68,7 +68,6 @@ function network_content(&$a, $update = 0) {
'$nickname' => $a->user['nickname']
));
- require_once('include/acl_selectors.php');
$tpl = load_view_file("view/jot.tpl");
@@ -106,10 +105,10 @@ function network_content(&$a, $update = 0) {
// filtering by group and also you aren't writing a comment (the last
// criteria is discovered in javascript).
- if($a->pager['start'] == 0 && $a->argc == 1) {
$o .= '<div id="live-network"></div>' . "\r\n";
- $o .= "<script> var profile_uid = " . $_SESSION['uid'] . "; </script>\r\n";
- }
+ $o .= "<script> var profile_uid = " . $_SESSION['uid']
+ . "; var netargs = '" . substr($a->cmd,8)
+ . "'; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
}
@@ -134,6 +133,8 @@ function network_content(&$a, $update = 0) {
intval($_SESSION['uid'])
);
if(! count($r)) {
+ if($update)
+ killme();
notice( t('No such group') . EOL );
goaway($a->get_baseurl() . '/network');
return; // NOTREACHED
@@ -340,7 +341,8 @@ function network_content(&$a, $update = 0) {
if($item['last-child']) {
$comment = replace_macros($cmnt_tpl,array(
- '$return_path' => '', // $_SESSION['return_url'],
+ '$return_path' => '',
+ '$jsreload' => '', // $_SESSION['return_url'],
'$type' => 'net-comment',
'$id' => $item['item_id'],
'$parent' => $item['parent'],
@@ -425,6 +427,7 @@ function network_content(&$a, $update = 0) {
'$owner_url' => $owner_url,
'$owner_photo' => $owner_photo,
'$owner_name' => $owner_name,
+ '$plink' => get_plink($item),
'$drop' => $drop,
'$vote' => $likebuttons,
'$like' => $like,
diff --git a/mod/photos.php b/mod/photos.php
index 9acde458d..27cb1beb1 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -1048,7 +1048,8 @@ function photos_content(&$a) {
if($can_post || can_write_wall($a,$owner_uid)) {
if($link_item['last-child']) {
$o .= replace_macros($cmnt_tpl,array(
- '$return_path' => $return_url,
+ '$return_path' => '',
+ '$jsreload' => $return_url,
'$type' => 'wall-comment',
'$id' => $link_item['id'],
'$parent' => $link_item['id'],
@@ -1087,7 +1088,8 @@ function photos_content(&$a) {
if($can_post || can_write_wall($a,$owner_uid)) {
if($link_item['last-child']) {
$o .= replace_macros($cmnt_tpl,array(
- '$return_path' => $return_url,
+ '$return_path' => '',
+ '$jsreload' => $return_url,
'$type' => 'wall-comment',
'$id' => $link_item['id'],
'$parent' => $link_item['id'],
@@ -1115,7 +1117,8 @@ function photos_content(&$a) {
if($item['last-child']) {
$comment = replace_macros($cmnt_tpl,array(
- '$return_path' => $return_url,
+ '$return_path' => '',
+ '$jsreload' => $return_url,
'$type' => 'wall-comment',
'$id' => $item['item_id'],
'$parent' => $item['parent'],
diff --git a/mod/profile.php b/mod/profile.php
index 57abc479d..46d13298e 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -82,7 +82,6 @@ function profile_content(&$a, $update = 0) {
$is_owner = ((local_user()) && (local_user() == $a->profile['profile_uid']) ? true : false);
-
if(! $update) {
if(x($_GET,'tab'))
$tab = notags(trim($_GET['tab']));
@@ -161,11 +160,11 @@ function profile_content(&$a, $update = 0) {
// This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
// because browser prefetching might change it on us. We have to deliver it with the page.
- if($tab === 'posts' && (! $a->pager['start'])) {
+ if($tab === 'posts') {
$o .= '<div id="live-profile"></div>' . "\r\n";
- $o .= "<script> var profile_uid = " . $a->profile['profile_uid'] . "; </script>\r\n";
+ $o .= "<script> var profile_uid = " . $a->profile['profile_uid']
+ . "; var netargs = ''; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
}
-
}
// Construct permissions
@@ -293,7 +292,8 @@ function profile_content(&$a, $update = 0) {
}
if($item['last-child']) {
$comment = replace_macros($cmnt_tpl,array(
- '$return_path' => '', // $_SESSION['return_url'],
+ '$return_path' => '',
+ '$jsreload' => '', // $_SESSION['return_url'],
'$type' => 'wall-comment',
'$id' => $item['item_id'],
'$parent' => $item['parent'],
@@ -371,6 +371,7 @@ function profile_content(&$a, $update = 0) {
'$lock' => $lock,
'$location' => $location,
'$indent' => $indent,
+ '$plink' => get_plink($item),
'$drop' => $drop,
'$like' => $like,
'$vote' => $likebuttons,
diff --git a/mod/update_network.php b/mod/update_network.php
index 35e968dba..cf9f11f58 100644
--- a/mod/update_network.php
+++ b/mod/update_network.php
@@ -3,7 +3,7 @@
// See update_profile.php for documentation
require_once('mod/network.php');
-
+require_once('include/group.php');
function update_network_content(&$a) {
diff --git a/simplepie/simplepie.inc b/simplepie/simplepie.inc
index 185e17bcc..c3ba02b7d 100644
--- a/simplepie/simplepie.inc
+++ b/simplepie/simplepie.inc
@@ -9226,6 +9226,7 @@ class SimplePie_Misc
function absolutize_url($relative, $base)
{
+return $relative;
$iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative);
return $iri->get_iri();
}
diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif b/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif
index e46de5333..c6a75fc13 100644
--- a/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif
+++ b/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif
Binary files differ
diff --git a/update.php b/update.php
index 84eaebe18..131014d4a 100644
--- a/update.php
+++ b/update.php
@@ -370,3 +370,7 @@ function update_1037() {
}
+function update_1038() {
+ q("ALTER TABLE `item` ADD `plink` CHAR( 255 ) NOT NULL AFTER `target` ");
+}
+
diff --git a/util/string_translator.php b/util/string_translator.php
index 4d24f7a6f..4112d9506 100644
--- a/util/string_translator.php
+++ b/util/string_translator.php
@@ -4,6 +4,7 @@
<style>
textarea { width: 100% }
.no { background: #ffdddd; }
+ label { border-bottom: 1px solid #888; }
</style>
</head>
<body>
@@ -78,14 +79,13 @@ function strhex($string) {
echo "<h1>Translator</h1>";
-echo "<p>Utility to translate <code>string.php</code> file.";
-echo " Need write permission to language file you want to modify</p>";
+echo "<small>Utility to translate <code>string.php</code> file.";
+echo " Need write permission to language file you want to modify</small>";
echo "<p>Installed languages:";
-echo "<ul>";
foreach($LANGS as $l){
- echo "<li><a href='?lang=$l'>$l</a></li>";
+ echo "<a href='?lang=$l'>$l</a>, ";
}
-echo "</ul></p>";
+echo "</p>";
$strings['en'] = loadstrings();
@@ -156,7 +156,7 @@ if (isset($_GET['lang'])){
$istranslate = $translation != '' ? 'yes':'no';
echo "<dl class='$istranslate'>";
- echo "<dt><label for='$id'>".htmlspecialchars($v)."</label></dt>";
+ echo "<dt><pre><label for='$id'>".htmlspecialchars($v)."</label></pre></dt>";
echo "<dd><textarea id='$id' name='$id'>$translation</textarea></dd>";
echo "</dl>";
}
diff --git a/util/strings.php b/util/strings.php
index b6360e971..a7ef2361a 100644
--- a/util/strings.php
+++ b/util/strings.php
@@ -57,18 +57,6 @@ $a->strings['December'] = 'December';
$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['Unable to locate original post.'] = 'Unable to locate original post.';
-$a->strings['Empty post discarded.'] = 'Empty post discarded.';
-$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.'] = '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['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"] = "Invite Friends";
$a->strings['Connect/Follow [profile address]'] = 'Connect/Follow [profile address]';
$a->strings['Example: bob@example.com, http://example.com/barbara'] = 'Example: bob@example.com, http://example.com/barbara';
@@ -130,7 +118,7 @@ $a->strings['Unable to set your contact credentials on our system.'] = 'Unable t
$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['Administrator'] = 'Administrator';
-$a->strings['New mail received at '] = 'New mail received at ';
+$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 ';
@@ -173,6 +161,7 @@ $a->strings['Your profile address:'] = 'Your profile address:';
$a->strings['Submit Request'] = 'Submit Request';
$a->strings['Cancel'] = 'Cancel';
$a->strings['Global Directory'] = 'Global Directory';
+$a->strings['Item not found.'] = 'Item not found.';
$a->strings['Private Message'] = 'Private Message';
$a->strings['This is you'] = 'This is you';
$a->strings['View $name\'s profile'] = 'View $name\'s profile';
@@ -228,6 +217,17 @@ $a->strings['Your message:'] = 'Your message:';
$a->strings['Please join my social network on '] = 'Please join my social network on ';
$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['Unable to locate original post.'] = 'Unable to locate original post.';
+$a->strings['Empty post discarded.'] = 'Empty post discarded.';
+$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.'] = '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['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['photo'] = 'photo';
$a->strings['status'] = 'status';
$a->strings['likes'] = 'likes';
@@ -480,7 +480,13 @@ $a->strings['Uncertain'] = 'Uncertain';
$a->strings['Complicated'] = 'Complicated';
$a->strings['Don\'t care'] = 'Don\'t care';
$a->strings['Ask me'] = 'Ask me';
-$a->strings['Facebook status update failed.'] = 'Facebook status update failed.';
+$a->strings['Facebook disabled'] = 'Facebook disabled';
+$a->strings['Facebook API key is missing.'] = 'Facebook API key is missing.';
+$a->strings['Facebook Connect'] = 'Facebook Connect';
+$a->strings['Install Facebook posting'] = 'Install Facebook posting';
+$a->strings['Remove Facebook posting'] = 'Remove Facebook posting';
+$a->strings['Post to Facebook'] = 'Post to Facebook';
+$a->strings['Image: '] = 'Image: ';
$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';
@@ -496,7 +502,7 @@ $a->strings['Enable Randplace Plugin'] = 'Enable Randplace Plugin';
$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.'] = '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.';
$a->strings['OAuth Consumer Key'] = 'OAuth Consumer Key';
$a->strings['OAuth Consumer Secret'] = 'OAuth Consumer Secret';
-$a->strings['Base API Path (remember the trailing /] = 'Base API Path (remember the trailing /;
+$a->strings["Base API Path \x28remember the trailing /\x29"] = "Base API Path \x28remember the trailing /\x29";
$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'] = 'Log in with StatusNet';
$a->strings['Copy the security code from StatusNet here'] = 'Copy the security code from StatusNet here';
@@ -504,6 +510,7 @@ $a->strings['Currently connected to: '] = 'Currently connected to: ';
$a->strings['If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account as well.'] = 'If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account as well.';
$a->strings['Send public postings to StatusNet'] = 'Send public postings to StatusNet';
$a->strings['Clear OAuth configuration'] = 'Clear OAuth configuration';
+$a->strings['Post to Twitter'] = 'Post to Twitter';
$a->strings['Twitter Posting Settings'] = 'Twitter Posting Settings';
$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.'] = '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.';
@@ -658,7 +665,6 @@ $a->strings['America/Managua'] = 'America/Managua';
$a->strings['America/Manaus'] = 'America/Manaus';
$a->strings['America/Marigot'] = 'America/Marigot';
$a->strings['America/Martinique'] = 'America/Martinique';
-$a->strings['America/Matamoros'] = 'America/Matamoros';
$a->strings['America/Mazatlan'] = 'America/Mazatlan';
$a->strings['America/Mendoza'] = 'America/Mendoza';
$a->strings['America/Menominee'] = 'America/Menominee';
@@ -677,7 +683,6 @@ $a->strings['America/Nome'] = 'America/Nome';
$a->strings['America/Noronha'] = 'America/Noronha';
$a->strings['America/North_Dakota/Center'] = 'America/North_Dakota/Center';
$a->strings['America/North_Dakota/New_Salem'] = 'America/North_Dakota/New_Salem';
-$a->strings['America/Ojinaga'] = 'America/Ojinaga';
$a->strings['America/Panama'] = 'America/Panama';
$a->strings['America/Pangnirtung'] = 'America/Pangnirtung';
$a->strings['America/Paramaribo'] = 'America/Paramaribo';
@@ -694,7 +699,6 @@ $a->strings['America/Regina'] = 'America/Regina';
$a->strings['America/Resolute'] = 'America/Resolute';
$a->strings['America/Rio_Branco'] = 'America/Rio_Branco';
$a->strings['America/Rosario'] = 'America/Rosario';
-$a->strings['America/Santa_Isabel'] = 'America/Santa_Isabel';
$a->strings['America/Santarem'] = 'America/Santarem';
$a->strings['America/Santiago'] = 'America/Santiago';
$a->strings['America/Santo_Domingo'] = 'America/Santo_Domingo';
@@ -723,7 +727,6 @@ $a->strings['America/Yellowknife'] = 'America/Yellowknife';
$a->strings['Antarctica/Casey'] = 'Antarctica/Casey';
$a->strings['Antarctica/Davis'] = 'Antarctica/Davis';
$a->strings['Antarctica/DumontDUrville'] = 'Antarctica/DumontDUrville';
-$a->strings['Antarctica/Macquarie'] = 'Antarctica/Macquarie';
$a->strings['Antarctica/Mawson'] = 'Antarctica/Mawson';
$a->strings['Antarctica/McMurdo'] = 'Antarctica/McMurdo';
$a->strings['Antarctica/Palmer'] = 'Antarctica/Palmer';
@@ -786,7 +789,6 @@ $a->strings['Asia/Makassar'] = 'Asia/Makassar';
$a->strings['Asia/Manila'] = 'Asia/Manila';
$a->strings['Asia/Muscat'] = 'Asia/Muscat';
$a->strings['Asia/Nicosia'] = 'Asia/Nicosia';
-$a->strings['Asia/Novokuznetsk'] = 'Asia/Novokuznetsk';
$a->strings['Asia/Novosibirsk'] = 'Asia/Novosibirsk';
$a->strings['Asia/Omsk'] = 'Asia/Omsk';
$a->strings['Asia/Oral'] = 'Asia/Oral';
diff --git a/view/comment_item.tpl b/view/comment_item.tpl
index 885d735ed..dabbd6e87 100644
--- a/view/comment_item.tpl
+++ b/view/comment_item.tpl
@@ -4,6 +4,7 @@
<input type="hidden" name="profile_uid" value="$profile_uid" />
<input type="hidden" name="parent" value="$parent" />
<input type="hidden" name="return" value="$return_path" />
+ <input type="hidden" name="jsreload" value="$jsreload" />
<div class="comment-edit-photo" id="comment-edit-photo-$id" >
<a class="comment-edit-photo-link" href="$mylink" title="$mytitle"><img class="my-comment-photo" src="$myphoto" alt="$mytitle" title="$mytitle" /></a>
diff --git a/view/de/mail_received_html_body_eml.tpl b/view/de/mail_received_html_body_eml.tpl
index b2d914f24..32c5a651a 100644
--- a/view/de/mail_received_html_body_eml.tpl
+++ b/view/de/mail_received_html_body_eml.tpl
@@ -7,7 +7,7 @@
<body>
<table style="border:1px solid #ccc">
<tbody>
- <tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$hostname/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
+ <tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
<tr><td style="padding-top:22px;" colspan="2">Du hast eine neue private Nachricht von '$from' auf '$siteName' erhhalten.</td></tr>
@@ -16,7 +16,7 @@
<td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
<tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr>
<tr><td style="padding-right:22px;">$htmlversion</td></tr>
- <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Bitte melde dich unter $siteurl an um deine privaten Nachrichte zu lesen und zu beantworten.</td></tr>
+ <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Bitte melde dich unter <a href="$siteurl"$siteurl</a> an um deine privaten Nachrichte zu lesen und zu beantworten.</td></tr>
<tr><td></td><td>Viele Grüße,</td></tr>
<tr><td></td><td>$siteName Administrator</td></tr>
</tbody>
diff --git a/view/de/msg-header.tpl b/view/de/msg-header.tpl
index 3d2567f62..174e6c985 100644
--- a/view/de/msg-header.tpl
+++ b/view/de/msg-header.tpl
@@ -6,14 +6,14 @@ tinyMCE.init({
theme : "advanced",
mode : "specific_textareas",
editor_selector: /(profile-jot-text|prvmail-text)/,
- plugins : "bbcode",
+ 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_styles : "Code=codeStyle;Quote=quoteStyle",
- content_css : "bbcode.css",
+ theme_advanced_blockformats : "blockquote,code",
+ paste_text_sticky : true,
entity_encoding : "raw",
add_unload_trigger : false,
remove_linebreaks : false,
@@ -44,8 +44,12 @@ tinyMCE.init({
$('#character-counter').addClass('red');
}
$('#character-counter').text(text);
- });
- }
+ });
+
+ ed.onInit.add(function(ed) {
+ ed.pasteAsPlainText = true;
+ });
+ }
});
</script>
diff --git a/view/de/strings.php b/view/de/strings.php
index bc31fab78..ef6892e8d 100644
--- a/view/de/strings.php
+++ b/view/de/strings.php
@@ -57,6 +57,18 @@ $a->strings['December'] = 'Dezember';
$a->strings['Birthdays this week:'] = 'Geburtstage diese Woche:';
$a->strings["\x28Adjusted for local time\x29"] = "\x28an die lokale Zeit angepasst\x29";
$a->strings['[today]'] = '[heute]';
+$a->strings['Unable to locate original post.'] = 'Unable to locate original post.';
+$a->strings['Empty post discarded.'] = 'Empty post discarded.';
+$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.'] = '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['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';
@@ -76,6 +88,9 @@ $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["\x28Update was successful\x29"] = "\x28Aktualisierung war erfolgreich\x29";
+$a->strings["\x28Update was not successful\x29"] = "\x28Aktualisierung war nicht erfolgreich\x29";
$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';
@@ -83,7 +98,6 @@ $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['Never'] = 'Niemals';
$a->strings['Update now'] = 'Jetzt aktualisieren';
$a->strings['Unblock this contact'] = 'Blockade dieses Kontakts aufheben';
$a->strings['Block this contact'] = 'Diesen Kontakt blockieren';
@@ -159,7 +173,6 @@ $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['Item not found.'] = 'Eintrag nicht gefunden.';
$a->strings['Private Message'] = 'Private Nachricht';
$a->strings['This is you'] = 'Das bist du';
$a->strings['View $name\'s profile'] = 'Profile von $name';
@@ -215,16 +228,6 @@ $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['Unable to locate original post.'] = 'Konnte das original Posting nicht finden.';
-$a->strings['Empty post discarded.'] = 'Leere Nachricht verworfen.';
-$a->strings['Wall Photos'] = 'Pinnwand Fotos';
-$a->strings[" commented on your item at "] = " kommentierte eines deiner Postings auf ";
-$a->strings[" posted on your profile wall at "] = " schrieb an deine Profilwand auf ";
-$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['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['photo'] = 'Foto';
$a->strings['status'] = 'Status';
$a->strings['likes'] = 'mag das';
@@ -356,7 +359,9 @@ $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['View in context'] = 'Im Kontext betrachten';
+$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['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.';
@@ -364,6 +369,7 @@ $a->strings['Password update failed. Please try again.'] = 'Aktualisierung des P
$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';
@@ -487,6 +493,23 @@ $a->strings['File has an invalid extension, it should be one of '] = 'Die Dateie
$a->strings['Upload was cancelled, or server error encountered'] = 'Upload abgebrochen oder Serverfehler aufgetreten';
$a->strings['Randplace Settings'] = 'Randplace Settings';
$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.'] = '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.';
+$a->strings['OAuth Consumer Key'] = 'OAuth Consumer Key';
+$a->strings['OAuth Consumer Secret'] = 'OAuth Consumer Secret';
+$a->strings['Base API Path (remember the trailing /] = 'Base API Path (remember the trailing /;
+$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'] = 'Log in with StatusNet';
+$a->strings['Copy the security code from StatusNet here'] = 'Copy the security code from StatusNet here';
+$a->strings['Currently connected to: '] = 'Currently connected to: ';
+$a->strings['If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account as well.'] = 'If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account as well.';
+$a->strings['Send public postings to StatusNet'] = 'Send public postings to StatusNet';
+$a->strings['Clear OAuth configuration'] = 'Clear OAuth configuration';
+$a->strings['Twitter Posting Settings'] = 'Twitter Posting Settings';
+$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.'] = '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.';
+$a->strings['Copy the PIN from Twitter here'] = 'Copy the PIN from Twitter here';
+$a->strings['If enabled all your <strong>public</strong> postings will be posted to the associated Twitter account as well.'] = 'If enabled all your <strong>public</strong> postings will be posted to the associated Twitter account as well.';
+$a->strings['Send public postings to Twitter'] = 'Send public postings to Twitter';
$a->strings['Africa/Abidjan'] = 'Africa/Abidjan';
$a->strings['Africa/Accra'] = 'Africa/Accra';
$a->strings['Africa/Addis_Ababa'] = 'Africa/Addis_Ababa';
diff --git a/view/de/wallwall_item.tpl b/view/de/wallwall_item.tpl
index fd05a74ac..67b6006cf 100644
--- a/view/de/wallwall_item.tpl
+++ b/view/de/wallwall_item.tpl
@@ -21,6 +21,7 @@
<div class="wall-item-title" id="wall-item-title-$id">$title</div>
<div class="wall-item-body" id="wall-item-body-$id" >$body</div>
</div>
+ $plink
$drop
</div>
<div class="wall-item-wrapper-end"></div>
diff --git a/view/en/mail_received_html_body_eml.tpl b/view/en/mail_received_html_body_eml.tpl
index 981aa46e7..56cbf1d7c 100644
--- a/view/en/mail_received_html_body_eml.tpl
+++ b/view/en/mail_received_html_body_eml.tpl
@@ -7,7 +7,7 @@
<body>
<table style="border:1px solid #ccc">
<tbody>
- <tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$hostname/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
+ <tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
<tr><td style="padding-top:22px;" colspan="2">$from sent you a new private message at $siteName.</td></tr>
@@ -16,7 +16,7 @@
<td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
<tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr>
<tr><td style="padding-right:22px;">$htmlversion</td></tr>
- <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Please login at $siteurl to read and reply to your private messages.</td></tr>
+ <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Please login at <a href="$siteurl">$siteurl</a> to read and reply to your private messages.</td></tr>
<tr><td></td><td>Thank You,</td></tr>
<tr><td></td><td>$siteName Administrator</td></tr>
</tbody>
diff --git a/view/en/msg-header.tpl b/view/en/msg-header.tpl
index 3d2567f62..174e6c985 100644
--- a/view/en/msg-header.tpl
+++ b/view/en/msg-header.tpl
@@ -6,14 +6,14 @@ tinyMCE.init({
theme : "advanced",
mode : "specific_textareas",
editor_selector: /(profile-jot-text|prvmail-text)/,
- plugins : "bbcode",
+ 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_styles : "Code=codeStyle;Quote=quoteStyle",
- content_css : "bbcode.css",
+ theme_advanced_blockformats : "blockquote,code",
+ paste_text_sticky : true,
entity_encoding : "raw",
add_unload_trigger : false,
remove_linebreaks : false,
@@ -44,8 +44,12 @@ tinyMCE.init({
$('#character-counter').addClass('red');
}
$('#character-counter').text(text);
- });
- }
+ });
+
+ ed.onInit.add(function(ed) {
+ ed.pasteAsPlainText = true;
+ });
+ }
});
</script>
diff --git a/view/en/wallwall_item.tpl b/view/en/wallwall_item.tpl
index f8affd1c5..9c6ad6070 100644
--- a/view/en/wallwall_item.tpl
+++ b/view/en/wallwall_item.tpl
@@ -21,6 +21,7 @@
<div class="wall-item-title" id="wall-item-title-$id">$title</div>
<div class="wall-item-body" id="wall-item-body-$id" >$body</div>
</div>
+ $plink
$drop
</div>
<div class="wall-item-wrapper-end"></div>
diff --git a/view/fr/mail_received_html_body_eml.tpl b/view/fr/mail_received_html_body_eml.tpl
index 43584a4c4..d60bbe70c 100644
--- a/view/fr/mail_received_html_body_eml.tpl
+++ b/view/fr/mail_received_html_body_eml.tpl
@@ -7,7 +7,7 @@
<body>
<table style="border:1px solid #ccc">
<tbody>
- <tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$hostname/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
+ <tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
<tr><td style="padding-top:22px;" colspan="2">$from t'a envoyŽ un message ˆ $siteName.</td></tr>
@@ -16,7 +16,7 @@
<td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
<tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr>
<tr><td style="padding-right:22px;">$htmlversion</td></tr>
- <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Ouvrez une session svp ˆ $siteurl pour lire et rŽpondre ˆ vos messages privŽs.</td></tr>
+ <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Ouvrez une session svp ˆ <a href="$siteurl">$siteurl</a> pour lire et rŽpondre ˆ vos messages privŽs.</td></tr>
<tr><td></td><td>Merci,</td></tr>
<tr><td></td><td>$siteName Administrateur</td></tr>
</tbody>
diff --git a/view/fr/msg-header.tpl b/view/fr/msg-header.tpl
index 3d2567f62..174e6c985 100644
--- a/view/fr/msg-header.tpl
+++ b/view/fr/msg-header.tpl
@@ -6,14 +6,14 @@ tinyMCE.init({
theme : "advanced",
mode : "specific_textareas",
editor_selector: /(profile-jot-text|prvmail-text)/,
- plugins : "bbcode",
+ 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_styles : "Code=codeStyle;Quote=quoteStyle",
- content_css : "bbcode.css",
+ theme_advanced_blockformats : "blockquote,code",
+ paste_text_sticky : true,
entity_encoding : "raw",
add_unload_trigger : false,
remove_linebreaks : false,
@@ -44,8 +44,12 @@ tinyMCE.init({
$('#character-counter').addClass('red');
}
$('#character-counter').text(text);
- });
- }
+ });
+
+ ed.onInit.add(function(ed) {
+ ed.pasteAsPlainText = true;
+ });
+ }
});
</script>
diff --git a/view/fr/wallwall_item.tpl b/view/fr/wallwall_item.tpl
index f8affd1c5..9c6ad6070 100644
--- a/view/fr/wallwall_item.tpl
+++ b/view/fr/wallwall_item.tpl
@@ -21,6 +21,7 @@
<div class="wall-item-title" id="wall-item-title-$id">$title</div>
<div class="wall-item-body" id="wall-item-body-$id" >$body</div>
</div>
+ $plink
$drop
</div>
<div class="wall-item-wrapper-end"></div>
diff --git a/view/it/mail_received_html_body_eml.tpl b/view/it/mail_received_html_body_eml.tpl
index a3c71cef9..7510f2b30 100644
--- a/view/it/mail_received_html_body_eml.tpl
+++ b/view/it/mail_received_html_body_eml.tpl
@@ -7,7 +7,7 @@
<body>
<table style="border:1px solid #ccc">
<tbody>
- <tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$hostname/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
+ <tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
<tr><td style="padding-top:22px;" colspan="2">Hai ricevuto un nuovo messsaggio privato su $siteName da '$from'.</td></tr>
@@ -16,7 +16,7 @@
<td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
<tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr>
<tr><td style="padding-right:22px;">$htmlversion</td></tr>
- <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Accedi a $siteurl per leggere e rispondere ai tuoi messaggi privati.</td></tr>
+ <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Accedi a <a href="$siteurl">$siteurl</a> per leggere e rispondere ai tuoi messaggi privati.</td></tr>
<tr><td></td><td>Grazie,</td></tr>
<tr><td></td><td>L'amministratore di $siteName</td></tr>
</tbody>
diff --git a/view/it/msg-header.tpl b/view/it/msg-header.tpl
index f6f437864..69e813ae2 100644
--- a/view/it/msg-header.tpl
+++ b/view/it/msg-header.tpl
@@ -6,14 +6,14 @@ tinyMCE.init({
theme : "advanced",
mode : "specific_textareas",
editor_selector: /(profile-jot-text|prvmail-text)/,
- plugins : "bbcode",
+ 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_styles : "Code=codeStyle;Quote=quoteStyle",
- content_css : "bbcode.css",
+ theme_advanced_blockformats : "blockquote,code",
+ paste_text_sticky : true,
entity_encoding : "raw",
add_unload_trigger : false,
remove_linebreaks : false,
@@ -44,8 +44,12 @@ tinyMCE.init({
$('#character-counter').addClass('red');
}
$('#character-counter').text(text);
- });
- }
+ });
+
+ ed.onInit.add(function(ed) {
+ ed.pasteAsPlainText = true;
+ });
+ }
});
</script>
diff --git a/view/it/settings_nick_unset.tpl b/view/it/settings_nick_unset.tpl
index 903768b59..8f4cba475 100644
--- a/view/it/settings_nick_unset.tpl
+++ b/view/it/settings_nick_unset.tpl
@@ -1,13 +1,14 @@
<div id="settings-nick-wrapper" >
<p id="settings-nickname-desc">
-Your profile URL is currently <strong>'$baseurl/profile/$uid'</strong>.
-Setting a nickname will allow a friendly profile URL such as
-<strong>'nickname@$basepath'</strong>.
+L'URL del tuo profilo &egrave; <strong>'$baseurl/profile/$uid'</strong>.
+Impostare un soprannome permetter&agrave; di avere un URL più aimchevole, come
+<strong>'soprannome@$basepath'</strong>.
<br />
-Once set, it can never be changed. The nickname <strong>must</strong> start with a letter; and only letters, numbers, dashes, and underscores are allowed.
+Una volta impostato, non potr&agreve; pi&ugrave; essere cambiato. Il soprannome <strong>deve</strong>
+cominciare con una lettera; nel soprannome sono permessi solo lettere, numeri, trattini (-) e underscore (_).
</p>
-<label id="settings-nick-label" for="settings-nick" >URL Nickname: </label>
+<label id="settings-nick-label" for="settings-nick" >Soprannome: </label>
<input type="text" name="nick" id="settings-nick" value="$nickname" />
</div>
<div id="settings-nick-end" ></div>
diff --git a/view/it/strings.php b/view/it/strings.php
index 2c429cc8a..d04e02167 100644
--- a/view/it/strings.php
+++ b/view/it/strings.php
@@ -1052,4 +1052,37 @@ $a->strings['File has an invalid extension, it should be one of '] = 'Il file ha
$a->strings['Upload was cancelled, or server error encountered'] = 'Il caricamento è stato cancellato, o si è verificato un errore sul server';
$a->strings['Randplace Settings'] = 'Impostazioni Randplace';
$a->strings['Enable Randplace Plugin'] = 'Abilita il plugin Randplace';
+$a->strings['System error. Post not saved.'] = 'Errore di sistema. Messaggio non salvato.';
+$a->strings['(Update was successful)'] = '(L\'aggiornamento è stato completato)';
+$a->strings['(Update was not successful)'] = '(L\'aggiornamento non è stato completato)';
+$a->strings['Remove My Account'] = 'Rimuovi il mio Account';
+$a->strings['This will completely remove your account. Once this has been done it is not recoverable.'] = 'Questo rimuoverà completamente il tuo account. Una volta rimosso non si potrà recuperarlo.';
+$a->strings['Please enter your password for verification:'] = 'Inserisci la tua password per verifica:';
+$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.'] = 'Nessuna coppia di chiavi consumer per StatusNet trovata. Regitstra il tuo Account Friendika come un client desktop sul tuo account StatusNet, copia la coppia di chiavi qui e inserisci l\'url di base delle API.<br />Prima di registrare la tua coppia di chiavi OAuth, chiedi all\'amministratore se esiste già una coppia di chiavi per questa installazione di Friendika sulla installazione di StatusNet che ti interessa.';
+$a->strings['OAuth Consumer Key'] = 'OAuth Consumer Key';
+$a->strings['OAuth Consumer Secret'] = 'OAuth Consumer Secret';
+$a->strings['Base API Path (remember the trailing /)'] = 'Indirizzo di base per le API (ricorda la / alla fine)';
+$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.'] = 'Per collegare il tuo account StatusNet, clicca sul bottone qui sotto per ottenere un codice di sicurezza da StatusNet, che dovrai copiare nel box più sotto per poi inviare la form. Solo i tuoi messaggi <strong>pubblci</strong> saranno inviati a StatusNet.';
+$a->strings['Log in with StatusNet'] = 'Login con StatuNet';
+$a->strings['Copy the security code from StatusNet here'] = 'Copia il codice di sicurezza da StatusNet qui';
+$a->strings['Currently connected to: '] = 'Al momento collegato con:';
+$a->strings['If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account as well.'] = 'Se abilitato tutti i tuoi messaggi <strong>pubblici</strong> verranno inviati anche sull\'account StatusNet associato.';
+$a->strings['Send public postings to StatusNet'] = 'Invia messaggi pubblici su StatusNet';
+$a->strings['Clear OAuth configuration'] = 'Cancella la configurazione OAuth';
+$a->strings['Twitter Posting Settings'] = 'Impostazioni Invio a Twitter';
+$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Nessuna coopia di chiavi per Twitter trovata. Contatta il tuo amministratore del sito.';
+$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.'] = 'Questa installazione di Friendika ha il plugin Twitter abilitato, ma non hai ancora collegato il tuo account locale con il tuo account su Twitter. Per farlo, clicca il bottone qui sotto per ottenere un PIN da Twitter, che dovrai copiare nel box più sotto per poi inviare la form. Solo i tuoi messaggi <strong>pubblici</strong> verranno inviati anche su Twitter.';
+$a->strings['Copy the PIN from Twitter here'] = 'Copia il PIN da Twitter qui';
+$a->strings['If enabled all your <strong>public</strong> postings will be posted to the associated Twitter account as well.'] = 'Se abilitato tutti i tuoi messaggi <strong>pubblici</strong> verranno inviati anche sull\'account Twitter associato.';
+$a->strings['Send public postings to Twitter'] = 'Invia messaggi pubblici su Twitter';
+$a->strings['noreply'] = 'nessuna risposta';
+$a->strings['Facebook disabled'] = 'Facebook disabilitato';
+$a->strings['Facebook API key is missing.'] = 'Chiave API Facebook mancante.';
+$a->strings['Facebook Connect'] = 'Facebook Connect';
+$a->strings['Install Facebook posting'] = 'Installa invio a Facebook';
+$a->strings['Remove Facebook posting'] = 'Rimuovi invio a Facebook';
+$a->strings['Post to Facebook'] = 'Invia a Facebook';
+$a->strings['Image: '] = 'Immagine: ';
+$a->strings['Base API Path \x28remember the trailing &#47;\x29'] = 'Indirizzo base API \x28ricorda il &#47; alla fine\x29';
+$a->strings['Post to Twitter'] = 'Inva a Twitter';
?>
diff --git a/view/it/wallwall_item.tpl b/view/it/wallwall_item.tpl
index bc2d3f2ec..3c7883fc8 100644
--- a/view/it/wallwall_item.tpl
+++ b/view/it/wallwall_item.tpl
@@ -21,6 +21,7 @@
<div class="wall-item-title" id="wall-item-title-$id">$title</div>
<div class="wall-item-body" id="wall-item-body-$id" >$body</div>
</div>
+ $plink
$drop
</div>
<div class="wall-item-wrapper-end"></div>
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css
index ac3562d1c..e3a5fd3e7 100644
--- a/view/theme/duepuntozero/style.css
+++ b/view/theme/duepuntozero/style.css
@@ -833,6 +833,13 @@ input#dfrn-url {
.wall-item-like-buttons img {
cursor: pointer;
}
+
+.wall-item-links-wrapper {
+ float: left;
+ margin-bottom: 5px;
+ margin-left: 5px;
+}
+
.wall-item-delete-wrapper {
float: right;
margin-top: 5px;
diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css
index a87252016..d34c81a45 100644
--- a/view/theme/loozah/style.css
+++ b/view/theme/loozah/style.css
@@ -962,6 +962,13 @@ input#dfrn-url {
.wall-item-like-buttons img {
cursor: pointer;
}
+
+.wall-item-links-wrapper {
+ float: left;
+ margin-top: 100px;
+ margin-left: 10px;
+}
+
.wall-item-delete-wrapper {
float: right;
margin-top: 20px;
diff --git a/view/wall_item.tpl b/view/wall_item.tpl
index 67fce4152..b9f27ed4a 100644
--- a/view/wall_item.tpl
+++ b/view/wall_item.tpl
@@ -16,6 +16,7 @@
<div class="wall-item-title" id="wall-item-title-$id">$title</div>
<div class="wall-item-body" id="wall-item-body-$id" >$body</div>
</div>
+ $plink
$drop
</div>
<div class="wall-item-wrapper-end"></div>