From 65d235017c3536762fd0766976c60337aaac59cb Mon Sep 17 00:00:00 2001 From: Fabrixxm Date: Wed, 17 Oct 2012 11:13:01 -0400 Subject: [PATCH 1/8] move account. first step. export basic account data as json import basic account data in db (dbs must be at same schema version) --- include/dba.php | 2 +- include/uimport.php | 235 ++++++++++++++++++++++++++++++++++++++++++++ mod/register.php | 6 +- mod/uexport.php | 183 ++++++++++++++++++++++++++++------ mod/uimport.php | 50 ++++++++++ view/register.tpl | 1 + view/uexport.tpl | 9 ++ view/uimport.tpl | 11 +++ 8 files changed, 465 insertions(+), 32 deletions(-) create mode 100644 include/uimport.php create mode 100644 mod/uimport.php create mode 100644 view/uexport.tpl create mode 100644 view/uimport.tpl diff --git a/include/dba.php b/include/dba.php index 8d224b570..63b75c494 100644 --- a/include/dba.php +++ b/include/dba.php @@ -233,7 +233,7 @@ function q($sql) { if($db && $db->connected) { $stmt = vsprintf($sql,$args); if($stmt === false) - logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true)); + logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG); return $db->q($stmt); } diff --git a/include/uimport.php b/include/uimport.php new file mode 100644 index 000000000..0de665240 --- /dev/null +++ b/include/uimport.php @@ -0,0 +1,235 @@ +mysqli){ + $thedb = $db->getdb(); + return $thedb->insert_id; + } else { + return mysql_insert_id(); + } + } + + function last_error(){ + global $db; + return $db->error; + } + + function db_import_assoc($table, $arr){ + if (IMPORT_DEBUG) return true; + if (isset($arr['id'])) unset($arr['id']); + $cols = implode("`,`", array_map('dbesc', array_keys($arr))); + $vals = implode("','", array_map('dbesc', array_values($arr))); + $query = "INSERT INTO `$table` (`$cols`) VALUES ('$vals')"; + logger("uimport: $query",LOGGER_TRACE); + return q($query); + } + +function import_cleanup($newuid) { + q("DELETE FROM `user` WHERE uid = %d", $newuid); + q("DELETE FROM `contact` WHERE uid = %d", $newuid); + q("DELETE FROM `profile` WHERE uid = %d", $newuid); + q("DELETE FROM `photo` WHERE uid = %d", $newuid); + q("DELETE FROM `group` WHERE uid = %d", $newuid); + q("DELETE FROM `group_member` WHERE uid = %d", $newuid); + q("DELETE FROM `pconfig` WHERE uid = %d", $newuid); + +} + +function import_account(&$a, $file) { + logger("Start user import from ".$file['tmp_name']); + /* + STEPS + 1. checks + 2. replace old baseurl with new baseurl + 3. import data (look at user id and contacts id) + 4. archive non-dfrn contacts + 5. send message to dfrn contacts + */ + + $account = json_decode(file_get_contents($file['tmp_name']), true); + if ($account===null) { + notice(t("Error decoding account file")); + return; + } + + + if (!x($account, 'version')) { + notice(t("Error! No version data in file! This is not a Friendica account file?")); + return; + } + + if ($account['schema'] != DB_UPDATE_VERSION) { + notice(t("Error! I can't import this file: DB schema version is not compatible.")); + return; + } + + + $oldbaseurl = $account['baseurl']; + $newbaseurl = $a->get_baseurl(); + $olduid = $account['user']['uid']; + + unset($account['user']['uid']); + foreach($account['user'] as $k => &$v) { + $v = str_replace($oldbaseurl, $newbaseurl, $v); + } + + + // import user + $r = db_import_assoc('user', $account['user']); + if ($r===false) { + //echo "
"; var_dump($r, $query, mysql_error()); killme();
+        logger("uimport:insert user : ERROR : ".last_error(), LOGGER_NORMAL);
+        notice(t("User creation error"));
+        return;
+    }
+    $newuid = last_insert_id();
+    //~ $newuid = 1;
+    
+
+
+    foreach($account['profile'] as &$profile) {
+        foreach($profile as $k=>&$v) {
+            $v = str_replace($oldbaseurl, $newbaseurl, $v);
+            foreach(array("profile","avatar") as $k)
+                $v = str_replace($newbaseurl."/photo/".$k."/".$olduid.".jpg", $newbaseurl."/photo/".$k."/".$newuid.".jpg", $v);
+        }
+        $profile['uid'] = $newuid;
+        $r = db_import_assoc('profile', $profile);
+        if ($r===false) {
+            logger("uimport:insert profile ".$profile['profile-name']." : ERROR : ".last_error(), LOGGER_NORMAL);
+            info(t("User profile creation error"));
+            import_cleanup($newuid);
+            return;
+        }
+    }
+
+    $errorcount=0;
+    foreach($account['contact'] as &$contact) {
+        if ($contact['uid'] == $olduid && $contact['self'] == '1'){
+            foreach($contact as $k=>&$v) {
+                $v = str_replace($oldbaseurl, $newbaseurl, $v);
+                foreach(array("profile","avatar","micro") as $k)
+                    $v = str_replace($newbaseurl."/photo/".$k."/".$olduid.".jpg", $newbaseurl."/photo/".$k."/".$newuid.".jpg", $v);
+            }
+        }
+         if ($contact['uid'] == $olduid && $contact['self'] == '0') {
+            switch ($contact['network']){
+                case NETWORK_DFRN:
+                    // send moved message
+                    break;
+                case NETWORK_ZOT:
+                    // TODO handle zot network
+                    break;
+                case NETWORK_MAIL2:
+                    // TODO ?
+                    break;
+                case NETWORK_FEED:
+                case NETWORK_MAIL:
+                    // Nothing to do
+                    break;
+                default:
+                    // archive other contacts
+                    $contact['archive'] = "1";
+            }
+        }
+        $contact['uid'] = $newuid;
+        $r = db_import_assoc('contact', $contact);
+        if ($r===false) {
+            logger("uimport:insert contact ".$contact['nick'].",".$contact['network']." : ERROR : ".last_error(), LOGGER_NORMAL);
+            $errorcount++;
+        } else {
+            $contact['newid'] = last_insert_id();
+        }
+    }
+    if ($errorcount>0) {
+        notice( sprintf(tt("%d contact not imported", "%d contacts not imported", $errorcount), $errorcount) );
+    }
+
+    foreach($account['group'] as &$group) {
+        $group['uid'] = $newuid;
+        $r = db_import_assoc('group', $group);
+        if ($r===false) {
+            logger("uimport:insert group ".$group['name']." : ERROR : ".last_error(), LOGGER_NORMAL);
+        } else {
+            $group['newid'] = last_insert_id();
+        }
+    }
+
+    foreach($account['group_member'] as &$group_member) {
+        $group_member['uid'] = $newuid;
+        
+        $import = 0;
+        foreach($account['group'] as $group) {
+            if ($group['id'] == $group_member['gid'] && isset($group['newid'])) {
+                $group_member['gid'] = $group['newid'];
+                $import++;
+                break;
+            }
+        }
+        foreach($account['contact'] as $contact) {
+            if ($contact['id'] == $group_member['contact-id'] && isset($contact['newid'])) {
+                $group_member['contact-id'] = $contact['newid'];
+                $import++;
+                break;
+            }
+        }
+        if ($import==2) {
+            $r = db_import_assoc('group_member', $group_member);
+            if ($r===false) {
+                logger("uimport:insert group member ".$group_member['id']." : ERROR : ".last_error(), LOGGER_NORMAL);
+            }
+        }
+    }
+
+
+
+    
+    
+    foreach($account['photo'] as &$photo) {
+        $photo['uid'] = $newuid;
+        $photo['data'] = hex2bin($photo['data']);
+        
+        $p = new Photo($photo['data'], $photo['type']);
+        $r = $p->store(
+            $photo['uid'],
+            $photo['contact-id'], //0
+            $photo['resource-id'],
+            $photo['filename'],
+            $photo['album'],
+            $photo['scale'],
+            $photo['profile'], //1
+            $photo['allow_cid'],
+            $photo['allow_gid'],
+            $photo['deny_cid'],
+            $photo['deny_gid']
+        );
+        
+        if ($r===false) {
+            logger("uimport:insert photo ".$photo['resource-id'].",". $photo['scale']. " : ERROR : ".last_error(), LOGGER_NORMAL);
+        }
+    } 
+    
+    foreach($account['pconfig'] as &$pconfig) {
+        $pconfig['uid'] = $newuid;
+        $r = db_import_assoc('pconfig', $pconfig);
+        if ($r===false) {
+            logger("uimport:insert pconfig ".$pconfig['id']. " : ERROR : ".last_error(), LOGGER_NORMAL);
+        }
+    } 
+     
+    
+    info(t("Done. You can now login with your username and password"));
+    goaway( $a->get_baseurl() ."/login");
+    
+    
+}
\ No newline at end of file
diff --git a/mod/register.php b/mod/register.php
index a8fa100c8..208f97bcb 100644
--- a/mod/register.php
+++ b/mod/register.php
@@ -42,6 +42,7 @@ function register_post(&$a) {
 		$verified = 0;
 		break;
 	}
+    
 
 	require_once('include/user.php');
 
@@ -234,7 +235,7 @@ function register_content(&$a) {
 			'$yes_selected' => ' checked="checked" ',
 			'$no_selected'  => '',
 			'$str_yes'      => t('Yes'),
-			'$str_no'       => t('No')
+			'$str_no'       => t('No'),
 		));
 	}
 
@@ -275,7 +276,8 @@ function register_content(&$a) {
 		'$email'     => $email,
 		'$nickname'  => $nickname,
 		'$license'   => $license,
-		'$sitename'  => $a->get_hostname()
+		'$sitename'  => $a->get_hostname(),
+      
 	));
 	return $o;
 
diff --git a/mod/uexport.php b/mod/uexport.php
index e1fb22855..f216f551f 100644
--- a/mod/uexport.php
+++ b/mod/uexport.php
@@ -1,46 +1,174 @@
  t('Account settings'),
+			'url' 	=> $a->get_baseurl(true).'/settings',
+			'selected'	=> '',
+		),	
+		array(
+			'label'	=> t('Display settings'),
+			'url' 	=> $a->get_baseurl(true).'/settings/display',
+			'selected'	=>'',
+		),	
+		
+		array(
+			'label'	=> t('Connector settings'),
+			'url' 	=> $a->get_baseurl(true).'/settings/connectors',
+			'selected'	=> '',
+		),
+		array(
+			'label'	=> t('Plugin settings'),
+			'url' 	=> $a->get_baseurl(true).'/settings/addon',
+			'selected'	=> '',
+		),
+		array(
+			'label' => t('Connected apps'),
+			'url' => $a->get_baseurl(true) . '/settings/oauth',
+			'selected' => '',
+		),
+		array(
+			'label' => t('Export personal data'),
+			'url' => $a->get_baseurl(true) . '/uexport',
+			'selected' => 'active'
+		),
+		array(
+			'label' => t('Remove account'),
+			'url' => $a->get_baseurl(true) . '/removeme',
+			'selected' => ''
+		)
 	);
+	
+	$tabtpl = get_markup_template("generic_links_widget.tpl");
+	$a->page['aside'] = replace_macros($tabtpl, array(
+		'$title' => t('Settings'),
+		'$class' => 'settings-widget',
+		'$items' => $tabs,
+	));
+}
+
+function uexport_content(&$a){
+    
+    if ($a->argc > 1) {
+        header("Content-type: application/json");
+        header('Content-Disposition: attachment; filename="'.$a->user['nickname'].'.'.$a->argv[1].'"');
+        switch($a->argv[1]) {
+            case "backup": uexport_all($a); killme(); break;
+            case "account": uexport_account($a); killme(); break;
+            default:
+                killme();
+        }
+    }
+
+    /**
+      * options shown on "Export personal data" page
+      * list of array( 'link url', 'link text', 'help text' )
+      */
+    $options = array(
+            array('/uexport/account',t('Export account'),t('Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server.')),
+            array('/uexport/backup',t('Export all'),t('Export your accout info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account (photos are not exported)')),
+    );
+    call_hooks('uexport_options', $options);
+        
+    $tpl = get_markup_template("uexport.tpl");
+    return replace_macros($tpl, array(
+        '$baseurl' => $a->get_baseurl(),
+        '$title' => t('Export personal data'),
+        '$options' => $options
+    ));
+    
+    
+}
+
+function _uexport_multirow($query) {
+	$result = array();
+	$r = q($query);
+	if(count($r)) {
+		foreach($r as $rr){
+            $p = array();
+			foreach($rr as $k => $v)
+				$p[$k] = $v;
+            $result[] = $p;
+        }
+	}
+    return $result;
+}
+
+function _uexport_row($query) {
+	$result = array();
+	$r = q($query);
 	if(count($r)) {
 		foreach($r as $rr)
 			foreach($rr as $k => $v)
-				$user[$k] = $v;
+				$result[$k] = $v;
 
 	}
-	$contact = array();
-	$r = q("SELECT * FROM `contact` WHERE `uid` = %d ",
-		intval(local_user())
+    return $result;
+}
+
+
+function uexport_account($a){
+
+	$user = _uexport_row(
+        sprintf( "SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", 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())
+    
+	$contact = _uexport_multirow(
+        sprintf( "SELECT * FROM `contact` 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");
+	$profile =_uexport_multirow(
+        sprintf( "SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()) )
+	);
+
+    $photo = _uexport_multirow(
+        sprintf( "SELECT * FROM photo WHERE uid = %d AND profile = 1", intval(local_user()) )
+    );
+    foreach ($photo as &$p) $p['data'] = bin2hex($p['data']);
+
+    $pconfig = _uexport_multirow(
+        sprintf( "SELECT * FROM pconfig WHERE uid = %d",intval(local_user()) )
+    );
+
+    $group = _uexport_multirow(
+        sprintf( "SELECT * FROM group WHERE uid = %d",intval(local_user()) )
+    );
+    
+    $group_member = _uexport_multirow(
+        sprintf( "SELECT * FROM group_member WHERE uid = %d",intval(local_user()) )
+    );
+
+	$output = array(
+        'version' => FRIENDICA_VERSION,
+        'schema' => DB_UPDATE_VERSION,
+        'baseurl' => $a->get_baseurl(),
+        'user' => $user, 
+        'contact' => $contact, 
+        'profile' => $profile, 
+        'photo' => $photo,
+        'pconfig' => $pconfig,
+        'group' => $group,
+        'group_member' => $group_member,
+    );
+
+    //echo "
"; var_dump(json_encode($output)); killme();
 	echo json_encode($output);
 
+}
+
+/**
+ * echoes account data and items as separated json, one per line
+ */
+function uexport_all(&$a) {
+    
+    uexport_account($a);
+
 	$r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
 		intval(local_user())
 	);
@@ -66,7 +194,4 @@ function uexport_init(&$a) {
 		echo json_encode($output);
 	}
 
-
-	killme();
-
 }
\ No newline at end of file
diff --git a/mod/uimport.php b/mod/uimport.php
new file mode 100644
index 000000000..f5f7366f5
--- /dev/null
+++ b/mod/uimport.php
@@ -0,0 +1,50 @@
+config['register_policy']) {
+        case REGISTER_OPEN:
+            $blocked = 0;
+            $verified = 1;
+            break;
+
+        case REGISTER_APPROVE:
+            $blocked = 1;
+            $verified = 0;
+            break;
+
+        default:
+        case REGISTER_CLOSED:
+            if((! x($_SESSION,'authenticated') && (! x($_SESSION,'administrator')))) {
+                notice( t('Permission denied.') . EOL );
+                return;
+            }
+            $blocked = 1;
+            $verified = 0;
+            break;
+	}
+    
+    if (x($_FILES,'accountfile')){
+        // TODO: pass $blocked / $verified, send email to admin on REGISTER_APPROVE
+        import_account($a, $_FILES['accountfile']);
+        return;
+    }
+}
+
+function uimport_content(&$a) {
+    $tpl = get_markup_template("uimport.tpl");
+    return replace_macros($tpl, array(
+        '$regbutt' => t('Import'),
+        '$import' => array(
+            'title' => t("Move account"),
+            'text' => t("You can move here an account from another Friendica server. 
+ You need to export your account form the old server and upload it here. We will create here your old account with all your contacts. We will try also to inform you friends that you moved here.
+ This feature is experimental. We can't move here contacts from ostatus network (statusnet/identi.ca) or from diaspora"), + 'field' => array('accountfile', t('Account file'),'', t('To export your accont, go to "Settings->Export your porsonal data" and select "Export account"')), + ), + )); +} diff --git a/view/register.tpl b/view/register.tpl index 8ce1d20ac..7cf11881a 100644 --- a/view/register.tpl +++ b/view/register.tpl @@ -55,6 +55,7 @@
+ $license diff --git a/view/uexport.tpl b/view/uexport.tpl new file mode 100644 index 000000000..30d11d58e --- /dev/null +++ b/view/uexport.tpl @@ -0,0 +1,9 @@ +

$title

+ + +{{ for $options as $o }} +
+
$o.1
+
$o.2
+
+{{ endfor }} \ No newline at end of file diff --git a/view/uimport.tpl b/view/uimport.tpl new file mode 100644 index 000000000..fb34addd4 --- /dev/null +++ b/view/uimport.tpl @@ -0,0 +1,11 @@ +
+

$import.title

+

$import.text

+ {{inc field_custom.tpl with $field=$import.field }}{{ endinc }} + + +
+ +
+
+
\ No newline at end of file From dbc6cbe024cabde32bcd75bf5f065ca5e273d18f Mon Sep 17 00:00:00 2001 From: Fabrixxm Date: Mon, 29 Oct 2012 17:48:08 +0100 Subject: [PATCH 2/8] moveme: send and receive DFRN "relocate" message (WIP) --- include/items.php | 58 ++++++++++++++++++++++++++++++++++++++---- include/notifier.php | 38 ++++++++++++++++++++++++--- include/uimport.php | 8 +++--- view/atom_relocate.tpl | 17 +++++++++++++ 4 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 view/atom_relocate.tpl diff --git a/include/items.php b/include/items.php index 9203f663c..0ca385c44 100755 --- a/include/items.php +++ b/include/items.php @@ -2305,7 +2305,7 @@ function local_delivery($importer,$data) { } -/* + // Currently unsupported - needs a lot of work $reloc = $feed->get_feed_tags( NAMESPACE_DFRN, 'relocate' ); if(isset($reloc[0]['child'][NAMESPACE_DFRN])) { @@ -2315,23 +2315,71 @@ function local_delivery($importer,$data) { $newloc['cid'] = $importer['id']; $newloc['name'] = notags(unxmlify($base['name'][0]['data'])); $newloc['photo'] = notags(unxmlify($base['photo'][0]['data'])); + $newloc['thumb'] = notags(unxmlify($base['thumb'][0]['data'])); + $newloc['micro'] = notags(unxmlify($base['micro'][0]['data'])); $newloc['url'] = notags(unxmlify($base['url'][0]['data'])); $newloc['request'] = notags(unxmlify($base['request'][0]['data'])); $newloc['confirm'] = notags(unxmlify($base['confirm'][0]['data'])); $newloc['notify'] = notags(unxmlify($base['notify'][0]['data'])); $newloc['poll'] = notags(unxmlify($base['poll'][0]['data'])); $newloc['site-pubkey'] = notags(unxmlify($base['site-pubkey'][0]['data'])); - $newloc['pubkey'] = notags(unxmlify($base['pubkey'][0]['data'])); - $newloc['prvkey'] = notags(unxmlify($base['prvkey'][0]['data'])); + /*$newloc['pubkey'] = notags(unxmlify($base['pubkey'][0]['data'])); + $newloc['prvkey'] = notags(unxmlify($base['prvkey'][0]['data']));*/ + log("items:relocate contact ".print_r($newloc, true), LOGGER_DEBUG); + + // update contact + $r = q("SELECT photo, url FROM contact WHERE WHERE id=%d AND uid=%d;", + intval($importer['importer_uid']), + intval($importer['id'])); + $old = $r[0]; + + $x = q("UPDATE contact SET + name = '%s', + photo = '%s', + thumb = '%s', + micro = '%s', + url = '%s', + request = '%s', + confirm = '%s', + notify = '%s', + poll = '%s', + site-pubkey = '%s' + WHERE id=%d AND uid=%d;", + dbesc($newloc['name']), + dbesc($newloc['photo']), + dbesc($newloc['thumb']), + dbesc($newloc['micro']), + dbesc($newloc['url']), + dbesc($newloc['request']), + dbesc($newloc['confirm']), + dbesc($newloc['notify']), + dbesc($newloc['poll']), + dbesc($newloc['site-pubkey']), + intval($importer['importer_uid']), + intval($importer['id'])); + + // update items + $fields = array( + 'owner-link' => array($old['url'], $newloc['url']), + 'author-link' => array($old['url'], $newloc['url']), + 'owner-avatar' => array($old['photo'], $newloc['photo']), + 'author-avatar' => array($old['photo'], $newloc['photo']), + ); + foreach ($fields as $n=>$f) + $x = q("UPDATE item SET `%s`='%s' WHERE `%s`='%s' AND uid=%d", + $n, dbesc($f[1]), + $n, dbesc($f[0]), + intval($importer['importer_uid'])); + // TODO // merge with current record, current contents have priority // update record, set url-updated // update profile photos // schedule a scan? - + return 0; } -*/ + // handle friend suggestion notification diff --git a/include/notifier.php b/include/notifier.php index 171b55fc3..88c90a856 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -89,6 +89,7 @@ function notifier_run($argv, $argc){ $expire = false; $mail = false; $fsuggest = false; + $relocate = false; $top_level = false; $recipients = array(); $url_recipients = array(); @@ -134,6 +135,11 @@ function notifier_run($argv, $argc){ $recipients[] = $suggest[0]['cid']; $item = $suggest[0]; } + elseif($cmd === 'relocate') { + $normal_mode = false; + $relocate = true; + $uid = $item_id; + } else { // find ancestors @@ -404,6 +410,29 @@ function notifier_run($argv, $argc){ ); } + elseif($relocate) { + $public_message = false; // suggestions are not public + + $sugg_template = get_markup_template('atom_relocate.tpl'); + + $atom .= replace_macros($sugg_template, array( + '$name' => xmlfy($owner['name']), + '$photo' => xmlfy($owner['photo']), + '$thumb' => xmlfy($owner['thumb']), + '$micro' => xmlfy($owner['micro']), + '$url' => xmlfy($owner['url']), + '$request' => xmlfy($owner['request']), + '$confirm' => xmlfy($owner['confirm']), + '$notify' => xmlfy($owner['notify']), + '$poll' => xmlfy($owner['poll']), + '$site-pubkey' => xmlfy(get_config('system','site_pubkey')), + //'$pubkey' => xmlfy($owner['pubkey']), + //'$prvkey' => xmlfy($owner['prvkey']), + )); + $recipients_relocate = q("SELECT * FROM contacts WHERE uid = %d AND self = 0 AND network = '%s'" , intval($uid), NETWORK_DFRN); + + + } else { if($followup) { foreach($items as $item) { // there is only one item @@ -479,9 +508,12 @@ function notifier_run($argv, $argc){ else $recip_str = implode(', ', $recipients); - $r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 AND `pending` = 0 ", - dbesc($recip_str) - ); + if ($relocate) + $r = $recipients_relocate; + else + $r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 AND `pending` = 0 ", + dbesc($recip_str) + ); require_once('include/salmon.php'); diff --git a/include/uimport.php b/include/uimport.php index 0de665240..942793168 100644 --- a/include/uimport.php +++ b/include/uimport.php @@ -125,7 +125,7 @@ function import_account(&$a, $file) { if ($contact['uid'] == $olduid && $contact['self'] == '0') { switch ($contact['network']){ case NETWORK_DFRN: - // send moved message + // send relocate message (below) break; case NETWORK_ZOT: // TODO handle zot network @@ -226,10 +226,12 @@ function import_account(&$a, $file) { logger("uimport:insert pconfig ".$pconfig['id']. " : ERROR : ".last_error(), LOGGER_NORMAL); } } - + + // send relocate messages + proc_run('php', 'include/notifier.php', 'relocate' , $newuid); info(t("Done. You can now login with your username and password")); goaway( $a->get_baseurl() ."/login"); -} \ No newline at end of file +} diff --git a/view/atom_relocate.tpl b/view/atom_relocate.tpl new file mode 100644 index 000000000..f7f8db97b --- /dev/null +++ b/view/atom_relocate.tpl @@ -0,0 +1,17 @@ + + + + $url + $name + $photo + $thumb + $micro + $request + $confirm + $notify + $poll + $site-pubkey + + + + From 1a3a5ee8d9e4e1f6b07c7736fab3e004b26046af Mon Sep 17 00:00:00 2001 From: Fabrixxm Date: Wed, 31 Oct 2012 17:13:45 +0100 Subject: [PATCH 3/8] moveme: first successful relocated user --- .gitignore | 53 +++++++++++++++++++++--------------------- boot.php | 14 +++++++++-- include/dba.php | 1 + include/delivery.php | 2 +- include/items.php | 35 +++++++++++++++++----------- include/notifier.php | 46 +++++++++++++++++++++--------------- include/uimport.php | 2 +- mod/dfrn_notify.php | 2 +- view/atom_relocate.tpl | 2 +- 9 files changed, 93 insertions(+), 64 deletions(-) diff --git a/.gitignore b/.gitignore index 5fe71a7a8..358114a44 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,27 @@ -favicon.* -.htconfig.php -\#* -include/jquery-1.4.2.min.js -*.log -*.out -*.version* -favicon.* -home.html -addon -*~ - -#ignore documentation, it should be newly built -doc/api - -#ignore reports, should be generted with every build -report/ - -#ignore config files from eclipse, we don't want IDE files in our repository -.project -.buildpath -.externalToolBuilders -.settings -#ignore OSX .DS_Store files -.DS_Store - +favicon.* +.htconfig.php +\#* +include/jquery-1.4.2.min.js +*.log +*.out +*.version* +favicon.* +home.html +addon +*~ + +#ignore documentation, it should be newly built +doc/api + +#ignore reports, should be generted with every build +report/ + +#ignore config files from eclipse, we don't want IDE files in our repository +.project +.buildpath +.externalToolBuilders +.settings +#ignore OSX .DS_Store files +.DS_Store + +/nbproject/private/ \ No newline at end of file diff --git a/boot.php b/boot.php index ad6c29b82..71304e53e 100644 --- a/boot.php +++ b/boot.php @@ -385,7 +385,7 @@ if(! class_exists('App')) { function __construct() { - global $default_timezone; + global $default_timezone, $argv, $argc; $this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC'); @@ -428,6 +428,9 @@ if(! class_exists('App')) { if(isset($path) && strlen($path) && ($path != $this->path)) $this->path = $path; } + if (is_array($argv) && $argc>1 && !x($_SERVER,'SERVER_NAME') && substr(end($argv), 0, 4)=="http" ) { + $this->set_baseurl(array_pop($argv) ); + } set_include_path( "include/$this->hostname" . PATH_SEPARATOR @@ -436,6 +439,7 @@ if(! class_exists('App')) { . 'library/phpsec' . PATH_SEPARATOR . 'library/langdet' . PATH_SEPARATOR . '.' ); + if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=") { $this->query_string = substr($_SERVER['QUERY_STRING'],2); @@ -1501,9 +1505,15 @@ if(! function_exists('proc_run')) { if(count($args) && $args[0] === 'php') $args[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php'); - for($x = 0; $x < count($args); $x ++) + + // add baseurl to args. cli scripts can't construct it + $args[] = $a->get_baseurl(); + + for($x = 0; $x < count($args); $x ++) $args[$x] = escapeshellarg($args[$x]); + + $cmdline = implode($args," "); if(get_config('system','proc_windows')) proc_close(proc_open('cmd /c start /b ' . $cmdline,array(),$foo)); diff --git a/include/dba.php b/include/dba.php index 63b75c494..9f2dab519 100644 --- a/include/dba.php +++ b/include/dba.php @@ -232,6 +232,7 @@ function q($sql) { if($db && $db->connected) { $stmt = vsprintf($sql,$args); + //logger("dba: q: $stmt", LOGGER_ALL); if($stmt === false) logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG); return $db->q($stmt); diff --git a/include/delivery.php b/include/delivery.php index 14226e4fb..d879deedb 100644 --- a/include/delivery.php +++ b/include/delivery.php @@ -3,7 +3,7 @@ require_once("boot.php"); require_once('include/queue_fn.php'); require_once('include/html2plain.php'); -function delivery_run($argv, $argc){ +function delivery_run(&$argv, &$argc){ global $a, $db; if(is_null($a)){ diff --git a/include/items.php b/include/items.php index 0ca385c44..426673484 100755 --- a/include/items.php +++ b/include/items.php @@ -2168,9 +2168,10 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) } function local_delivery($importer,$data) { - $a = get_app(); + logger(__function__, LOGGER_TRACE); + if($importer['readonly']) { // We aren't receiving stuff from this person. But we will quietly ignore them // rather than a blatant "go away" message. @@ -2322,16 +2323,19 @@ function local_delivery($importer,$data) { $newloc['confirm'] = notags(unxmlify($base['confirm'][0]['data'])); $newloc['notify'] = notags(unxmlify($base['notify'][0]['data'])); $newloc['poll'] = notags(unxmlify($base['poll'][0]['data'])); - $newloc['site-pubkey'] = notags(unxmlify($base['site-pubkey'][0]['data'])); + $newloc['sitepubkey'] = notags(unxmlify($base['sitepubkey'][0]['data'])); + /** relocated user must have original key pair */ /*$newloc['pubkey'] = notags(unxmlify($base['pubkey'][0]['data'])); $newloc['prvkey'] = notags(unxmlify($base['prvkey'][0]['data']));*/ - log("items:relocate contact ".print_r($newloc, true), LOGGER_DEBUG); + logger("items:relocate contact ".print_r($newloc, true).print_r($importer, true), LOGGER_DEBUG); // update contact - $r = q("SELECT photo, url FROM contact WHERE WHERE id=%d AND uid=%d;", - intval($importer['importer_uid']), - intval($importer['id'])); + $r = q("SELECT photo, url FROM contact WHERE id=%d AND uid=%d;", + intval($importer['id']), + intval($importer['importer_uid'])); + if ($r === false) + return 1; $old = $r[0]; $x = q("UPDATE contact SET @@ -2344,7 +2348,7 @@ function local_delivery($importer,$data) { confirm = '%s', notify = '%s', poll = '%s', - site-pubkey = '%s' + `site-pubkey` = '%s' WHERE id=%d AND uid=%d;", dbesc($newloc['name']), dbesc($newloc['photo']), @@ -2355,10 +2359,12 @@ function local_delivery($importer,$data) { dbesc($newloc['confirm']), dbesc($newloc['notify']), dbesc($newloc['poll']), - dbesc($newloc['site-pubkey']), - intval($importer['importer_uid']), - intval($importer['id'])); - + dbesc($newloc['sitepubkey']), + intval($importer['id']), + intval($importer['importer_uid'])); + + if ($x === false) + return 1; // update items $fields = array( 'owner-link' => array($old['url'], $newloc['url']), @@ -2366,12 +2372,15 @@ function local_delivery($importer,$data) { 'owner-avatar' => array($old['photo'], $newloc['photo']), 'author-avatar' => array($old['photo'], $newloc['photo']), ); - foreach ($fields as $n=>$f) + foreach ($fields as $n=>$f){ $x = q("UPDATE item SET `%s`='%s' WHERE `%s`='%s' AND uid=%d", $n, dbesc($f[1]), $n, dbesc($f[0]), intval($importer['importer_uid'])); - + if ($x === false) + return 1; + } + // TODO // merge with current record, current contents have priority // update record, set url-updated diff --git a/include/notifier.php b/include/notifier.php index 88c90a856..1d2c26fb2 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -1,5 +1,4 @@ xmlfy($owner['name']), - '$photo' => xmlfy($owner['photo']), - '$thumb' => xmlfy($owner['thumb']), - '$micro' => xmlfy($owner['micro']), - '$url' => xmlfy($owner['url']), - '$request' => xmlfy($owner['request']), - '$confirm' => xmlfy($owner['confirm']), - '$notify' => xmlfy($owner['notify']), - '$poll' => xmlfy($owner['poll']), - '$site-pubkey' => xmlfy(get_config('system','site_pubkey')), - //'$pubkey' => xmlfy($owner['pubkey']), - //'$prvkey' => xmlfy($owner['prvkey']), + '$name' => xmlify($owner['name']), + '$photo' => xmlify($owner['photo']), + '$thumb' => xmlify($owner['thumb']), + '$micro' => xmlify($owner['micro']), + '$url' => xmlify($owner['url']), + '$request' => xmlify($owner['request']), + '$confirm' => xmlify($owner['confirm']), + '$notify' => xmlify($owner['notify']), + '$poll' => xmlify($owner['poll']), + '$sitepubkey' => xmlify(get_config('system','site_pubkey')), + //'$pubkey' => xmlify($owner['pubkey']), + //'$prvkey' => xmlify($owner['prvkey']), )); - $recipients_relocate = q("SELECT * FROM contacts WHERE uid = %d AND self = 0 AND network = '%s'" , intval($uid), NETWORK_DFRN); - + $recipients_relocate = q("SELECT * FROM contact WHERE uid = %d AND self = 0 AND network = '%s'" , intval($uid), NETWORK_DFRN); } else { @@ -525,7 +532,7 @@ function notifier_run($argv, $argc){ if(count($r)) { foreach($r as $contact) { - if((! $mail) && (! $fsuggest) && (! $followup) && (! $contact['self'])) { + if((! $mail) && (! $fsuggest) && (! $followup) && (!$relocate) && (! $contact['self'])) { if(($contact['network'] === NETWORK_DIASPORA) && ($public_message)) continue; q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )", @@ -562,7 +569,7 @@ function notifier_run($argv, $argc){ // potentially more than one recipient. Start a new process and space them out a bit. // we will deliver single recipient types of message and email recipients here. - if((! $mail) && (! $fsuggest) && (! $followup)) { + if((! $mail) && (! $fsuggest) && (!$relocate) && (! $followup)) { $this_batch[] = $contact['id']; @@ -577,7 +584,7 @@ function notifier_run($argv, $argc){ $deliver_status = 0; - logger("main delivery by notifier: followup=$followup mail=$mail fsuggest=$fsuggest"); + logger("main delivery by notifier: followup=$followup mail=$mail fsuggest=$fsuggest relocate=$relocate"); switch($contact['network']) { case NETWORK_DFRN: @@ -934,6 +941,7 @@ function notifier_run($argv, $argc){ return; } + if (array_search(__file__,get_included_files())===0){ notifier_run($argv,$argc); killme(); diff --git a/include/uimport.php b/include/uimport.php index 942793168..e43f331dc 100644 --- a/include/uimport.php +++ b/include/uimport.php @@ -228,7 +228,7 @@ function import_account(&$a, $file) { } // send relocate messages - proc_run('php', 'include/notifier.php', 'relocate' , $newuid); + //proc_run('php', 'include/notifier.php', 'relocate' , $newuid); info(t("Done. You can now login with your username and password")); goaway( $a->get_baseurl() ."/login"); diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index e55da5572..b50602b6b 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -6,7 +6,7 @@ require_once('include/event.php'); function dfrn_notify_post(&$a) { - + logger(__function__, LOGGER_TRACE); $dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : ''); $dfrn_version = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0); $challenge = ((x($_POST,'challenge')) ? notags(trim($_POST['challenge'])) : ''); diff --git a/view/atom_relocate.tpl b/view/atom_relocate.tpl index f7f8db97b..3976a0037 100644 --- a/view/atom_relocate.tpl +++ b/view/atom_relocate.tpl @@ -10,7 +10,7 @@ $confirm $notify $poll - $site-pubkey + $sitepubkey From 2093fa8b3fc421bb851bede29c1b4f0ff6c02b59 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 5 Nov 2012 07:29:55 +0100 Subject: [PATCH 4/8] DE: update to the strings --- view/de/messages.po | 401 ++++++++++++++++++++++---------------------- view/de/strings.php | 13 +- 2 files changed, 209 insertions(+), 205 deletions(-) diff --git a/view/de/messages.po b/view/de/messages.po index 56e5d51a1..827318d64 100644 --- a/view/de/messages.po +++ b/view/de/messages.po @@ -22,8 +22,8 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: http://bugs.friendica.com/\n" -"POT-Creation-Date: 2012-10-21 10:00-0700\n" -"PO-Revision-Date: 2012-10-22 12:31+0000\n" +"POT-Creation-Date: 2012-11-03 15:31-0700\n" +"PO-Revision-Date: 2012-11-05 06:28+0000\n" "Last-Translator: bavatar \n" "Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n" "MIME-Version: 1.0\n" @@ -38,6 +38,7 @@ msgstr "Beitrag erfolgreich veröffentlicht." #: ../../mod/update_notes.php:41 ../../mod/update_community.php:18 #: ../../mod/update_network.php:22 ../../mod/update_profile.php:41 +#: ../../mod/update_display.php:22 msgid "[Embedded content - reload page to view]" msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]" @@ -60,20 +61,20 @@ msgstr "Konnte den Kontakt nicht aktualisieren." #: ../../mod/wallmessage.php:33 ../../mod/wallmessage.php:79 #: ../../mod/wallmessage.php:103 ../../mod/attach.php:33 #: ../../mod/group.php:19 ../../mod/viewcontacts.php:22 -#: ../../mod/register.php:38 ../../mod/regmod.php:116 ../../mod/item.php:126 -#: ../../mod/item.php:142 ../../mod/mood.php:114 +#: ../../mod/register.php:38 ../../mod/regmod.php:116 ../../mod/item.php:139 +#: ../../mod/item.php:155 ../../mod/mood.php:114 #: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:169 #: ../../mod/profile_photo.php:180 ../../mod/profile_photo.php:193 #: ../../mod/message.php:38 ../../mod/message.php:168 #: ../../mod/allfriends.php:9 ../../mod/nogroup.php:25 #: ../../mod/wall_upload.php:64 ../../mod/follow.php:9 -#: ../../mod/display.php:141 ../../mod/profiles.php:7 +#: ../../mod/display.php:165 ../../mod/profiles.php:7 #: ../../mod/profiles.php:424 ../../mod/delegate.php:6 #: ../../mod/suggest.php:28 ../../mod/invite.php:13 ../../mod/invite.php:81 #: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:510 #: ../../addon/facebook/facebook.php:516 ../../addon/fbpost/fbpost.php:159 #: ../../addon/fbpost/fbpost.php:165 -#: ../../addon/dav/friendica/layout.fnk.php:354 ../../include/items.php:3913 +#: ../../addon/dav/friendica/layout.fnk.php:354 ../../include/items.php:3914 #: ../../index.php:319 ../../addon.old/facebook/facebook.php:510 #: ../../addon.old/facebook/facebook.php:516 #: ../../addon.old/fbpost/fbpost.php:159 ../../addon.old/fbpost/fbpost.php:165 @@ -146,8 +147,8 @@ msgstr "Neues Foto von dieser URL" #: ../../mod/crepair.php:166 ../../mod/fsuggest.php:107 #: ../../mod/events.php:455 ../../mod/photos.php:1027 #: ../../mod/photos.php:1103 ../../mod/photos.php:1366 -#: ../../mod/photos.php:1406 ../../mod/photos.php:1449 -#: ../../mod/photos.php:1520 ../../mod/install.php:246 +#: ../../mod/photos.php:1406 ../../mod/photos.php:1450 +#: ../../mod/photos.php:1522 ../../mod/install.php:246 #: ../../mod/install.php:284 ../../mod/localtime.php:45 ../../mod/poke.php:199 #: ../../mod/content.php:693 ../../mod/contacts.php:348 #: ../../mod/settings.php:543 ../../mod/settings.php:697 @@ -193,10 +194,10 @@ msgstr "Neues Foto von dieser URL" #: ../../addon/irc/irc.php:55 ../../addon/fromapp/fromapp.php:77 #: ../../addon/blogger/blogger.php:102 ../../addon/posterous/posterous.php:103 #: ../../view/theme/cleanzero/config.php:80 -#: ../../view/theme/diabook/theme.php:642 +#: ../../view/theme/diabook/theme.php:599 #: ../../view/theme/diabook/config.php:152 #: ../../view/theme/quattro/config.php:64 ../../view/theme/dispy/config.php:70 -#: ../../object/Item.php:558 ../../addon.old/fromgplus/fromgplus.php:40 +#: ../../object/Item.php:559 ../../addon.old/fromgplus/fromgplus.php:40 #: ../../addon.old/facebook/facebook.php:619 #: ../../addon.old/snautofollow/snautofollow.php:64 #: ../../addon.old/bg/bg.php:90 ../../addon.old/fbpost/fbpost.php:226 @@ -300,7 +301,7 @@ msgstr "Veranstaltung bearbeiten" msgid "link to source" msgstr "Link zum Originalbeitrag" -#: ../../mod/events.php:347 ../../view/theme/diabook/theme.php:91 +#: ../../mod/events.php:347 ../../view/theme/diabook/theme.php:90 #: ../../include/nav.php:52 ../../boot.php:1701 msgid "Events" msgstr "Veranstaltungen" @@ -374,7 +375,7 @@ msgstr "Veranstaltung teilen" #: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94 ../../mod/editpost.php:142 #: ../../mod/dfrn_request.php:847 ../../mod/settings.php:544 #: ../../mod/settings.php:570 ../../addon/js_upload/js_upload.php:45 -#: ../../include/conversation.php:995 +#: ../../include/conversation.php:1001 #: ../../addon.old/js_upload/js_upload.php:45 msgid "Cancel" msgstr "Abbrechen" @@ -399,8 +400,8 @@ msgstr "Entfernen" #: ../../mod/dfrn_poll.php:99 ../../mod/dfrn_poll.php:530 #, php-format -msgid "%s welcomes %s" -msgstr "%s heißt %s herzlich willkommen" +msgid "%1$s welcomes %2$s" +msgstr "%1$s heißt %2$s herzlich willkommen" #: ../../mod/api.php:76 ../../mod/api.php:102 msgid "Authorize application connection" @@ -450,14 +451,14 @@ msgstr "Fotoalben" #: ../../mod/photos.php:58 ../../mod/photos.php:153 ../../mod/photos.php:1008 #: ../../mod/photos.php:1095 ../../mod/photos.php:1110 -#: ../../mod/photos.php:1562 ../../mod/photos.php:1574 +#: ../../mod/photos.php:1565 ../../mod/photos.php:1577 #: ../../addon/communityhome/communityhome.php:110 -#: ../../view/theme/diabook/theme.php:492 +#: ../../view/theme/diabook/theme.php:485 #: ../../addon.old/communityhome/communityhome.php:110 msgid "Contact Photos" msgstr "Kontaktbilder" -#: ../../mod/photos.php:65 ../../mod/photos.php:1126 ../../mod/photos.php:1612 +#: ../../mod/photos.php:65 ../../mod/photos.php:1126 ../../mod/photos.php:1615 msgid "Upload New Photos" msgstr "Weitere Fotos hochladen" @@ -475,7 +476,7 @@ msgstr "Kontaktinformationen nicht verfügbar" #: ../../mod/profile_photo.php:204 ../../mod/profile_photo.php:296 #: ../../mod/profile_photo.php:305 #: ../../addon/communityhome/communityhome.php:111 -#: ../../view/theme/diabook/theme.php:493 ../../include/user.php:324 +#: ../../view/theme/diabook/theme.php:486 ../../include/user.php:324 #: ../../include/user.php:331 ../../include/user.php:338 #: ../../addon.old/communityhome/communityhome.php:111 msgid "Profile Photos" @@ -494,21 +495,13 @@ msgid "Delete Photo" msgstr "Foto löschen" #: ../../mod/photos.php:606 -msgid "was tagged in a" -msgstr "wurde getaggt in einem" - -#: ../../mod/photos.php:606 ../../mod/like.php:145 ../../mod/subthread.php:87 -#: ../../mod/tagger.php:62 ../../addon/communityhome/communityhome.php:163 -#: ../../view/theme/diabook/theme.php:464 ../../include/text.php:1437 -#: ../../include/diaspora.php:1835 ../../include/conversation.php:125 -#: ../../include/conversation.php:253 -#: ../../addon.old/communityhome/communityhome.php:163 -msgid "photo" -msgstr "Foto" +#, php-format +msgid "%1$s was tagged in %2$s by %3$s" +msgstr "%1$s wurde von %3$s in %2$s getaggt" #: ../../mod/photos.php:606 -msgid "by" -msgstr "von" +msgid "a photo" +msgstr "einem Foto" #: ../../mod/photos.php:711 ../../addon/js_upload/js_upload.php:315 #: ../../addon.old/js_upload/js_upload.php:315 @@ -585,7 +578,7 @@ msgstr "Zeige neueste zuerst" msgid "Show Oldest First" msgstr "Zeige älteste zuerst" -#: ../../mod/photos.php:1146 ../../mod/photos.php:1595 +#: ../../mod/photos.php:1146 ../../mod/photos.php:1598 msgid "View Photo" msgstr "Fotos betrachten" @@ -661,49 +654,49 @@ msgstr "Ich mag das (toggle)" msgid "I don't like this (toggle)" msgstr "Ich mag das nicht (toggle)" -#: ../../mod/photos.php:1386 ../../include/conversation.php:956 +#: ../../mod/photos.php:1386 ../../include/conversation.php:962 msgid "Share" msgstr "Teilen" #: ../../mod/photos.php:1387 ../../mod/editpost.php:118 -#: ../../mod/content.php:482 ../../mod/content.php:845 +#: ../../mod/content.php:482 ../../mod/content.php:846 #: ../../mod/wallmessage.php:152 ../../mod/message.php:293 -#: ../../mod/message.php:481 ../../include/conversation.php:619 -#: ../../include/conversation.php:975 ../../object/Item.php:258 +#: ../../mod/message.php:481 ../../include/conversation.php:624 +#: ../../include/conversation.php:981 ../../object/Item.php:258 msgid "Please wait" msgstr "Bitte warten" -#: ../../mod/photos.php:1403 ../../mod/photos.php:1446 -#: ../../mod/photos.php:1517 ../../mod/content.php:690 -#: ../../object/Item.php:555 +#: ../../mod/photos.php:1403 ../../mod/photos.php:1447 +#: ../../mod/photos.php:1519 ../../mod/content.php:690 +#: ../../object/Item.php:556 msgid "This is you" msgstr "Das bist du" -#: ../../mod/photos.php:1405 ../../mod/photos.php:1448 -#: ../../mod/photos.php:1519 ../../mod/content.php:692 ../../boot.php:585 -#: ../../object/Item.php:557 +#: ../../mod/photos.php:1405 ../../mod/photos.php:1449 +#: ../../mod/photos.php:1521 ../../mod/content.php:692 ../../boot.php:585 +#: ../../object/Item.php:558 msgid "Comment" msgstr "Kommentar" -#: ../../mod/photos.php:1407 ../../mod/photos.php:1450 -#: ../../mod/photos.php:1521 ../../mod/editpost.php:139 -#: ../../mod/content.php:702 ../../include/conversation.php:993 -#: ../../object/Item.php:567 +#: ../../mod/photos.php:1407 ../../mod/photos.php:1451 +#: ../../mod/photos.php:1523 ../../mod/editpost.php:139 +#: ../../mod/content.php:702 ../../include/conversation.php:999 +#: ../../object/Item.php:568 msgid "Preview" msgstr "Vorschau" -#: ../../mod/photos.php:1489 ../../mod/content.php:439 -#: ../../mod/content.php:723 ../../mod/settings.php:606 +#: ../../mod/photos.php:1491 ../../mod/content.php:439 +#: ../../mod/content.php:724 ../../mod/settings.php:606 #: ../../mod/group.php:168 ../../mod/admin.php:696 -#: ../../include/conversation.php:564 ../../object/Item.php:117 +#: ../../include/conversation.php:569 ../../object/Item.php:117 msgid "Delete" msgstr "Löschen" -#: ../../mod/photos.php:1601 +#: ../../mod/photos.php:1604 msgid "View Album" msgstr "Album betrachten" -#: ../../mod/photos.php:1610 +#: ../../mod/photos.php:1613 msgid "Recent Photos" msgstr "Neueste Fotos" @@ -711,7 +704,7 @@ msgstr "Neueste Fotos" msgid "Not available." msgstr "Nicht verfügbar." -#: ../../mod/community.php:32 ../../view/theme/diabook/theme.php:93 +#: ../../mod/community.php:32 ../../view/theme/diabook/theme.php:92 #: ../../include/nav.php:101 msgid "Community" msgstr "Gemeinschaft" @@ -761,96 +754,96 @@ msgstr "Beitrag nicht gefunden" msgid "Edit post" msgstr "Beitrag bearbeiten" -#: ../../mod/editpost.php:88 ../../include/conversation.php:942 +#: ../../mod/editpost.php:88 ../../include/conversation.php:948 msgid "Post to Email" msgstr "An E-Mail senden" -#: ../../mod/editpost.php:103 ../../mod/content.php:710 +#: ../../mod/editpost.php:103 ../../mod/content.php:711 #: ../../mod/settings.php:605 ../../object/Item.php:107 msgid "Edit" msgstr "Bearbeiten" #: ../../mod/editpost.php:104 ../../mod/wallmessage.php:150 #: ../../mod/message.php:291 ../../mod/message.php:478 -#: ../../include/conversation.php:957 +#: ../../include/conversation.php:963 msgid "Upload photo" msgstr "Foto hochladen" -#: ../../mod/editpost.php:105 ../../include/conversation.php:958 +#: ../../mod/editpost.php:105 ../../include/conversation.php:964 msgid "upload photo" msgstr "Bild hochladen" -#: ../../mod/editpost.php:106 ../../include/conversation.php:959 +#: ../../mod/editpost.php:106 ../../include/conversation.php:965 msgid "Attach file" msgstr "Datei anhängen" -#: ../../mod/editpost.php:107 ../../include/conversation.php:960 +#: ../../mod/editpost.php:107 ../../include/conversation.php:966 msgid "attach file" msgstr "Datei anhängen" #: ../../mod/editpost.php:108 ../../mod/wallmessage.php:151 #: ../../mod/message.php:292 ../../mod/message.php:479 -#: ../../include/conversation.php:961 +#: ../../include/conversation.php:967 msgid "Insert web link" msgstr "einen Link einfügen" -#: ../../mod/editpost.php:109 ../../include/conversation.php:962 +#: ../../mod/editpost.php:109 ../../include/conversation.php:968 msgid "web link" msgstr "Weblink" -#: ../../mod/editpost.php:110 ../../include/conversation.php:963 +#: ../../mod/editpost.php:110 ../../include/conversation.php:969 msgid "Insert video link" msgstr "Video-Adresse einfügen" -#: ../../mod/editpost.php:111 ../../include/conversation.php:964 +#: ../../mod/editpost.php:111 ../../include/conversation.php:970 msgid "video link" msgstr "Video-Link" -#: ../../mod/editpost.php:112 ../../include/conversation.php:965 +#: ../../mod/editpost.php:112 ../../include/conversation.php:971 msgid "Insert audio link" msgstr "Audio-Adresse einfügen" -#: ../../mod/editpost.php:113 ../../include/conversation.php:966 +#: ../../mod/editpost.php:113 ../../include/conversation.php:972 msgid "audio link" msgstr "Audio-Link" -#: ../../mod/editpost.php:114 ../../include/conversation.php:967 +#: ../../mod/editpost.php:114 ../../include/conversation.php:973 msgid "Set your location" msgstr "Deinen Standort festlegen" -#: ../../mod/editpost.php:115 ../../include/conversation.php:968 +#: ../../mod/editpost.php:115 ../../include/conversation.php:974 msgid "set location" msgstr "Ort setzen" -#: ../../mod/editpost.php:116 ../../include/conversation.php:969 +#: ../../mod/editpost.php:116 ../../include/conversation.php:975 msgid "Clear browser location" msgstr "Browser-Standort leeren" -#: ../../mod/editpost.php:117 ../../include/conversation.php:970 +#: ../../mod/editpost.php:117 ../../include/conversation.php:976 msgid "clear location" msgstr "Ort löschen" -#: ../../mod/editpost.php:119 ../../include/conversation.php:976 +#: ../../mod/editpost.php:119 ../../include/conversation.php:982 msgid "Permission settings" msgstr "Berechtigungseinstellungen" -#: ../../mod/editpost.php:127 ../../include/conversation.php:985 +#: ../../mod/editpost.php:127 ../../include/conversation.php:991 msgid "CC: email addresses" msgstr "Cc:-E-Mail-Addressen" -#: ../../mod/editpost.php:128 ../../include/conversation.php:986 +#: ../../mod/editpost.php:128 ../../include/conversation.php:992 msgid "Public post" msgstr "Öffentlicher Beitrag" -#: ../../mod/editpost.php:131 ../../include/conversation.php:972 +#: ../../mod/editpost.php:131 ../../include/conversation.php:978 msgid "Set title" msgstr "Titel setzen" -#: ../../mod/editpost.php:133 ../../include/conversation.php:974 +#: ../../mod/editpost.php:133 ../../include/conversation.php:980 msgid "Categories (comma-separated list)" msgstr "Kategorien (kommasepariert)" -#: ../../mod/editpost.php:134 ../../include/conversation.php:988 +#: ../../mod/editpost.php:134 ../../include/conversation.php:994 msgid "Example: bob@example.com, mary@example.com" msgstr "Z.B.: bob@example.com, mary@example.com" @@ -971,7 +964,7 @@ msgstr "Bitte bestätige deine Kontaktanfrage bei %s." msgid "Confirm" msgstr "Bestätigen" -#: ../../mod/dfrn_request.php:715 ../../include/items.php:3292 +#: ../../mod/dfrn_request.php:715 ../../include/items.php:3293 msgid "[Name Withheld]" msgstr "[Name unterdrückt]" @@ -1300,7 +1293,7 @@ msgstr "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einric #: ../../mod/localtime.php:12 ../../include/event.php:11 #: ../../include/bb2diaspora.php:390 msgid "l F d, Y \\@ g:i A" -msgstr "l F d, Y \\@ g:i A" +msgstr "l, d. F Y\\, H:i" #: ../../mod/localtime.php:24 msgid "Time Conversion" @@ -1393,25 +1386,25 @@ msgstr "Gruppe ist leer" msgid "Group: " msgstr "Gruppe: " -#: ../../mod/content.php:438 ../../mod/content.php:722 -#: ../../include/conversation.php:563 ../../object/Item.php:116 +#: ../../mod/content.php:438 ../../mod/content.php:723 +#: ../../include/conversation.php:568 ../../object/Item.php:116 msgid "Select" msgstr "Auswählen" -#: ../../mod/content.php:455 ../../mod/content.php:815 -#: ../../mod/content.php:816 ../../include/conversation.php:582 +#: ../../mod/content.php:455 ../../mod/content.php:816 +#: ../../mod/content.php:817 ../../include/conversation.php:587 #: ../../object/Item.php:227 ../../object/Item.php:228 #, php-format msgid "View %s's profile @ %s" msgstr "Das Profil von %s auf %s betrachten." -#: ../../mod/content.php:465 ../../mod/content.php:827 -#: ../../include/conversation.php:602 ../../object/Item.php:240 +#: ../../mod/content.php:465 ../../mod/content.php:828 +#: ../../include/conversation.php:607 ../../object/Item.php:240 #, php-format msgid "%s from %s" msgstr "%s von %s" -#: ../../mod/content.php:480 ../../include/conversation.php:617 +#: ../../mod/content.php:480 ../../include/conversation.php:622 msgid "View in context" msgstr "Im Zusammenhang betrachten" @@ -1453,71 +1446,71 @@ msgstr "Weitersagen" msgid "share" msgstr "Teilen" -#: ../../mod/content.php:694 ../../object/Item.php:559 +#: ../../mod/content.php:694 ../../object/Item.php:560 msgid "Bold" msgstr "Fett" -#: ../../mod/content.php:695 ../../object/Item.php:560 +#: ../../mod/content.php:695 ../../object/Item.php:561 msgid "Italic" msgstr "Kursiv" -#: ../../mod/content.php:696 ../../object/Item.php:561 +#: ../../mod/content.php:696 ../../object/Item.php:562 msgid "Underline" msgstr "Unterstrichen" -#: ../../mod/content.php:697 ../../object/Item.php:562 +#: ../../mod/content.php:697 ../../object/Item.php:563 msgid "Quote" msgstr "Zitat" -#: ../../mod/content.php:698 ../../object/Item.php:563 +#: ../../mod/content.php:698 ../../object/Item.php:564 msgid "Code" msgstr "Code" -#: ../../mod/content.php:699 ../../object/Item.php:564 +#: ../../mod/content.php:699 ../../object/Item.php:565 msgid "Image" msgstr "Bild" -#: ../../mod/content.php:700 ../../object/Item.php:565 +#: ../../mod/content.php:700 ../../object/Item.php:566 msgid "Link" msgstr "Verweis" -#: ../../mod/content.php:701 ../../object/Item.php:566 +#: ../../mod/content.php:701 ../../object/Item.php:567 msgid "Video" msgstr "Video" -#: ../../mod/content.php:735 ../../object/Item.php:180 +#: ../../mod/content.php:736 ../../object/Item.php:180 msgid "add star" msgstr "markieren" -#: ../../mod/content.php:736 ../../object/Item.php:181 +#: ../../mod/content.php:737 ../../object/Item.php:181 msgid "remove star" msgstr "Markierung entfernen" -#: ../../mod/content.php:737 ../../object/Item.php:182 +#: ../../mod/content.php:738 ../../object/Item.php:182 msgid "toggle star status" msgstr "Markierung umschalten" -#: ../../mod/content.php:740 ../../object/Item.php:185 +#: ../../mod/content.php:741 ../../object/Item.php:185 msgid "starred" msgstr "markiert" -#: ../../mod/content.php:741 ../../object/Item.php:186 +#: ../../mod/content.php:742 ../../object/Item.php:186 msgid "add tag" msgstr "Tag hinzufügen" -#: ../../mod/content.php:745 ../../object/Item.php:120 +#: ../../mod/content.php:746 ../../object/Item.php:120 msgid "save to folder" msgstr "In Ordner speichern" -#: ../../mod/content.php:817 ../../object/Item.php:229 +#: ../../mod/content.php:818 ../../object/Item.php:229 msgid "to" msgstr "zu" -#: ../../mod/content.php:818 ../../object/Item.php:230 +#: ../../mod/content.php:819 ../../object/Item.php:230 msgid "Wall-to-Wall" msgstr "Wall-to-Wall" -#: ../../mod/content.php:819 ../../object/Item.php:231 +#: ../../mod/content.php:820 ../../object/Item.php:231 msgid "via Wall-To-Wall:" msgstr "via Wall-To-Wall:" @@ -1554,7 +1547,7 @@ msgstr "Netzwerk" msgid "Personal" msgstr "Persönlich" -#: ../../mod/notifications.php:93 ../../view/theme/diabook/theme.php:87 +#: ../../mod/notifications.php:93 ../../view/theme/diabook/theme.php:86 #: ../../include/nav.php:77 ../../include/nav.php:115 msgid "Home" msgstr "Pinnwand" @@ -1999,7 +1992,7 @@ msgstr "du bist Fan von" msgid "Edit contact" msgstr "Kontakt bearbeiten" -#: ../../mod/contacts.php:571 ../../view/theme/diabook/theme.php:89 +#: ../../mod/contacts.php:571 ../../view/theme/diabook/theme.php:88 #: ../../include/nav.php:139 msgid "Contacts" msgstr "Kontakte" @@ -2036,7 +2029,7 @@ msgstr "Anfrage zum Zurücksetzen des Passworts auf %s erhalten" #: ../../addon/facebook/facebook.php:702 #: ../../addon/facebook/facebook.php:1200 ../../addon/fbpost/fbpost.php:661 #: ../../addon/public_server/public_server.php:62 -#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:3301 +#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:3302 #: ../../boot.php:799 ../../addon.old/facebook/facebook.php:702 #: ../../addon.old/facebook/facebook.php:1200 #: ../../addon.old/fbpost/fbpost.php:661 @@ -2126,9 +2119,8 @@ msgstr "Konto löschen" #: ../../mod/settings.php:69 ../../mod/newmember.php:22 #: ../../mod/admin.php:785 ../../mod/admin.php:990 #: ../../addon/dav/friendica/layout.fnk.php:225 -#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:537 -#: ../../view/theme/diabook/theme.php:658 ../../include/nav.php:137 -#: ../../addon.old/dav/friendica/layout.fnk.php:225 +#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:614 +#: ../../include/nav.php:137 ../../addon.old/dav/friendica/layout.fnk.php:225 #: ../../addon.old/mathjax/mathjax.php:36 msgid "Settings" msgstr "Einstellungen" @@ -2792,7 +2784,7 @@ msgstr "Kein Empfänger." #: ../../mod/wallmessage.php:123 ../../mod/wallmessage.php:131 #: ../../mod/message.php:242 ../../mod/message.php:250 -#: ../../include/conversation.php:893 ../../include/conversation.php:910 +#: ../../include/conversation.php:898 ../../include/conversation.php:916 msgid "Please enter a link URL:" msgstr "Bitte gib die URL des Links ein:" @@ -2873,7 +2865,7 @@ msgid "" msgstr "Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen zur Privatsphäre. Wenn du dein Profil nicht veröffentlichst, ist das als wenn du deine Telefonnummer nicht ins Telefonbuch einträgst. Im Allgemeinen solltest du es veröffentlichen - außer all deine Freunde und potentiellen Freunde wissen genau, wie sie dich finden können." #: ../../mod/newmember.php:32 ../../mod/profperm.php:103 -#: ../../view/theme/diabook/theme.php:88 ../../include/profile_advanced.php:7 +#: ../../view/theme/diabook/theme.php:87 ../../include/profile_advanced.php:7 #: ../../include/profile_advanced.php:84 ../../include/nav.php:50 #: ../../boot.php:1684 msgid "Profile" @@ -3194,12 +3186,21 @@ msgstr "Registrieren" msgid "People Search" msgstr "Personensuche" +#: ../../mod/like.php:145 ../../mod/subthread.php:87 ../../mod/tagger.php:62 +#: ../../addon/communityhome/communityhome.php:163 +#: ../../view/theme/diabook/theme.php:457 ../../include/text.php:1437 +#: ../../include/diaspora.php:1835 ../../include/conversation.php:125 +#: ../../include/conversation.php:253 +#: ../../addon.old/communityhome/communityhome.php:163 +msgid "photo" +msgstr "Foto" + #: ../../mod/like.php:145 ../../mod/like.php:298 ../../mod/subthread.php:87 #: ../../mod/tagger.php:62 ../../addon/facebook/facebook.php:1598 #: ../../addon/communityhome/communityhome.php:158 #: ../../addon/communityhome/communityhome.php:167 -#: ../../view/theme/diabook/theme.php:459 -#: ../../view/theme/diabook/theme.php:468 ../../include/diaspora.php:1835 +#: ../../view/theme/diabook/theme.php:452 +#: ../../view/theme/diabook/theme.php:461 ../../include/diaspora.php:1835 #: ../../include/conversation.php:120 ../../include/conversation.php:129 #: ../../include/conversation.php:248 ../../include/conversation.php:257 #: ../../addon.old/facebook/facebook.php:1598 @@ -3210,7 +3211,7 @@ msgstr "Status" #: ../../mod/like.php:162 ../../addon/facebook/facebook.php:1602 #: ../../addon/communityhome/communityhome.php:172 -#: ../../view/theme/diabook/theme.php:473 ../../include/diaspora.php:1851 +#: ../../view/theme/diabook/theme.php:466 ../../include/diaspora.php:1851 #: ../../include/conversation.php:136 #: ../../addon.old/facebook/facebook.php:1602 #: ../../addon.old/communityhome/communityhome.php:172 @@ -3224,8 +3225,8 @@ msgid "%1$s doesn't like %2$s's %3$s" msgstr "%1$s mag %2$ss %3$s nicht" #: ../../mod/notice.php:15 ../../mod/viewsrc.php:15 ../../mod/admin.php:159 -#: ../../mod/admin.php:734 ../../mod/admin.php:933 ../../mod/display.php:29 -#: ../../mod/display.php:145 ../../include/items.php:3779 +#: ../../mod/admin.php:734 ../../mod/admin.php:933 ../../mod/display.php:39 +#: ../../mod/display.php:169 ../../include/items.php:3780 msgid "Item not found." msgstr "Beitrag nicht gefunden." @@ -3233,7 +3234,7 @@ msgstr "Beitrag nicht gefunden." msgid "Access denied." msgstr "Zugriff verweigert." -#: ../../mod/fbrowser.php:25 ../../view/theme/diabook/theme.php:90 +#: ../../mod/fbrowser.php:25 ../../view/theme/diabook/theme.php:89 #: ../../include/nav.php:51 ../../boot.php:1691 msgid "Photos" msgstr "Bilder" @@ -3255,43 +3256,43 @@ msgstr "Registrierung für %s wurde zurückgezogen" msgid "Please login." msgstr "Bitte melde dich an." -#: ../../mod/item.php:91 +#: ../../mod/item.php:104 msgid "Unable to locate original post." msgstr "Konnte den Originalbeitrag nicht finden." -#: ../../mod/item.php:275 +#: ../../mod/item.php:288 msgid "Empty post discarded." msgstr "Leerer Beitrag wurde verworfen." -#: ../../mod/item.php:407 ../../mod/wall_upload.php:133 +#: ../../mod/item.php:420 ../../mod/wall_upload.php:133 #: ../../mod/wall_upload.php:142 ../../mod/wall_upload.php:149 #: ../../include/message.php:144 msgid "Wall Photos" msgstr "Pinnwand-Bilder" -#: ../../mod/item.php:820 +#: ../../mod/item.php:833 msgid "System error. Post not saved." msgstr "Systemfehler. Beitrag konnte nicht gespeichert werden." -#: ../../mod/item.php:845 +#: ../../mod/item.php:858 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendica social " "network." msgstr "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica." -#: ../../mod/item.php:847 +#: ../../mod/item.php:860 #, php-format msgid "You may visit them online at %s" msgstr "Du kannst sie online unter %s besuchen" -#: ../../mod/item.php:848 +#: ../../mod/item.php:861 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." msgstr "Falls du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem du auf diese Nachricht antwortest." -#: ../../mod/item.php:850 +#: ../../mod/item.php:863 #, php-format msgid "%s posted an update." msgstr "%s hat ein Update veröffentlicht." @@ -3812,7 +3813,7 @@ msgid "" "Provide built-in OStatus (identi.ca, status.net, etc.) compatibility. All " "communications in OStatus are public, so privacy warnings will be " "occasionally displayed." -msgstr "Biete die eingebaute OStatus (identi.ca, status.net, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, so Privatsphäre Warnungen werden bei Bedarf angezeigt." +msgstr "Biete die eingebaute OStatus (identi.ca, status.net, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, Privatsphäre Warnungen werden nur bei Bedarf angezeigt." #: ../../mod/admin.php:478 msgid "Enable Diaspora support" @@ -4116,7 +4117,7 @@ msgstr "FTP Passwort" msgid "Requested profile is not available." msgstr "Das angefragte Profil ist nicht vorhanden." -#: ../../mod/profile.php:155 ../../mod/display.php:77 +#: ../../mod/profile.php:155 ../../mod/display.php:87 msgid "Access to this profile has been restricted." msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt." @@ -4208,7 +4209,7 @@ msgstr "%1$s folgt %2$s %3$s" msgid "link" msgstr "Link" -#: ../../mod/display.php:138 +#: ../../mod/display.php:162 msgid "Item has been removed." msgstr "Eintrag wurde entfernt." @@ -4533,8 +4534,8 @@ msgstr "sichtbar für jeden" msgid "Edit visibility" msgstr "Sichtbarkeit bearbeiten" -#: ../../mod/filer.php:29 ../../include/conversation.php:897 -#: ../../include/conversation.php:914 +#: ../../mod/filer.php:29 ../../include/conversation.php:902 +#: ../../include/conversation.php:920 msgid "Save to Folder:" msgstr "In diesen Ordner verschieben:" @@ -4626,7 +4627,7 @@ msgstr "Texteingabe (Diaspora Format): " msgid "diaspora2bb: " msgstr "diaspora2bb: " -#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:520 +#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:513 #: ../../include/contact_widgets.php:34 msgid "Friend Suggestions" msgstr "Kontaktvorschläge" @@ -4641,7 +4642,7 @@ msgstr "Keine Vorschläge. Falls der Server frisch aufgesetzt wurde, versuche es msgid "Ignore/Hide" msgstr "Ignorieren/Verbergen" -#: ../../mod/directory.php:49 ../../view/theme/diabook/theme.php:518 +#: ../../mod/directory.php:49 ../../view/theme/diabook/theme.php:511 msgid "Global Directory" msgstr "Weltweites Verzeichnis" @@ -5578,7 +5579,7 @@ msgid "Latest likes" msgstr "Neueste Favoriten" #: ../../addon/communityhome/communityhome.php:155 -#: ../../view/theme/diabook/theme.php:456 ../../include/text.php:1435 +#: ../../view/theme/diabook/theme.php:449 ../../include/text.php:1435 #: ../../include/conversation.php:117 ../../include/conversation.php:245 #: ../../addon.old/communityhome/communityhome.php:155 msgid "event" @@ -7592,137 +7593,135 @@ msgstr "Theme Breite festlegen" msgid "Color scheme" msgstr "Farbschema" -#: ../../view/theme/diabook/theme.php:87 ../../include/nav.php:49 +#: ../../view/theme/diabook/theme.php:86 ../../include/nav.php:49 #: ../../include/nav.php:115 msgid "Your posts and conversations" msgstr "Deine Beiträge und Unterhaltungen" -#: ../../view/theme/diabook/theme.php:88 ../../include/nav.php:50 +#: ../../view/theme/diabook/theme.php:87 ../../include/nav.php:50 msgid "Your profile page" msgstr "Deine Profilseite" -#: ../../view/theme/diabook/theme.php:89 +#: ../../view/theme/diabook/theme.php:88 msgid "Your contacts" msgstr "Deine Kontakte" -#: ../../view/theme/diabook/theme.php:90 ../../include/nav.php:51 +#: ../../view/theme/diabook/theme.php:89 ../../include/nav.php:51 msgid "Your photos" msgstr "Deine Fotos" -#: ../../view/theme/diabook/theme.php:91 ../../include/nav.php:52 +#: ../../view/theme/diabook/theme.php:90 ../../include/nav.php:52 msgid "Your events" msgstr "Deine Ereignisse" -#: ../../view/theme/diabook/theme.php:92 ../../include/nav.php:53 +#: ../../view/theme/diabook/theme.php:91 ../../include/nav.php:53 msgid "Personal notes" msgstr "Persönliche Notizen" -#: ../../view/theme/diabook/theme.php:92 ../../include/nav.php:53 +#: ../../view/theme/diabook/theme.php:91 ../../include/nav.php:53 msgid "Your personal photos" msgstr "Deine privaten Fotos" -#: ../../view/theme/diabook/theme.php:94 -#: ../../view/theme/diabook/theme.php:537 -#: ../../view/theme/diabook/theme.php:632 +#: ../../view/theme/diabook/theme.php:93 #: ../../view/theme/diabook/config.php:163 msgid "Community Pages" msgstr "Foren" -#: ../../view/theme/diabook/theme.php:384 -#: ../../view/theme/diabook/theme.php:634 +#: ../../view/theme/diabook/theme.php:377 +#: ../../view/theme/diabook/theme.php:591 #: ../../view/theme/diabook/config.php:165 msgid "Community Profiles" msgstr "Community-Profile" -#: ../../view/theme/diabook/theme.php:405 -#: ../../view/theme/diabook/theme.php:639 +#: ../../view/theme/diabook/theme.php:398 +#: ../../view/theme/diabook/theme.php:596 #: ../../view/theme/diabook/config.php:170 msgid "Last users" msgstr "Letzte Nutzer" -#: ../../view/theme/diabook/theme.php:434 -#: ../../view/theme/diabook/theme.php:641 +#: ../../view/theme/diabook/theme.php:427 +#: ../../view/theme/diabook/theme.php:598 #: ../../view/theme/diabook/config.php:172 msgid "Last likes" msgstr "Zuletzt gemocht" -#: ../../view/theme/diabook/theme.php:479 -#: ../../view/theme/diabook/theme.php:640 +#: ../../view/theme/diabook/theme.php:472 +#: ../../view/theme/diabook/theme.php:597 #: ../../view/theme/diabook/config.php:171 msgid "Last photos" msgstr "Letzte Fotos" -#: ../../view/theme/diabook/theme.php:516 -#: ../../view/theme/diabook/theme.php:637 +#: ../../view/theme/diabook/theme.php:509 +#: ../../view/theme/diabook/theme.php:594 #: ../../view/theme/diabook/config.php:168 msgid "Find Friends" msgstr "Freunde finden" -#: ../../view/theme/diabook/theme.php:517 +#: ../../view/theme/diabook/theme.php:510 msgid "Local Directory" msgstr "Lokales Verzeichnis" -#: ../../view/theme/diabook/theme.php:519 ../../include/contact_widgets.php:35 +#: ../../view/theme/diabook/theme.php:512 ../../include/contact_widgets.php:35 msgid "Similar Interests" msgstr "Ähnliche Interessen" -#: ../../view/theme/diabook/theme.php:521 ../../include/contact_widgets.php:37 +#: ../../view/theme/diabook/theme.php:514 ../../include/contact_widgets.php:37 msgid "Invite Friends" msgstr "Freunde einladen" -#: ../../view/theme/diabook/theme.php:572 -#: ../../view/theme/diabook/theme.php:633 +#: ../../view/theme/diabook/theme.php:531 +#: ../../view/theme/diabook/theme.php:590 #: ../../view/theme/diabook/config.php:164 msgid "Earth Layers" msgstr "Earth Layers" -#: ../../view/theme/diabook/theme.php:577 +#: ../../view/theme/diabook/theme.php:536 msgid "Set zoomfactor for Earth Layers" msgstr "Zoomfaktor der Earth Layer" -#: ../../view/theme/diabook/theme.php:578 +#: ../../view/theme/diabook/theme.php:537 #: ../../view/theme/diabook/config.php:161 msgid "Set longitude (X) for Earth Layers" msgstr "Longitude (X) der Earth Layer" -#: ../../view/theme/diabook/theme.php:579 +#: ../../view/theme/diabook/theme.php:538 #: ../../view/theme/diabook/config.php:162 msgid "Set latitude (Y) for Earth Layers" msgstr "Latitude (Y) der Earth Layer" +#: ../../view/theme/diabook/theme.php:551 #: ../../view/theme/diabook/theme.php:592 -#: ../../view/theme/diabook/theme.php:635 #: ../../view/theme/diabook/config.php:166 msgid "Help or @NewHere ?" msgstr "Hilfe oder @NewHere" -#: ../../view/theme/diabook/theme.php:599 -#: ../../view/theme/diabook/theme.php:636 +#: ../../view/theme/diabook/theme.php:558 +#: ../../view/theme/diabook/theme.php:593 #: ../../view/theme/diabook/config.php:167 msgid "Connect Services" msgstr "Verbinde Dienste" -#: ../../view/theme/diabook/theme.php:606 -#: ../../view/theme/diabook/theme.php:638 +#: ../../view/theme/diabook/theme.php:565 +#: ../../view/theme/diabook/theme.php:595 msgid "Last Tweets" msgstr "Neueste Tweets" -#: ../../view/theme/diabook/theme.php:609 +#: ../../view/theme/diabook/theme.php:568 #: ../../view/theme/diabook/config.php:159 msgid "Set twitter search term" msgstr "Twitter Suchbegriff" -#: ../../view/theme/diabook/theme.php:629 +#: ../../view/theme/diabook/theme.php:587 #: ../../view/theme/diabook/config.php:146 ../../include/acl_selectors.php:288 msgid "don't show" msgstr "nicht zeigen" -#: ../../view/theme/diabook/theme.php:629 +#: ../../view/theme/diabook/theme.php:587 #: ../../view/theme/diabook/config.php:146 ../../include/acl_selectors.php:287 msgid "show" msgstr "zeigen" -#: ../../view/theme/diabook/theme.php:630 +#: ../../view/theme/diabook/theme.php:588 msgid "Show/hide boxes at right-hand column:" msgstr "Rahmen auf der rechten Seite anzeigen/verbergen" @@ -8673,17 +8672,17 @@ msgstr "Sekunden" msgid "%1$d %2$s ago" msgstr "%1$d %2$s her" -#: ../../include/datetime.php:472 ../../include/items.php:1688 +#: ../../include/datetime.php:472 ../../include/items.php:1689 #, php-format msgid "%s's birthday" msgstr "%ss Geburtstag" -#: ../../include/datetime.php:473 ../../include/items.php:1689 +#: ../../include/datetime.php:473 ../../include/items.php:1690 #, php-format msgid "Happy Birthday %s" msgstr "Herzlichen Glückwunsch %s" -#: ../../include/onepoll.php:409 +#: ../../include/onepoll.php:414 msgid "From: " msgstr "Von: " @@ -8953,15 +8952,15 @@ msgstr "Konnte die Kontaktinformationen nicht empfangen." msgid "following" msgstr "folgen" -#: ../../include/items.php:3299 +#: ../../include/items.php:3300 msgid "A new person is sharing with you at " msgstr "Eine neue Person teilt mit dir auf " -#: ../../include/items.php:3299 +#: ../../include/items.php:3300 msgid "You have a new follower at " msgstr "Du hast einen neuen Kontakt auf " -#: ../../include/items.php:3980 +#: ../../include/items.php:3981 msgid "Archives" msgstr "Archiv" @@ -9055,34 +9054,34 @@ msgstr "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das msgid "stopped following" msgstr "wird nicht mehr gefolgt" -#: ../../include/Contact.php:220 ../../include/conversation.php:790 +#: ../../include/Contact.php:220 ../../include/conversation.php:795 msgid "Poke" msgstr "Anstupsen" -#: ../../include/Contact.php:221 ../../include/conversation.php:784 +#: ../../include/Contact.php:221 ../../include/conversation.php:789 msgid "View Status" msgstr "Pinnwand anschauen" -#: ../../include/Contact.php:222 ../../include/conversation.php:785 +#: ../../include/Contact.php:222 ../../include/conversation.php:790 msgid "View Profile" msgstr "Profil anschauen" -#: ../../include/Contact.php:223 ../../include/conversation.php:786 +#: ../../include/Contact.php:223 ../../include/conversation.php:791 msgid "View Photos" msgstr "Bilder anschauen" #: ../../include/Contact.php:224 ../../include/Contact.php:237 -#: ../../include/conversation.php:787 +#: ../../include/conversation.php:792 msgid "Network Posts" msgstr "Netzwerkbeiträge" #: ../../include/Contact.php:225 ../../include/Contact.php:237 -#: ../../include/conversation.php:788 +#: ../../include/conversation.php:793 msgid "Edit Contact" msgstr "Kontakt bearbeiten" #: ../../include/Contact.php:226 ../../include/Contact.php:237 -#: ../../include/conversation.php:789 +#: ../../include/conversation.php:794 msgid "Send PM" msgstr "Private Nachricht senden" @@ -9100,86 +9099,90 @@ msgstr "Nachricht/Beitrag" msgid "%1$s marked %2$s's %3$s as favorite" msgstr "%1$s hat %2$s\\s %3$s als Favorit markiert" -#: ../../include/conversation.php:594 ../../object/Item.php:218 +#: ../../include/conversation.php:599 ../../object/Item.php:218 msgid "Categories:" msgstr "Kategorien" -#: ../../include/conversation.php:595 ../../object/Item.php:219 +#: ../../include/conversation.php:600 ../../object/Item.php:219 msgid "Filed under:" msgstr "Abgelegt unter:" -#: ../../include/conversation.php:680 +#: ../../include/conversation.php:685 msgid "remove" msgstr "löschen" -#: ../../include/conversation.php:684 +#: ../../include/conversation.php:689 msgid "Delete Selected Items" msgstr "Lösche die markierten Beiträge" -#: ../../include/conversation.php:783 +#: ../../include/conversation.php:788 msgid "Follow Thread" msgstr "Folge der Unterhaltung" -#: ../../include/conversation.php:852 +#: ../../include/conversation.php:857 #, php-format msgid "%s likes this." msgstr "%s mag das." -#: ../../include/conversation.php:852 +#: ../../include/conversation.php:857 #, php-format msgid "%s doesn't like this." msgstr "%s mag das nicht." -#: ../../include/conversation.php:856 +#: ../../include/conversation.php:861 #, php-format msgid "%2$d people like this." msgstr "%2$d Leute mögen das." -#: ../../include/conversation.php:858 +#: ../../include/conversation.php:863 #, php-format msgid "%2$d people don't like this." msgstr "%2$d Leute mögen das nicht." -#: ../../include/conversation.php:864 +#: ../../include/conversation.php:869 msgid "and" msgstr "und" -#: ../../include/conversation.php:867 +#: ../../include/conversation.php:872 #, php-format msgid ", and %d other people" msgstr " und %d andere" -#: ../../include/conversation.php:868 +#: ../../include/conversation.php:873 #, php-format msgid "%s like this." msgstr "%s mögen das." -#: ../../include/conversation.php:868 +#: ../../include/conversation.php:873 #, php-format msgid "%s don't like this." msgstr "%s mögen das nicht." -#: ../../include/conversation.php:892 ../../include/conversation.php:909 +#: ../../include/conversation.php:897 ../../include/conversation.php:915 msgid "Visible to everybody" msgstr "Für jedermann sichtbar" -#: ../../include/conversation.php:894 ../../include/conversation.php:911 +#: ../../include/conversation.php:899 ../../include/conversation.php:917 msgid "Please enter a video link/URL:" msgstr "Bitte Link/URL zum Video einfügen:" -#: ../../include/conversation.php:895 ../../include/conversation.php:912 +#: ../../include/conversation.php:900 ../../include/conversation.php:918 msgid "Please enter an audio link/URL:" msgstr "Bitte Link/URL zum Audio einfügen:" -#: ../../include/conversation.php:896 ../../include/conversation.php:913 +#: ../../include/conversation.php:901 ../../include/conversation.php:919 msgid "Tag term:" msgstr "Tag:" -#: ../../include/conversation.php:898 ../../include/conversation.php:915 +#: ../../include/conversation.php:903 ../../include/conversation.php:921 msgid "Where are you right now?" msgstr "Wo hältst du dich jetzt gerade auf?" -#: ../../include/conversation.php:977 +#: ../../include/conversation.php:904 +msgid "Delete item(s)?" +msgstr "Einträge löschen?" + +#: ../../include/conversation.php:983 msgid "permissions" msgstr "Zugriffsrechte" diff --git a/view/de/strings.php b/view/de/strings.php index 647e4e68f..26ac10b0c 100644 --- a/view/de/strings.php +++ b/view/de/strings.php @@ -58,7 +58,7 @@ $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["%s welcomes %s"] = "%s heißt %s herzlich willkommen"; +$a->strings["%1\$s welcomes %2\$s"] = "%1\$s heißt %2\$s herzlich willkommen"; $a->strings["Authorize application connection"] = "Verbindung der Applikation autorisieren"; $a->strings["Return to your app and insert this Securty Code:"] = "Gehe zu deiner Anwendung zurück und trage dort folgenden Sicherheitscode ein:"; $a->strings["Please login to continue."] = "Bitte melde dich an um fortzufahren."; @@ -74,9 +74,8 @@ $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"] = "wurde getaggt in einem"; -$a->strings["photo"] = "Foto"; -$a->strings["by"] = "von"; +$a->strings["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s wurde von %3\$s in %2\$s getaggt"; +$a->strings["a photo"] = "einem Foto"; $a->strings["Image exceeds size limit of "] = "Die Bildgröße übersteigt das Limit von "; $a->strings["Image file is empty."] = "Bilddatei ist leer."; $a->strings["Unable to process image."] = "Konnte das Bild nicht bearbeiten."; @@ -253,7 +252,7 @@ $a->strings["The database configuration file \".htconfig.php\" could not be writ $a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten während der Erzeugung der Datenbanktabellen."; $a->strings["

What next

"] = "

Wie geht es weiter?

"; $a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten."; -$a->strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A"; +$a->strings["l F d, Y \\@ g:i A"] = "l, d. F Y\\, H:i"; $a->strings["Time Conversion"] = "Zeitumrechnung"; $a->strings["Friendica provides this service for sharing events with other networks and friends in unknown timezones."] = "Friendica bietet diese Funktion an, um das Teilen von Events mit Kontakten zu vereinfachen, deren Zeitzone nicht ermittelt werden kann."; $a->strings["UTC time: %s"] = "UTC Zeit: %s"; @@ -689,6 +688,7 @@ $a->strings["Choose a profile nickname. This must begin with a text character. Y $a->strings["Choose a nickname: "] = "Spitznamen wählen: "; $a->strings["Register"] = "Registrieren"; $a->strings["People Search"] = "Personensuche"; +$a->strings["photo"] = "Foto"; $a->strings["status"] = "Status"; $a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s"; $a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s nicht"; @@ -826,7 +826,7 @@ $a->strings["Use PHP UTF8 regular expressions"] = "PHP UTF8 Ausdrücke verwenden $a->strings["Show Community Page"] = "Gemeinschaftsseite anzeigen"; $a->strings["Display a Community page showing all recent public postings on this site."] = "Zeige die Gemeinschaftsseite mit allen öffentlichen Beiträgen auf diesem Server."; $a->strings["Enable OStatus support"] = "OStatus Unterstützung aktivieren"; -$a->strings["Provide built-in OStatus (identi.ca, status.net, etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."] = "Biete die eingebaute OStatus (identi.ca, status.net, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, so Privatsphäre Warnungen werden bei Bedarf angezeigt."; +$a->strings["Provide built-in OStatus (identi.ca, status.net, etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."] = "Biete die eingebaute OStatus (identi.ca, status.net, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, Privatsphäre Warnungen werden nur bei Bedarf angezeigt."; $a->strings["Enable Diaspora support"] = "Diaspora-Support aktivieren"; $a->strings["Provide built-in Diaspora network compatibility."] = "Verwende die eingebaute Diaspora-Verknüpfung."; $a->strings["Only allow Friendica contacts"] = "Nur Friendica-Kontakte erlauben"; @@ -1973,6 +1973,7 @@ $a->strings["Please enter a video link/URL:"] = "Bitte Link/URL zum Video einfü $a->strings["Please enter an audio link/URL:"] = "Bitte Link/URL zum Audio einfügen:"; $a->strings["Tag term:"] = "Tag:"; $a->strings["Where are you right now?"] = "Wo hältst du dich jetzt gerade auf?"; +$a->strings["Delete item(s)?"] = "Einträge löschen?"; $a->strings["permissions"] = "Zugriffsrechte"; $a->strings["Click here to upgrade."] = "Zum Upgraden hier klicken."; $a->strings["This action exceeds the limits set by your subscription plan."] = "Diese Aktion überschreitet die Obergrenze deines Abonnements."; From aa20042bece6cf45bee7c943968fc175d0a73a35 Mon Sep 17 00:00:00 2001 From: Fabrixxm Date: Mon, 5 Nov 2012 09:18:55 +0100 Subject: [PATCH 5/8] moveme: fix contact photos --- include/notifier.php | 18 +++++++++++++----- view/atom_relocate.tpl | 4 ++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/notifier.php b/include/notifier.php index 1d2c26fb2..c78d2f1a7 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -42,7 +42,7 @@ require_once('include/html2plain.php'); */ -function notifier_run($argv, $argc){ +function notifier_run(&$argv, &$argc){ global $a, $db; if(is_null($a)){ @@ -422,12 +422,20 @@ function notifier_run($argv, $argc){ set_config('system','site_pubkey', $res['pubkey']); } + $rp = q("SELECT `resource-id` , `scale`, type FROM `photo` + WHERE `profile` = 1 AND `uid` = %d ORDER BY scale;", $uid); + $photos = array(); + $ext = Photo::supportedTypes(); + foreach($rp as $p){ + $photos[$p['scale']] = $a->get_baseurl().'/photo/'.$p['resource-id'].'-'.$p['scale'].'.'.$ext[$p['type']]; + } + unset($rp, $ext); $atom .= replace_macros($sugg_template, array( '$name' => xmlify($owner['name']), - '$photo' => xmlify($owner['photo']), - '$thumb' => xmlify($owner['thumb']), - '$micro' => xmlify($owner['micro']), + '$photo' => xmlify($photos[4]), + '$thumb' => xmlify($photos[5]), + '$micro' => xmlify($photos[6]), '$url' => xmlify($owner['url']), '$request' => xmlify($owner['request']), '$confirm' => xmlify($owner['confirm']), @@ -438,7 +446,7 @@ function notifier_run($argv, $argc){ //'$prvkey' => xmlify($owner['prvkey']), )); $recipients_relocate = q("SELECT * FROM contact WHERE uid = %d AND self = 0 AND network = '%s'" , intval($uid), NETWORK_DFRN); - + unset($photos); } else { if($followup) { diff --git a/view/atom_relocate.tpl b/view/atom_relocate.tpl index 3976a0037..f7db934d7 100644 --- a/view/atom_relocate.tpl +++ b/view/atom_relocate.tpl @@ -4,8 +4,8 @@ $url $name $photo - $thumb - $micro + $thumb + $micro $request $confirm $notify From 385ee5a86207106408a20a3d2ec6dbeb3a313238 Mon Sep 17 00:00:00 2001 From: Fabrixxm Date: Mon, 5 Nov 2012 09:28:54 +0100 Subject: [PATCH 6/8] pass $argv & $argc as reference to *_run() functions. --- include/cronhooks.php | 2 +- include/directory.php | 2 +- include/expire.php | 2 +- include/gprobe.php | 2 +- include/onepoll.php | 2 +- include/poller.php | 2 +- include/queue.php | 2 +- util/po2php.php | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/cronhooks.php b/include/cronhooks.php index 37541f013..27cf642b2 100644 --- a/include/cronhooks.php +++ b/include/cronhooks.php @@ -3,7 +3,7 @@ require_once("boot.php"); -function cronhooks_run($argv, $argc){ +function cronhooks_run(&$argv, &$argc){ global $a, $db; if(is_null($a)) { diff --git a/include/directory.php b/include/directory.php index 45386183c..356118bb0 100644 --- a/include/directory.php +++ b/include/directory.php @@ -1,7 +1,7 @@ \n\n"; From cef5afc53d5cdc8604449aac4f687866d03cec02 Mon Sep 17 00:00:00 2001 From: Fabrixxm Date: Mon, 5 Nov 2012 04:15:09 -0500 Subject: [PATCH 7/8] moveme: remove debug comment --- include/uimport.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/uimport.php b/include/uimport.php index e43f331dc..942793168 100644 --- a/include/uimport.php +++ b/include/uimport.php @@ -228,7 +228,7 @@ function import_account(&$a, $file) { } // send relocate messages - //proc_run('php', 'include/notifier.php', 'relocate' , $newuid); + proc_run('php', 'include/notifier.php', 'relocate' , $newuid); info(t("Done. You can now login with your username and password")); goaway( $a->get_baseurl() ."/login"); From b7e121ccf7072858622e1ee544f7530c89556ffe Mon Sep 17 00:00:00 2001 From: zottel Date: Tue, 6 Nov 2012 08:16:08 +0100 Subject: [PATCH 8/8] Forgot to commit the changes (regarding fermionic's comments) in notifier.php --- include/notifier.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/notifier.php b/include/notifier.php index a999c3297..2f4120da2 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -136,11 +136,15 @@ function notifier_run($argv, $argc){ } elseif($cmd === 'removeme') { $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($item_id)); + if (! $r) + return; $user = $r[0]; $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", intval($item_id)); + if (! $r) + return; $self = $r[0]; $r = q("SELECT * FROM `contact` WHERE `self` = 0 AND `uid` = %d", intval($item_id)); - if(! count($r)) + if(! $r) return; require_once('include/Contact.php'); foreach($r as $contact) {