1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/hubzilla_ynh.git synced 2024-09-03 19:26:21 +02:00

Updated to Hubzilla and addons to 1.4

This commit is contained in:
anmol26s 2016-04-17 19:59:18 +05:30
parent 41508bf83b
commit e1a891bd15
678 changed files with 73705 additions and 70078 deletions

View file

@ -1,3 +1,36 @@
Hubzilla 1.4
[This list may appear brief, but encompasses a huge amount of re-writing and re-factoring
of the internal code structure to gain long-term performance and stability and provide a standard
interface to alternate protocol federation plugins which were made possible by the UNO configuration.
UNO is a configuration of hubzilla introduced in 1.3 with reduced complexity and which provides
improved protocol federation potential to other networks by virtue of removing nomadic identity
(which is not possible to model or work around using other network protocols).]
Implement channel move operation for UNO configuration
Remove bookmark references in UNO (which has no bookmarks by default)
UI cleanup profiles/chat/manage
Refactor webfinger probes and salmon backend for GNU-social federation
SECURITY: DAV authentication exploit
Context help added
More help pages
Provide 'posts only' feed
Refactor App to remove globals
Refactor Session to remove globals
provide a fullscreen mode for selected modules and functions
Regression: some addon routes broken
fix "remember me"
Autocomplete tool extended to bbcode/comanche
Clone sync of file/photo updates
system rename (e.g. http to https or DNS name change) missing some connection photos
calendar module not blocked to public whhen block_public enabled
Use timeago.js in reshare content so that timestamps will be correct on federated reshares
Rework detection of JavaScript to avoid reload penalty under normal operation
Changed primary directory server to a hubzilla server
Plugins:
Diaspora - switch to alternate XML parser to avoid storing compound objects
GNU-Social - Huge amounts of work, federation somewhat working now, several issues remain
Friendica - Initial federation work (not yet published)
Hubzilla 1.3 Hubzilla 1.3
Admin Security configuration page created which consolidates several previously hidden settings: Admin Security configuration page created which consolidates several previously hidden settings:
Communication white/black lists Communication white/black lists

View file

@ -3,26 +3,26 @@
Hubzilla - Community Server Hubzilla - Community Server
=========================== ===========================
Help us redefine the web - using integrated and united community websites. Connected and linked web communities.
-------------------------------------------------------------------------- -------------------------------------
<p align="center" markdown="1"> <p align="center" markdown="1">
<em><a href="https://github.com/redmatrix/hubzilla/blob/master/install/INSTALL.txt">Installing Hubzilla</a></em> <em><a href="https://github.com/redmatrix/hubzilla/blob/master/install/INSTALL.txt">Installing Hubzilla</a></em>
</p> </p>
**What are Hubs?** **What are Hubz?**
Hubs are independent general-purpose websites that not only connect with their associated members and viewers, but also connect together to exchange personal communications and other information with each other. Hubz are independent general-purpose websites that not only connect with their associated members and viewers, but also connect together to exchange personal communications and other information with each other.
This allows hub members on any hub to securely and privately share anything; with anybody, on any hub - anywhere; or share stuff publicly with anybody on the internet if desired. This allows hub members on any hub to securely and privately share anything; with anybody, on any hub - anywhere; or share stuff publicly with anybody on the internet if desired.
**Hubzilla** is the server software which makes this possible. It is a sophisticated and unique combination of an open source content management system and a decentralised identity, communications, and permissions framework and protocol suite, built using common webserver technology (PHP/MySQL/Apache, although Mariadb or Postgres and Nginx could also be used - we're pretty easy). The end result is a level of systems integration, privacy control, and communications features that you wouldn't think are possible in either a content management system or a decentralised communications network. It also brings a new level of cooperation and privacy to the web and introduces the concept of personally owned "single sign-on" to web services across the entire internet. **Hubzilla** is the server software which makes this possible. It is a sophisticated and unique combination of an open source content management system and a decentralised identity, communications, and permissions framework and protocol suite, built using common webserver technology (PHP/MySQL/Apache and popular variants). The end result is a level of systems integration, privacy control, and communications features that you wouldn't think are possible in either a content management system or a decentralised communications network. It also brings a new level of cooperation and privacy to the web and introduces the concept of personally owned "single sign-on" to web services across the entire internet.
Hubzilla hubs are Hubzilla hubz are
* decentralised * decentralised
* inherently social * inherently social
* optionally inter-networked with other hubs * optionally inter-networked with other hubz
* privacy-enabled (privacy exclusions work across the entire internet to any registered identity on any compatible hubs) * privacy-enabled (privacy exclusions work across the entire internet to any registered identity on any compatible hubz)
Possible website applications include Possible website applications include

View file

@ -5,38 +5,39 @@ namespace Zotlabs\Project;
class System { class System {
function get_platform_name() { function get_platform_name() {
$a = get_app(); if(is_array(\App::$config) && is_array(\App::$config['system']) && \App::$config['system']['platform_name'])
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['platform_name']) return \App::$config['system']['platform_name'];
return $a->config['system']['platform_name'];
return PLATFORM_NAME; return PLATFORM_NAME;
} }
function get_site_name() {
if(is_array(\App::$config) && is_array(\App::$config['system']) && \App::$config['system']['sitename'])
return \App::$config['system']['sitename'];
return '';
}
function get_project_version() { function get_project_version() {
$a = get_app(); if(is_array(\App::$config) && is_array(\App::$config['system']) && \App::$config['system']['hide_version'])
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['hide_version'])
return ''; return '';
return RED_VERSION; return RED_VERSION;
} }
function get_update_version() { function get_update_version() {
$a = get_app(); if(is_array(\App::$config) && is_array(\App::$config['system']) && \App::$config['system']['hide_version'])
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['hide_version'])
return ''; return '';
return DB_UPDATE_VERSION; return DB_UPDATE_VERSION;
} }
function get_notify_icon() { function get_notify_icon() {
$a = get_app(); if(is_array(\App::$config) && is_array(\App::$config['system']) && \App::$config['system']['email_notify_icon_url'])
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['email_notify_icon_url']) return \App::$config['system']['email_notify_icon_url'];
return $a->config['system']['email_notify_icon_url'];
return z_root() . '/images/hz-white-32.png'; return z_root() . '/images/hz-white-32.png';
} }
function get_site_icon() { function get_site_icon() {
$a = get_app(); if(is_array(\App::$config) && is_array(\App::$config['system']) && \App::$config['system']['site_icon_url'])
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['site_icon_url']) return \App::$config['system']['site_icon_url'];
return $a->config['system']['site_icon_url'];
return z_root() . '/images/hz-32.png'; return z_root() . '/images/hz-32.png';
} }

View file

@ -243,7 +243,7 @@ class Browser extends DAV\Browser\Plugin {
)); ));
$a = get_app(); $a = get_app();
$a->page['content'] = $html; \App::$page['content'] = $html;
load_pdl($a); load_pdl($a);
$theme_info_file = "view/theme/" . current_theme() . "/php/theme.php"; $theme_info_file = "view/theme/" . current_theme() . "/php/theme.php";

View file

@ -53,7 +53,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
logger('directory ' . $ext_path, LOGGER_DATA); logger('directory ' . $ext_path, LOGGER_DATA);
$this->ext_path = $ext_path; $this->ext_path = $ext_path;
// remove "/cloud" from the beginning of the path // remove "/cloud" from the beginning of the path
$modulename = get_app()->module; $modulename = \App::$module;
$this->red_path = ((strpos($ext_path, '/' . $modulename) === 0) ? substr($ext_path, strlen($modulename) + 1) : $ext_path); $this->red_path = ((strpos($ext_path, '/' . $modulename) === 0) ? substr($ext_path, strlen($modulename) + 1) : $ext_path);
if (! $this->red_path) { if (! $this->red_path) {
$this->red_path = '/'; $this->red_path = '/';
@ -114,7 +114,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
throw new DAV\Exception\Forbidden('Permission denied.'); throw new DAV\Exception\Forbidden('Permission denied.');
} }
$modulename = get_app()->module; $modulename = \App::$module;
if ($this->red_path === '/' && $name === $modulename) { if ($this->red_path === '/' && $name === $modulename) {
return new Directory('/' . $modulename, $this->auth); return new Directory('/' . $modulename, $this->auth);
} }
@ -168,6 +168,14 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
intval($this->auth->owner_id) intval($this->auth->owner_id)
); );
$ch = channelx_by_n($this->auth->owner_id);
if($ch) {
$sync = attach_export_data($ch,$this->folder_hash);
if($sync)
build_sync_packet($ch['channel_id'],array('file' => array($sync)));
}
$this->red_path = $new_path; $this->red_path = $new_path;
} }
@ -332,9 +340,15 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
require_once('include/photos.php'); require_once('include/photos.php');
$args = array( 'resource_id' => $hash, 'album' => $album, 'os_path' => $f, 'filename' => $name, 'getimagesize' => $x, 'directory' => $direct); $args = array( 'resource_id' => $hash, 'album' => $album, 'os_path' => $f, 'filename' => $name, 'getimagesize' => $x, 'directory' => $direct);
$p = photo_upload($c[0],get_app()->get_observer(),$args); $p = photo_upload($c[0],\App::get_observer(),$args);
} }
$sync = attach_export_data($c[0],$hash);
if($sync)
build_sync_packet($c[0]['channel_id'],array('file' => array($sync)));
} }
/** /**
@ -356,7 +370,14 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
if ($r) { if ($r) {
$result = attach_mkdir($r[0], $this->auth->observer, array('filename' => $name, 'folder' => $this->folder_hash)); $result = attach_mkdir($r[0], $this->auth->observer, array('filename' => $name, 'folder' => $this->folder_hash));
if (! $result['success']) {
if($result['success']) {
$sync = attach_export_data($r[0],$ret['data']['hash']);
if($sync) {
build_sync_packet($r[0]['channel_id'],array('file' => array($sync)));
}
}
else {
logger('error ' . print_r($result, true), LOGGER_DEBUG); logger('error ' . print_r($result, true), LOGGER_DEBUG);
} }
} }
@ -380,6 +401,15 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
} }
attach_delete($this->auth->owner_id, $this->folder_hash); attach_delete($this->auth->owner_id, $this->folder_hash);
$ch = channelx_by_n($this->auth->owner_id);
if($ch) {
$sync = attach_export_data($ch,$this->folder_hash,true);
if($sync)
build_sync_packet($ch['channel_id'],array('file' => array($sync)));
}
} }
@ -393,7 +423,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
public function childExists($name) { public function childExists($name) {
// On /cloud we show a list of available channels. // On /cloud we show a list of available channels.
// @todo what happens if no channels are available? // @todo what happens if no channels are available?
$modulename = get_app()->module; $modulename = \App::$module;
if ($this->red_path === '/' && $name === $modulename) { if ($this->red_path === '/' && $name === $modulename) {
//logger('We are at ' $modulename . ' show a channel list', LOGGER_DEBUG); //logger('We are at ' $modulename . ' show a channel list', LOGGER_DEBUG);
return true; return true;
@ -417,7 +447,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
logger('GetDir: ' . $this->ext_path, LOGGER_DEBUG); logger('GetDir: ' . $this->ext_path, LOGGER_DEBUG);
$this->auth->log(); $this->auth->log();
$modulename = get_app()->module; $modulename = \App::$module;
$file = $this->ext_path; $file = $this->ext_path;

View file

@ -84,6 +84,20 @@ class File extends DAV\Node implements DAV\IFile {
dbesc($this->data['hash']), dbesc($this->data['hash']),
intval($this->data['id']) intval($this->data['id'])
); );
if($this->data->is_photo) {
$r = q("update photo set filename = '%s' where resource_id = '%s' and uid = %d",
dbesc($newName),
dbesc($this->data['hash']),
intval($this->auth->owner_id)
);
}
$ch = channelx_by_n($this->auth->owner_id);
if($ch) {
$sync = attach_export_data($ch,$this->data['hash']);
if($sync)
build_sync_packet($ch['channel_id'],array('file' => array($sync)));
}
} }
/** /**
@ -173,7 +187,7 @@ class File extends DAV\Node implements DAV\IFile {
if($is_photo) { if($is_photo) {
require_once('include/photos.php'); require_once('include/photos.php');
$args = array( 'resource_id' => $this->data['hash'], 'album' => $album, 'os_path' => $f, 'filename' => $r[0]['filename'], 'getimagesize' => $gis, 'directory' => $direct ); $args = array( 'resource_id' => $this->data['hash'], 'album' => $album, 'os_path' => $f, 'filename' => $r[0]['filename'], 'getimagesize' => $gis, 'directory' => $direct );
$p = photo_upload($c[0],get_app()->get_observer(),$args); $p = photo_upload($c[0],\App::get_observer(),$args);
} }
// update the folder's lastmodified timestamp // update the folder's lastmodified timestamp
@ -205,6 +219,12 @@ class File extends DAV\Node implements DAV\IFile {
return; return;
} }
} }
$sync = attach_export_data($c[0],$this->data['hash']);
if($sync)
build_sync_packet($c[0]['channel_id'],array('file' => array($sync)));
} }
/** /**
@ -318,5 +338,12 @@ class File extends DAV\Node implements DAV\IFile {
} }
attach_delete($this->auth->owner_id, $this->data['hash']); attach_delete($this->auth->owner_id, $this->data['hash']);
$ch = channelx_by_n($this->auth->owner_id);
if($ch) {
$sync = attach_export_data($ch,$this->data['hash'],true);
if($sync)
build_sync_packet($ch['channel_id'],array('file' => array($sync)));
}
} }
} }

View file

@ -0,0 +1,36 @@
<?php
namespace Zotlabs\Web;
class CheckJS {
private static $jsdisabled = 0;
function __construct($test = 0) {
if(intval($_REQUEST['jsdisabled']))
$this->jsdisabled = 1;
if(intval($_COOKIE['jsdisabled']))
$this->jsdisabled = 1;
if(! $this->jsdisabled) {
$page = urlencode(\App::$query_string);
if($test) {
\App::$page['htmlhead'] .= "\r\n" . '<meta http-equiv="refresh" content="0; url=' . z_root() . '/nojs?f=&redir=' . $page . '">' . "\r\n";
}
else {
\App::$page['htmlhead'] .= "\r\n" . '<noscript><meta http-equiv="refresh" content="0; url=' . z_root() . '/nojs?f=&redir=' . $page . '"></noscript>' . "\r\n";
}
}
}
function disabled() {
return self::$jsdisabled;
}
}

View file

@ -9,9 +9,9 @@ class Router {
/** /**
* *
* We have already parsed the server path into $a->argc and $a->argv * We have already parsed the server path into App::$argc and App::$argv
* *
* $a->argv[0] is our module name. We will load the file mod/{$a->argv[0]}.php * App::$argv[0] is our module name. We will load the file mod/{App::$argv[0]}.php
* and use it for handling our URL request. * and use it for handling our URL request.
* The module file contains a few functions that we call in various circumstances * The module file contains a few functions that we call in various circumstances
* and in the following order: * and in the following order:
@ -25,7 +25,9 @@ class Router {
* further processing. * further processing.
*/ */
if(strlen($a->module)) { $module = \App::$module;
if(strlen($module)) {
/** /**
* *
@ -34,14 +36,14 @@ class Router {
* *
*/ */
if(is_array($a->plugins) && in_array($a->module,$a->plugins) && file_exists("addon/{$a->module}/{$a->module}.php")) { if(is_array(\App::$plugins) && in_array($module,\App::$plugins) && file_exists("addon/{$module}/{$module}.php")) {
include_once("addon/{$a->module}/{$a->module}.php"); include_once("addon/{$module}/{$module}.php");
if(function_exists($a->module . '_module')) if(function_exists($module . '_module'))
$a->module_loaded = true; \App::$module_loaded = true;
} }
if((strpos($a->module,'admin') === 0) && (! is_site_admin())) { if((strpos($module,'admin') === 0) && (! is_site_admin())) {
$a->module_loaded = false; \App::$module_loaded = false;
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
goaway(z_root()); goaway(z_root());
} }
@ -51,17 +53,19 @@ class Router {
* Otherwise, look for the standard program module in the 'mod' directory * Otherwise, look for the standard program module in the 'mod' directory
*/ */
if(! $a->module_loaded) { if(! (\App::$module_loaded)) {
if(file_exists("mod/site/{$a->module}.php")) { if(file_exists("mod/site/{$module}.php")) {
include_once("mod/site/{$a->module}.php"); include_once("mod/site/{$module}.php");
$a->module_loaded = true; \App::$module_loaded = true;
} }
elseif(file_exists("mod/{$a->module}.php")) { elseif(file_exists("mod/{$module}.php")) {
include_once("mod/{$a->module}.php"); include_once("mod/{$module}.php");
$a->module_loaded = true; \App::$module_loaded = true;
} }
else logger("mod/{$module}.php not found.");
} }
/** /**
* This provides a place for plugins to register module handlers which don't otherwise exist on the system. * This provides a place for plugins to register module handlers which don't otherwise exist on the system.
* If the plugin sets 'installed' to true we won't throw a 404 error for the specified module even if * If the plugin sets 'installed' to true we won't throw a 404 error for the specified module even if
@ -69,10 +73,10 @@ class Router {
* The plugin should catch at least one of the module hooks for this URL. * The plugin should catch at least one of the module hooks for this URL.
*/ */
$x = array('module' => $a->module, 'installed' => false); $x = array('module' => $module, 'installed' => false);
call_hooks('module_loaded', $x); call_hooks('module_loaded', $x);
if($x['installed']) if($x['installed'])
$a->module_loaded = true; \App::$module_loaded = true;
/** /**
* The URL provided does not resolve to a valid module. * The URL provided does not resolve to a valid module.
@ -85,28 +89,28 @@ class Router {
* Otherwise we are going to emit a 404 not found. * Otherwise we are going to emit a 404 not found.
*/ */
if(! $a->module_loaded) { if(! (\App::$module_loaded)) {
// Stupid browser tried to pre-fetch our Javascript img template. Don't log the event or return anything - just quietly exit. // Stupid browser tried to pre-fetch our Javascript img template. Don't log the event or return anything - just quietly exit.
if((x($_SERVER, 'QUERY_STRING')) && preg_match('/{[0-9]}/', $_SERVER['QUERY_STRING']) !== 0) { if((x($_SERVER, 'QUERY_STRING')) && preg_match('/{[0-9]}/', $_SERVER['QUERY_STRING']) !== 0) {
killme(); killme();
} }
if((x($_SERVER, 'QUERY_STRING')) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && $a->config['system']['dreamhost_error_hack']) { if((x($_SERVER, 'QUERY_STRING')) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && \App::$config['system']['dreamhost_error_hack']) {
logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']); logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']);
goaway($a->get_baseurl() . $_SERVER['REQUEST_URI']); goaway(z_root() . $_SERVER['REQUEST_URI']);
} }
logger('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' ADDRESS: ' . $_SERVER['REMOTE_ADDR'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG); logger('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' ADDRESS: ' . $_SERVER['REMOTE_ADDR'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG);
header($_SERVER['SERVER_PROTOCOL'] . ' 404 ' . t('Not Found')); header($_SERVER['SERVER_PROTOCOL'] . ' 404 ' . t('Not Found'));
$tpl = get_markup_template('404.tpl'); $tpl = get_markup_template('404.tpl');
$a->page['content'] = replace_macros($tpl, array( \App::$page['content'] = replace_macros($tpl, array(
'$message' => t('Page not found.') '$message' => t('Page not found.')
)); ));
// pretend this is a module so it will initialise the theme // pretend this is a module so it will initialise the theme
$a->module = '404'; \App::$module = '404';
$a->module_loaded = true; \App::$module_loaded = true;
} }
} }
} }
@ -118,8 +122,8 @@ class Router {
* Call module functions * Call module functions
*/ */
if($a->module_loaded) { if(\App::$module_loaded) {
$a->page['page_title'] = $a->module; \App::$page['page_title'] = \App::$module;
$placeholder = ''; $placeholder = '';
/** /**
@ -129,11 +133,11 @@ class Router {
* to over-ride them. * to over-ride them.
*/ */
if(function_exists($a->module . '_init')) { if(function_exists(\App::$module . '_init')) {
$arr = array('init' => true, 'replace' => false); $arr = array('init' => true, 'replace' => false);
call_hooks($a->module . '_mod_init', $arr); call_hooks(\App::$module . '_mod_init', $arr);
if(! $arr['replace']) { if(! $arr['replace']) {
$func = $a->module . '_init'; $func = \App::$module . '_init';
$func($a); $func($a);
} }
} }
@ -167,32 +171,32 @@ class Router {
$func = str_replace('-', '_', current_theme()) . '_init'; $func = str_replace('-', '_', current_theme()) . '_init';
$func($a); $func($a);
} }
elseif (x($a->theme_info, 'extends') && file_exists('view/theme/' . $a->theme_info['extends'] . '/php/theme.php')) { elseif (x(\App::$theme_info, 'extends') && file_exists('view/theme/' . \App::$theme_info['extends'] . '/php/theme.php')) {
require_once('view/theme/' . $a->theme_info['extends'] . '/php/theme.php'); require_once('view/theme/' . \App::$theme_info['extends'] . '/php/theme.php');
if(function_exists(str_replace('-', '_', $a->theme_info['extends']) . '_init')) { if(function_exists(str_replace('-', '_', \App::$theme_info['extends']) . '_init')) {
$func = str_replace('-', '_', $a->theme_info['extends']) . '_init'; $func = str_replace('-', '_', \App::$theme_info['extends']) . '_init';
$func($a); $func($a);
} }
} }
if(($_SERVER['REQUEST_METHOD'] === 'POST') && (! $a->error) if(($_SERVER['REQUEST_METHOD'] === 'POST') && (! \App::$error)
&& (function_exists($a->module . '_post')) && (function_exists(\App::$module . '_post'))
&& (! x($_POST, 'auth-params'))) { && (! x($_POST, 'auth-params'))) {
call_hooks($a->module . '_mod_post', $_POST); call_hooks(\App::$module . '_mod_post', $_POST);
$func = $a->module . '_post'; $func = \App::$module . '_post';
$func($a); $func($a);
} }
if((! $a->error) && (function_exists($a->module . '_content'))) { if((! \App::$error) && (function_exists(\App::$module . '_content'))) {
$arr = array('content' => $a->page['content'], 'replace' => false); $arr = array('content' => \App::$page['content'], 'replace' => false);
call_hooks($a->module . '_mod_content', $arr); call_hooks(\App::$module . '_mod_content', $arr);
$a->page['content'] = $arr['content']; \App::$page['content'] = $arr['content'];
if(! $arr['replace']) { if(! $arr['replace']) {
$func = $a->module . '_content'; $func = \App::$module . '_content';
$arr = array('content' => $func($a)); $arr = array('content' => $func($a));
} }
call_hooks($a->module . '_mod_aftercontent', $arr); call_hooks(\App::$module . '_mod_aftercontent', $arr);
$a->page['content'] .= $arr['content']; \App::$page['content'] .= $arr['content'];
} }
} }
} }

View file

@ -0,0 +1,160 @@
<?php
namespace Zotlabs\Web;
/**
*
* @brief This file includes session related functions.
*
* Session management functions. These provide database storage of PHP
* session info.
*/
class Session {
private static $handler = null;
private static $session_started = false;
function init() {
$gc_probability = 50;
ini_set('session.gc_probability', $gc_probability);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_httponly', 1);
/*
* Set our session storage functions.
*/
$handler = new \Zotlabs\Web\SessionHandler();
self::$handler = $handler;
$x = session_set_save_handler($handler,true);
if(! $x)
logger('Session save handler initialisation failed.',LOGGER_NORMAL,LOG_ERR);
// Force cookies to be secure (https only) if this site is SSL enabled.
// Must be done before session_start().
$arr = session_get_cookie_params();
session_set_cookie_params(
((isset($arr['lifetime'])) ? $arr['lifetime'] : 0),
((isset($arr['path'])) ? $arr['path'] : '/'),
((isset($arr['domain'])) ? $arr['domain'] : App::get_hostname()),
((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') ? true : false),
((isset($arr['httponly'])) ? $arr['httponly'] : true)
);
}
function start() {
session_start();
self::$session_started = true;
}
/**
* @brief Resets the current session.
*
* @return void
*/
function nuke() {
self::new_cookie(0); // 0 means delete on browser exit
if($_SESSION && count($_SESSION)) {
foreach($_SESSION as $k => $v) {
unset($_SESSION[$k]);
}
}
}
function new_cookie($xtime) {
$newxtime = (($xtime> 0) ? (time() + $xtime) : 0);
$old_sid = session_id();
if(self::$handler && self::$session_started) {
session_regenerate_id(true);
// force SessionHandler record creation with the new session_id
// which occurs as a side effect of read()
self::$handler->read(session_id());
}
else
logger('no session handler');
if (x($_COOKIE, 'jsdisabled')) {
setcookie('jsdisabled', $_COOKIE['jsdisabled'], $newxtime);
}
setcookie(session_name(),session_id(),$newxtime);
$arr = array('expire' => $xtime);
call_hooks('new_cookie', $arr);
}
function extend_cookie() {
// if there's a long-term cookie, extend it
$xtime = (($_SESSION['remember_me']) ? (60 * 60 * 24 * 365) : 0 );
if($xtime)
setcookie(session_name(),session_id(),(time() + $xtime));
$arr = array('expire' => $xtime);
call_hooks('extend_cookie', $arr);
}
function return_check() {
// check a returning visitor against IP changes.
// If the change results in being blocked from re-entry with the current cookie
// nuke the session and logout.
// Returning at all indicates the session is still valid.
// first check if we're enforcing that sessions can't change IP address
// @todo what to do with IPv6 addresses
if($_SESSION['addr'] && $_SESSION['addr'] != $_SERVER['REMOTE_ADDR']) {
logger('SECURITY: Session IP address changed: ' . $_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']);
$partial1 = substr($_SESSION['addr'], 0, strrpos($_SESSION['addr'], '.'));
$partial2 = substr($_SERVER['REMOTE_ADDR'], 0, strrpos($_SERVER['REMOTE_ADDR'], '.'));
$paranoia = intval(get_pconfig($_SESSION['uid'], 'system', 'paranoia'));
if(! $paranoia)
$paranoia = intval(get_config('system', 'paranoia'));
switch($paranoia) {
case 0:
// no IP checking
break;
case 2:
// check 2 octets
$partial1 = substr($partial1, 0, strrpos($partial1, '.'));
$partial2 = substr($partial2, 0, strrpos($partial2, '.'));
if($partial1 == $partial2)
break;
case 1:
// check 3 octets
if($partial1 == $partial2)
break;
case 3:
default:
// check any difference at all
logger('Session address changed. Paranoid setting in effect, blocking session. '
. $_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']);
self::nuke();
goaway(z_root());
break;
}
}
return true;
}
}

View file

@ -0,0 +1,88 @@
<?php
namespace Zotlabs\Web;
class SessionHandler implements \SessionHandlerInterface {
function open ($s, $n) {
return true;
}
// IMPORTANT: if we read the session and it doesn't exist, create an empty record.
// We rely on this due to differing PHP implementation of session_regenerate_id()
// some which call read explicitly and some that do not. So we call it explicitly
// just after sid regeneration to force a record to exist.
function read ($id) {
if($id) {
$r = q("SELECT `data` FROM `session` WHERE `sid`= '%s'", dbesc($id));
if($r) {
return $r[0]['data'];
}
else {
q("INSERT INTO `session` (sid, expire) values ('%s', '%s')",
dbesc($id),
dbesc(time() + 300)
);
}
}
return '';
}
function write ($id, $data) {
if(! $id || ! $data) {
return false;
}
// Unless we authenticate somehow, only keep a session for 5 minutes
// The viewer can extend this by performing any web action using the
// original cookie, but this allows us to cleanup the hundreds or
// thousands of empty sessions left around from web crawlers which are
// assigned cookies on each page that they never use.
$expire = time() + 300;
if($_SESSION) {
if(array_key_exists('remember_me',$_SESSION) && intval($_SESSION['remember_me']))
$expire = time() + (60 * 60 * 24 * 365);
elseif(local_channel())
$expire = time() + (60 * 60 * 24 * 3);
elseif(remote_channel())
$expire = time() + (60 * 60 * 24 * 1);
}
q("UPDATE `session`
SET `data` = '%s', `expire` = '%s' WHERE `sid` = '%s'",
dbesc($data),
dbesc($expire),
dbesc($id)
);
return true;
}
function close() {
return true;
}
function destroy ($id) {
q("DELETE FROM `session` WHERE `sid` = '%s'", dbesc($id));
return true;
}
function gc($expire) {
q("DELETE FROM session WHERE expire < %d", dbesc(time()));
return true;
}
}

View file

@ -132,7 +132,7 @@ class Auth {
// tell them to logout if they're logged in locally as anything but the target remote account // tell them to logout if they're logged in locally as anything but the target remote account
// in which case just shut up because they don't need to be doing this at all. // in which case just shut up because they don't need to be doing this at all.
if (get_app()->channel['channel_hash'] == $hubloc['xchan_hash']) { if (\App::$channel['channel_hash'] == $hubloc['xchan_hash']) {
return true; return true;
} }
else { else {
@ -242,9 +242,9 @@ class Auth {
$arr = array('xchan' => $hubloc, 'url' => $this->desturl, 'session' => $_SESSION); $arr = array('xchan' => $hubloc, 'url' => $this->desturl, 'session' => $_SESSION);
call_hooks('magic_auth_success',$arr); call_hooks('magic_auth_success',$arr);
get_app()->set_observer($hubloc); \App::set_observer($hubloc);
require_once('include/security.php'); require_once('include/security.php');
get_app()->set_groups(init_groups_visitor($_SESSION['visitor_id'])); \App::set_groups(init_groups_visitor($_SESSION['visitor_id']));
info(sprintf( t('Welcome %s. Remote authentication successful.'),$hubloc['xchan_name'])); info(sprintf( t('Welcome %s. Remote authentication successful.'),$hubloc['xchan_name']));
logger('mod_zot: auth success from ' . $hubloc['xchan_addr']); logger('mod_zot: auth success from ' . $hubloc['xchan_addr']);
$this->success = true; $this->success = true;
@ -341,5 +341,5 @@ class Auth {
* Service_class can be used by cooperating sites to provide different access rights based on account rights and subscription plans. It is * Service_class can be used by cooperating sites to provide different access rights based on account rights and subscription plans. It is
* a string whose contents are not defined by protocol. Example: "basic" or "gold". * a string whose contents are not defined by protocol. Example: "basic" or "gold".
* *
* @param[in,out] App &$a * @param[in,out] \App &$a
*/ */

View file

@ -0,0 +1,42 @@
<?php
namespace Zotlabs\Zot;
class Verify {
function create($type,$channel_id,$token,$meta) {
return q("insert into verify ( type, channel, token, meta, created ) values ( '%s', %d, '%s', '%s', '%s' )",
dbesc($type),
intval($channel_id),
dbesc($token),
dbesc($meta),
dbesc(datetime_convert())
);
}
function match($type,$channel_id,$token,$meta) {
$r = q("select id from verify where type = '%s' and channel = %d and token = '%s' and meta = '%s' limit 1",
dbesc($type),
intval($channel_id),
dbesc($token),
dbesc($meta)
);
if($r) {
q("delete from verify where id = %d",
intval($r[0]['id'])
);
return true;
}
return false;
}
function purge($type,$interval) {
q("delete from verify where type = '%s' and created < %s - INTERVAL %s",
dbesc($type),
db_utcnow(),
db_quoteinterval($interval)
);
}
}

View file

@ -28,7 +28,7 @@ function bookmarker_prepare_body(&$a,&$b) {
if(! strpos($b['html'],'bookmark-identifier')) if(! strpos($b['html'],'bookmark-identifier'))
return; return;
if(function_exists('redbasic_init') || get_app()->theme_info['extends'] == 'redbasic') if(function_exists('redbasic_init') || App::$theme_info['extends'] == 'redbasic')
$bookmarkicon = '<i class="icon-bookmark"></i>'; $bookmarkicon = '<i class="icon-bookmark"></i>';
else else
$bookmarkicon = '<img src="addon/bookmarker/bookmarker.png" width="19px" height="20px" alt="#^" />'; $bookmarkicon = '<img src="addon/bookmarker/bookmarker.png" width="19px" height="20px" alt="#^" />';

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Informar de problema"; App::$strings["Report Bug"] = "Informar de problema";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Nahlásit chybu"; App::$strings["Report Bug"] = "Nahlásit chybu";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Fehlerreport erstellen"; App::$strings["Report Bug"] = "Fehlerreport erstellen";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Skribi cimraporton"; App::$strings["Report Bug"] = "Skribi cimraporton";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Informe de errores"; App::$strings["Report Bug"] = "Informe de errores";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Signaler un bug"; App::$strings["Report Bug"] = "Signaler un bug";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Tilkynna bilun"; App::$strings["Report Bug"] = "Tilkynna bilun";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Segnala un Bug"; App::$strings["Report Bug"] = "Segnala un Bug";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = ""; App::$strings["Report Bug"] = "";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Zgłoś problem"; App::$strings["Report Bug"] = "Zgłoś problem";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Relate um Bug"; App::$strings["Report Bug"] = "Relate um Bug";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "Сообщить об ошибке"; App::$strings["Report Bug"] = "Сообщить об ошибке";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Report Bug"] = "报案程序错误"; App::$strings["Report Bug"] = "报案程序错误";

View file

@ -285,7 +285,7 @@ id.value = ""
</script> </script>
EOT; EOT;
$a->page['htmlhead'] .= $x; App::$page['htmlhead'] .= $x;
} }
function calc_content($app) { function calc_content($app) {

View file

@ -24,7 +24,7 @@ logger('dfedfix: ' . print_r($b,true));
$x = str_replace('</Subject>','</Subject> $x = str_replace('</Subject>','</Subject>
<Alias>' . z_root() . '/channel/' . $b['user']['channel_address'] . '</Alias>',$x); <Alias>' . z_root() . '/channel/' . $b['user']['channel_address'] . '</Alias>',$x);
$x = str_replace('.AQAB" />','.AQAB "/> $x = str_replace('.AQAB" />','.AQAB "/>
<Link rel="salmon" href="' . z_root() . '/receive/users/' . $b['user']['channel_guid'] . str_replace('.','',$a->get_hostname()) . '"/>',$x); <Link rel="salmon" href="' . z_root() . '/receive/users/' . $b['user']['channel_guid'] . str_replace('.','',App::get_hostname()) . '"/>',$x);
$b['xml'] = $x; $b['xml'] = $x;
} }

View file

@ -142,51 +142,53 @@ function diaspora_dispatch($importer,$msg) {
$msg['message']); $msg['message']);
$parsed_xml = parse_xml_string($msg['message'],false); // $parsed_xml = parse_xml_string($msg['message'],false);
$xmlbase = $parsed_xml->post; $parsed_xml = xml2array($msg['message'],false,0,'tag');
$xmlbase = $parsed_xml['post'];
// logger('diaspora_dispatch: ' . print_r($xmlbase,true), LOGGER_DATA); // logger('diaspora_dispatch: ' . print_r($xmlbase,true), LOGGER_DATA);
if($xmlbase->request) { if($xmlbase['request']) {
$ret = diaspora_request($importer,$xmlbase->request); $ret = diaspora_request($importer,$xmlbase['request']);
} }
elseif($xmlbase->status_message) { elseif($xmlbase['status_message']) {
$ret = diaspora_post($importer,$xmlbase->status_message,$msg); $ret = diaspora_post($importer,$xmlbase['status_message'],$msg);
} }
elseif($xmlbase->profile) { elseif($xmlbase['profile']) {
$ret = diaspora_profile($importer,$xmlbase->profile,$msg); $ret = diaspora_profile($importer,$xmlbase['profile'],$msg);
} }
elseif($xmlbase->comment) { elseif($xmlbase['comment']) {
$ret = diaspora_comment($importer,$xmlbase->comment,$msg); $ret = diaspora_comment($importer,$xmlbase['comment'],$msg);
} }
elseif($xmlbase->like) { elseif($xmlbase['like']) {
$ret = diaspora_like($importer,$xmlbase->like,$msg); $ret = diaspora_like($importer,$xmlbase['like'],$msg);
} }
elseif($xmlbase->asphoto) { elseif($xmlbase['asphoto']) {
$ret = diaspora_asphoto($importer,$xmlbase->asphoto,$msg); $ret = diaspora_asphoto($importer,$xmlbase['asphoto'],$msg);
} }
elseif($xmlbase->reshare) { elseif($xmlbase['reshare']) {
$ret = diaspora_reshare($importer,$xmlbase->reshare,$msg); $ret = diaspora_reshare($importer,$xmlbase['reshare'],$msg);
} }
elseif($xmlbase->retraction) { elseif($xmlbase['retraction']) {
$ret = diaspora_retraction($importer,$xmlbase->retraction,$msg); $ret = diaspora_retraction($importer,$xmlbase['retraction'],$msg);
} }
elseif($xmlbase->signed_retraction) { elseif($xmlbase['signed_retraction']) {
$ret = diaspora_signed_retraction($importer,$xmlbase->signed_retraction,$msg); $ret = diaspora_signed_retraction($importer,$xmlbase['signed_retraction'],$msg);
} }
elseif($xmlbase->relayable_retraction) { elseif($xmlbase['relayable_retraction']) {
$ret = diaspora_signed_retraction($importer,$xmlbase->relayable_retraction,$msg); $ret = diaspora_signed_retraction($importer,$xmlbase['relayable_retraction'],$msg);
} }
elseif($xmlbase->photo) { elseif($xmlbase['photo']) {
$ret = diaspora_photo($importer,$xmlbase->photo,$msg); $ret = diaspora_photo($importer,$xmlbase['photo'],$msg);
} }
elseif($xmlbase->conversation) { elseif($xmlbase['conversation']) {
$ret = diaspora_conversation($importer,$xmlbase->conversation,$msg); $ret = diaspora_conversation($importer,$xmlbase['conversation'],$msg);
} }
elseif($xmlbase->message) { elseif($xmlbase['message']) {
$ret = diaspora_message($importer,$xmlbase->message,$msg); $ret = diaspora_message($importer,$xmlbase['message'],$msg);
} }
else { else {
logger('diaspora_dispatch: unknown message type: ' . print_r($xmlbase,true)); logger('diaspora_dispatch: unknown message type: ' . print_r($xmlbase,true));
@ -496,7 +498,7 @@ function diaspora_pubmsg_build($msg,$channel,$contact,$prvkey,$pubkey) {
logger('diaspora_pubmsg_build: ' . $msg, LOGGER_DATA, LOG_DEBUG); logger('diaspora_pubmsg_build: ' . $msg, LOGGER_DATA, LOG_DEBUG);
$handle = $channel['channel_address'] . '@' . get_app()->get_hostname(); $handle = $channel['channel_address'] . '@' . App::get_hostname();
$b64url_data = base64url_encode($msg,false); $b64url_data = base64url_encode($msg,false);
@ -561,7 +563,7 @@ function diaspora_msg_build($msg,$channel,$contact,$prvkey,$pubkey,$public = fal
$outer_iv = random_string(16); $outer_iv = random_string(16);
$b_outer_iv = base64_encode($outer_iv); $b_outer_iv = base64_encode($outer_iv);
$handle = $channel['channel_address'] . '@' . get_app()->get_hostname(); $handle = $channel['channel_address'] . '@' . App::get_hostname();
$padded_data = pkcs5_pad($msg,16); $padded_data = pkcs5_pad($msg,16);
$inner_encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $padded_data, MCRYPT_MODE_CBC, $inner_iv); $inner_encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $padded_data, MCRYPT_MODE_CBC, $inner_iv);
@ -797,8 +799,8 @@ function diaspora_request($importer,$xml) {
$a = get_app(); $a = get_app();
$sender_handle = unxmlify($xml->sender_handle); $sender_handle = unxmlify($xml['sender_handle']);
$recipient_handle = unxmlify($xml->recipient_handle); $recipient_handle = unxmlify($xml['recipient_handle']);
if(! $sender_handle || ! $recipient_handle) if(! $sender_handle || ! $recipient_handle)
return; return;
@ -845,7 +847,7 @@ function diaspora_request($importer,$xml) {
//FIXME //FIXME
/* /*
if(feature_enabled($channel['channel_id'],'premium_channel')) { if(feature_enabled($channel['channel_id'],'premium_channel')) {
$myaddr = $importer['channel_address'] . '@' . get_app()->get_hostname(); $myaddr = $importer['channel_address'] . '@' . App::get_hostname();
$cnv = random_string(); $cnv = random_string();
$mid = random_string(); $mid = random_string();
@ -996,9 +998,9 @@ function diaspora_request($importer,$xml) {
function diaspora_post($importer,$xml,$msg) { function diaspora_post($importer,$xml,$msg) {
$a = get_app(); $a = get_app();
$guid = notags(unxmlify($xml->guid)); $guid = notags(unxmlify($xml['guid']));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
$app = notags(xmlify($xml->provider_display_name)); $app = notags(xmlify($xml['provider_display_name']));
if($diaspora_handle != $msg['author']) { if($diaspora_handle != $msg['author']) {
@ -1033,13 +1035,13 @@ function diaspora_post($importer,$xml,$msg) {
return; return;
} }
$created = unxmlify($xml->created_at); $created = unxmlify($xml['created_at']);
$private = ((unxmlify($xml->public) == 'false') ? 1 : 0); $private = ((unxmlify($xml['public']) == 'false') ? 1 : 0);
$body = diaspora2bb($xml->raw_message); $body = diaspora2bb($xml['raw_message']);
if($xml->photo) { if($xml['photo']) {
$body = '[img]' . $xml->photo->remote_photo_path . $xml->photo->remote_photo_name . '[/img]' . "\n\n" . $body; $body = '[img]' . $xml['photo']['remote_photo_path'] . $xml['photo']['remote_photo_name'] . '[/img]' . "\n\n" . $body;
$body = scale_external_images($body); $body = scale_external_images($body);
} }
@ -1164,27 +1166,29 @@ function get_diaspora_reshare_xml($url,$recurse = 0) {
} }
logger('get_diaspora_reshare_xml: source: ' . $x['body'], LOGGER_DEBUG); logger('get_diaspora_reshare_xml: source: ' . $x['body'], LOGGER_DEBUG);
$source_xml = parse_xml_string($x['body'],false); // $source_xml = parse_xml_string($x['body'],false);
$source_xml = xml2array($x['body'],false,0,'tag');
if(! $source_xml) { if(! $source_xml) {
logger('get_diaspora_reshare_xml: unparseable result from ' . $url); logger('get_diaspora_reshare_xml: unparseable result from ' . $url);
return ''; return '';
} }
if($source_xml->post->status_message) { if($source_xml['post']['status_message']) {
return $source_xml; return $source_xml;
} }
// see if it's a reshare of a reshare // see if it's a reshare of a reshare
if($source_xml->post->reshare) if($source_xml['post']['reshare'])
$xml = $source_xml->post->reshare; $xml = $source_xml['post']['reshare'];
else else
return false; return false;
if($xml->root_diaspora_id && $xml->root_guid && $recurse < 15) { if($xml['root_diaspora_id'] && $xml['root_guid'] && $recurse < 15) {
$orig_author = notags(unxmlify($xml->root_diaspora_id)); $orig_author = notags(unxmlify($xml['root_diaspora_id']));
$orig_guid = notags(unxmlify($xml->root_guid)); $orig_guid = notags(unxmlify($xml['root_guid']));
$source_url = 'https://' . substr($orig_author,strpos($orig_author,'@')+1) . '/p/' . $orig_guid . '.xml'; $source_url = 'https://' . substr($orig_author,strpos($orig_author,'@')+1) . '/p/' . $orig_guid . '.xml';
$y = get_diaspora_reshare_xml($source_url,$recurse+1); $y = get_diaspora_reshare_xml($source_url,$recurse+1);
if($y) if($y)
@ -1200,8 +1204,8 @@ function diaspora_reshare($importer,$xml,$msg) {
logger('diaspora_reshare: init: ' . print_r($xml,true), LOGGER_DATA); logger('diaspora_reshare: init: ' . print_r($xml,true), LOGGER_DATA);
$a = get_app(); $a = get_app();
$guid = notags(unxmlify($xml->guid)); $guid = notags(unxmlify($xml['guid']));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
if($diaspora_handle != $msg['author']) { if($diaspora_handle != $msg['author']) {
@ -1223,27 +1227,27 @@ function diaspora_reshare($importer,$xml,$msg) {
return; return;
} }
$orig_author = notags(unxmlify($xml->root_diaspora_id)); $orig_author = notags(unxmlify($xml['root_diaspora_id']));
$orig_guid = notags(unxmlify($xml->root_guid)); $orig_guid = notags(unxmlify($xml['root_guid']));
$source_url = 'https://' . substr($orig_author,strpos($orig_author,'@')+1) . '/p/' . $orig_guid . '.xml'; $source_url = 'https://' . substr($orig_author,strpos($orig_author,'@')+1) . '/p/' . $orig_guid . '.xml';
$orig_url = 'https://'.substr($orig_author,strpos($orig_author,'@')+1).'/posts/'.$orig_guid; $orig_url = 'https://'.substr($orig_author,strpos($orig_author,'@')+1).'/posts/'.$orig_guid;
$source_xml = get_diaspora_reshare_xml($source_url); $source_xml = get_diaspora_reshare_xml($source_url);
if($source_xml->post->status_message) { if($source_xml['post']['status_message']) {
$body = diaspora2bb($source_xml->post->status_message->raw_message); $body = diaspora2bb($source_xml['post']['status_message']['raw_message']);
$orig_author = notags(unxmlify($source_xml->post->status_message->diaspora_handle)); $orig_author = notags(unxmlify($source_xml['post']['status_message']['diaspora_handle']));
$orig_guid = notags(unxmlify($source_xml->post->status_message->guid)); $orig_guid = notags(unxmlify($source_xml['post']['status_message']['guid']));
// Checking for embedded pictures // Checking for embedded pictures
if($source_xml->post->status_message->photo->remote_photo_path && if($source_xml['post']['status_message']['photo']['remote_photo_path'] &&
$source_xml->post->status_message->photo->remote_photo_name) { $source_xml['post']['status_message']['photo']['remote_photo_name']) {
$remote_photo_path = notags(unxmlify($source_xml->post->status_message->photo->remote_photo_path)); $remote_photo_path = notags(unxmlify($source_xml['post']['status_message']['photo']['remote_photo_path']));
$remote_photo_name = notags(unxmlify($source_xml->post->status_message->photo->remote_photo_name)); $remote_photo_name = notags(unxmlify($source_xml['post']['status_message']['photo']['remote_photo_name']));
$body = '[img]'.$remote_photo_path.$remote_photo_name.'[/img]'."\n".$body; $body = '[img]'.$remote_photo_path.$remote_photo_name.'[/img]'."\n".$body;
@ -1278,8 +1282,8 @@ function diaspora_reshare($importer,$xml,$msg) {
} }
$created = unxmlify($xml->created_at); $created = unxmlify($xml['created_at']);
$private = ((unxmlify($xml->public) == 'false') ? 1 : 0); $private = ((unxmlify($xml['public']) == 'false') ? 1 : 0);
$datarray = array(); $datarray = array();
@ -1339,8 +1343,8 @@ function diaspora_reshare($importer,$xml,$msg) {
. "' profile='" . $orig_author_link . "' profile='" . $orig_author_link
. "' avatar='" . $orig_author_photo . "' avatar='" . $orig_author_photo
. "' link='" . $orig_url . "' link='" . $orig_url
. "' posted='" . datetime_convert('UTC','UTC',unxmlify($source_xml->post->status_message->created_at)) . "' posted='" . datetime_convert('UTC','UTC',unxmlify($source_xml['post']['status_message']['created_at']))
. "' message_id='" . unxmlify($source_xml->post->status_message->guid) . "' message_id='" . unxmlify($source_xml['post']['status_message']['guid'])
. "']" . $body . "[/share]"; . "']" . $body . "[/share]";
@ -1381,8 +1385,8 @@ function diaspora_asphoto($importer,$xml,$msg) {
logger('diaspora_asphoto called'); logger('diaspora_asphoto called');
$a = get_app(); $a = get_app();
$guid = notags(unxmlify($xml->guid)); $guid = notags(unxmlify($xml['guid']));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
if($diaspora_handle != $msg['author']) { if($diaspora_handle != $msg['author']) {
logger('diaspora_post: Potential forgery. Message handle is not the same as envelope sender.'); logger('diaspora_post: Potential forgery. Message handle is not the same as envelope sender.');
@ -1421,15 +1425,15 @@ function diaspora_asphoto($importer,$xml,$msg) {
); );
} }
$created = unxmlify($xml->created_at); $created = unxmlify($xml['created_at']);
$private = ((unxmlify($xml->public) == 'false') ? 1 : 0); $private = ((unxmlify($xml['public']) == 'false') ? 1 : 0);
if(strlen($xml->objectId) && ($xml->objectId != 0) && ($xml->image_url)) { if(strlen($xml['objectId']) && ($xml['objectId'] != 0) && ($xml['image_url'])) {
$body = '[url=' . notags(unxmlify($xml->image_url)) . '][img]' . notags(unxmlify($xml->objectId)) . '[/img][/url]' . "\n"; $body = '[url=' . notags(unxmlify($xml['image_url'])) . '][img]' . notags(unxmlify($xml['objectId'])) . '[/img][/url]' . "\n";
$body = scale_external_images($body,false); $body = scale_external_images($body,false);
} }
elseif($xml->image_url) { elseif($xml['image_url']) {
$body = '[img]' . notags(unxmlify($xml->image_url)) . '[/img]' . "\n"; $body = '[img]' . notags(unxmlify($xml['image_url'])) . '[/img]' . "\n";
$body = scale_external_images($body); $body = scale_external_images($body);
} }
else { else {
@ -1466,7 +1470,7 @@ function diaspora_asphoto($importer,$xml,$msg) {
//if($message_id) { //if($message_id) {
// q("update item set plink = '%s' where id = %d", // q("update item set plink = '%s' where id = %d",
// dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id), // dbesc(z_root() . '/display/' . $importer['nickname'] . '/' . $message_id),
// intval($message_id) // intval($message_id)
// ); // );
//} //}
@ -1483,14 +1487,14 @@ function diaspora_asphoto($importer,$xml,$msg) {
function diaspora_comment($importer,$xml,$msg) { function diaspora_comment($importer,$xml,$msg) {
$a = get_app(); $a = get_app();
$guid = notags(unxmlify($xml->guid)); $guid = notags(unxmlify($xml['guid']));
$parent_guid = notags(unxmlify($xml->parent_guid)); $parent_guid = notags(unxmlify($xml['parent_guid']));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
$target_type = notags(unxmlify($xml->target_type)); $target_type = notags(unxmlify($xml['target_type']));
$text = unxmlify($xml->text); $text = unxmlify($xml['text']);
$author_signature = notags(unxmlify($xml->author_signature)); $author_signature = notags(unxmlify($xml['author_signature']));
$parent_author_signature = (($xml->parent_author_signature) ? notags(unxmlify($xml->parent_author_signature)) : ''); $parent_author_signature = (($xml['parent_author_signature']) ? notags(unxmlify($xml['parent_author_signature'])) : '');
$contact = diaspora_get_contact_by_handle($importer['channel_id'],$msg['author']); $contact = diaspora_get_contact_by_handle($importer['channel_id'],$msg['author']);
if(! $contact) { if(! $contact) {
@ -1748,15 +1752,15 @@ function diaspora_conversation($importer,$xml,$msg) {
$a = get_app(); $a = get_app();
$guid = notags(unxmlify($xml->guid)); $guid = notags(unxmlify($xml['guid']));
$subject = notags(unxmlify($xml->subject)); $subject = notags(unxmlify($xml['subject']));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
$participant_handles = notags(unxmlify($xml->participant_handles)); $participant_handles = notags(unxmlify($xml['participant_handles']));
$created_at = datetime_convert('UTC','UTC',notags(unxmlify($xml->created_at))); $created_at = datetime_convert('UTC','UTC',notags(unxmlify($xml['created_at'])));
$parent_uri = $guid; $parent_uri = $guid;
$messages = $xml->message; $messages = $xml['message'];
if(! count($messages)) { if(! count($messages)) {
logger('diaspora_conversation: empty conversation'); logger('diaspora_conversation: empty conversation');
@ -1815,14 +1819,14 @@ function diaspora_conversation($importer,$xml,$msg) {
$reply = 0; $reply = 0;
$msg_guid = notags(unxmlify($mesg->guid)); $msg_guid = notags(unxmlify($mesg['guid']));
$msg_parent_guid = notags(unxmlify($mesg->parent_guid)); $msg_parent_guid = notags(unxmlify($mesg['parent_guid']));
$msg_parent_author_signature = notags(unxmlify($mesg->parent_author_signature)); $msg_parent_author_signature = notags(unxmlify($mesg['parent_author_signature']));
$msg_author_signature = notags(unxmlify($mesg->author_signature)); $msg_author_signature = notags(unxmlify($mesg['author_signature']));
$msg_text = unxmlify($mesg->text); $msg_text = unxmlify($mesg['text']);
$msg_created_at = datetime_convert('UTC','UTC',notags(unxmlify($mesg->created_at))); $msg_created_at = datetime_convert('UTC','UTC',notags(unxmlify($mesg['created_at'])));
$msg_diaspora_handle = notags(unxmlify($mesg->diaspora_handle)); $msg_diaspora_handle = notags(unxmlify($mesg['diaspora_handle']));
$msg_conversation_guid = notags(unxmlify($mesg->conversation_guid)); $msg_conversation_guid = notags(unxmlify($mesg['conversation_guid']));
if($msg_conversation_guid != $guid) { if($msg_conversation_guid != $guid) {
logger('diaspora_conversation: message conversation guid does not belong to the current conversation. ' . $xml); logger('diaspora_conversation: message conversation guid does not belong to the current conversation. ' . $xml);
continue; continue;
@ -1839,7 +1843,7 @@ function diaspora_conversation($importer,$xml,$msg) {
} }
$author_signed_data = $msg_guid . ';' . $msg_parent_guid . ';' . $msg_text . ';' . unxmlify($mesg->created_at) . ';' . $msg_diaspora_handle . ';' . $msg_conversation_guid; $author_signed_data = $msg_guid . ';' . $msg_parent_guid . ';' . $msg_text . ';' . unxmlify($mesg['created_at']) . ';' . $msg_diaspora_handle . ';' . $msg_conversation_guid;
$author_signature = base64_decode($msg_author_signature); $author_signature = base64_decode($msg_author_signature);
@ -1864,7 +1868,7 @@ function diaspora_conversation($importer,$xml,$msg) {
} }
if($msg_parent_author_signature) { if($msg_parent_author_signature) {
$owner_signed_data = $msg_guid . ';' . $msg_parent_guid . ';' . $msg_text . ';' . unxmlify($mesg->created_at) . ';' . $msg_diaspora_handle . ';' . $msg_conversation_guid; $owner_signed_data = $msg_guid . ';' . $msg_parent_guid . ';' . $msg_text . ';' . unxmlify($mesg['created_at']) . ';' . $msg_diaspora_handle . ';' . $msg_conversation_guid;
$parent_author_signature = base64_decode($msg_parent_author_signature); $parent_author_signature = base64_decode($msg_parent_author_signature);
@ -1934,14 +1938,14 @@ function diaspora_message($importer,$xml,$msg) {
$a = get_app(); $a = get_app();
$msg_guid = notags(unxmlify($xml->guid)); $msg_guid = notags(unxmlify($xml['guid']));
$msg_parent_guid = notags(unxmlify($xml->parent_guid)); $msg_parent_guid = notags(unxmlify($xml['parent_guid']));
$msg_parent_author_signature = notags(unxmlify($xml->parent_author_signature)); $msg_parent_author_signature = notags(unxmlify($xml['parent_author_signature']));
$msg_author_signature = notags(unxmlify($xml->author_signature)); $msg_author_signature = notags(unxmlify($xml['author_signature']));
$msg_text = unxmlify($xml->text); $msg_text = unxmlify($xml['text']);
$msg_created_at = datetime_convert('UTC','UTC',notags(unxmlify($xml->created_at))); $msg_created_at = datetime_convert('UTC','UTC',notags(unxmlify($xml['created_at'])));
$msg_diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $msg_diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
$msg_conversation_guid = notags(unxmlify($xml->conversation_guid)); $msg_conversation_guid = notags(unxmlify($xml['conversation_guid']));
$parent_uri = $msg_parent_guid; $parent_uri = $msg_parent_guid;
@ -1995,7 +1999,7 @@ function diaspora_message($importer,$xml,$msg) {
} }
$author_signed_data = $msg_guid . ';' . $msg_parent_guid . ';' . $msg_text . ';' . unxmlify($xml->created_at) . ';' . $msg_diaspora_handle . ';' . $msg_conversation_guid; $author_signed_data = $msg_guid . ';' . $msg_parent_guid . ';' . $msg_text . ';' . unxmlify($xml['created_at']) . ';' . $msg_diaspora_handle . ';' . $msg_conversation_guid;
$author_signature = base64_decode($msg_author_signature); $author_signature = base64_decode($msg_author_signature);
@ -2074,19 +2078,19 @@ function diaspora_photo($importer,$xml,$msg) {
logger('diaspora_photo: init',LOGGER_DEBUG); logger('diaspora_photo: init',LOGGER_DEBUG);
$remote_photo_path = notags(unxmlify($xml->remote_photo_path)); $remote_photo_path = notags(unxmlify($xml['remote_photo_path']));
$remote_photo_name = notags(unxmlify($xml->remote_photo_name)); $remote_photo_name = notags(unxmlify($xml['remote_photo_name']));
$status_message_guid = notags(unxmlify($xml->status_message_guid)); $status_message_guid = notags(unxmlify($xml['status_message_guid']));
$guid = notags(unxmlify($xml->guid)); $guid = notags(unxmlify($xml['guid']));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
$public = notags(unxmlify($xml->public)); $public = notags(unxmlify($xml['public']));
$created_at = notags(unxmlify($xml_created_at)); $created_at = notags(unxmlify($xml['created_at']));
logger('diaspora_photo: status_message_guid: ' . $status_message_guid, LOGGER_DEBUG); logger('diaspora_photo: status_message_guid: ' . $status_message_guid, LOGGER_DEBUG);
@ -2134,14 +2138,14 @@ function diaspora_photo($importer,$xml,$msg) {
function diaspora_like($importer,$xml,$msg) { function diaspora_like($importer,$xml,$msg) {
$a = get_app(); $a = get_app();
$guid = notags(unxmlify($xml->guid)); $guid = notags(unxmlify($xml['guid']));
$parent_guid = notags(unxmlify($xml->parent_guid)); $parent_guid = notags(unxmlify($xml['parent_guid']));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
$target_type = notags(unxmlify($xml->target_type)); $target_type = notags(unxmlify($xml['target_type']));
$positive = notags(unxmlify($xml->positive)); $positive = notags(unxmlify($xml['positive']));
$author_signature = notags(unxmlify($xml->author_signature)); $author_signature = notags(unxmlify($xml['author_signature']));
$parent_author_signature = (($xml->parent_author_signature) ? notags(unxmlify($xml->parent_author_signature)) : ''); $parent_author_signature = (($xml['parent_author_signature']) ? notags(unxmlify($xml['parent_author_signature'])) : '');
// likes on comments not supported here and likes on photos not supported by Diaspora // likes on comments not supported here and likes on photos not supported by Diaspora
@ -2362,9 +2366,9 @@ function diaspora_like($importer,$xml,$msg) {
function diaspora_retraction($importer,$xml) { function diaspora_retraction($importer,$xml) {
$guid = notags(unxmlify($xml->guid)); $guid = notags(unxmlify($xml['guid']));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
$type = notags(unxmlify($xml->type)); $type = notags(unxmlify($xml['type']));
$contact = diaspora_get_contact_by_handle($importer['channel_id'],$diaspora_handle); $contact = diaspora_get_contact_by_handle($importer['channel_id'],$diaspora_handle);
if(! $contact) if(! $contact)
@ -2393,12 +2397,12 @@ function diaspora_retraction($importer,$xml) {
function diaspora_signed_retraction($importer,$xml,$msg) { function diaspora_signed_retraction($importer,$xml,$msg) {
$guid = notags(unxmlify($xml->target_guid)); $guid = notags(unxmlify($xml['target_guid']));
$diaspora_handle = notags(unxmlify($xml->sender_handle)); $diaspora_handle = notags(unxmlify($xml['sender_handle']));
$type = notags(unxmlify($xml->target_type)); $type = notags(unxmlify($xml['target_type']));
$sig = notags(unxmlify($xml->target_author_signature)); $sig = notags(unxmlify($xml['target_author_signature']));
$parent_author_signature = (($xml->parent_author_signature) ? notags(unxmlify($xml->parent_author_signature)) : ''); $parent_author_signature = (($xml['parent_author_signature']) ? notags(unxmlify($xml['parent_author_signature'])) : '');
$contact = diaspora_get_contact_by_handle($importer['channel_id'],$diaspora_handle); $contact = diaspora_get_contact_by_handle($importer['channel_id'],$diaspora_handle);
if(! $contact) { if(! $contact) {
@ -2484,7 +2488,7 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
function diaspora_profile($importer,$xml,$msg) { function diaspora_profile($importer,$xml,$msg) {
$a = get_app(); $a = get_app();
$diaspora_handle = notags(unxmlify($xml->diaspora_handle)); $diaspora_handle = notags(unxmlify($xml['diaspora_handle']));
if($diaspora_handle != $msg['author']) { if($diaspora_handle != $msg['author']) {
@ -2501,9 +2505,9 @@ function diaspora_profile($importer,$xml,$msg) {
return 202; return 202;
} }
$name = unxmlify($xml->first_name) . ((strlen($xml->last_name)) ? ' ' . unxmlify($xml->last_name) : ''); $name = unxmlify($xml['first_name']) . ((strlen($xml['last_name'])) ? ' ' . unxmlify($xml['last_name']) : '');
$image_url = unxmlify($xml->image_url); $image_url = unxmlify($xml['image_url']);
$birthday = unxmlify($xml->birthday); $birthday = unxmlify($xml['birthday']);
$handle_parts = explode("@", $diaspora_handle); $handle_parts = explode("@", $diaspora_handle);
@ -2560,7 +2564,7 @@ function diaspora_share($owner,$contact) {
$myaddr = $owner['channel_address'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $myaddr = $owner['channel_address'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3);
if(! array_key_exists('hubloc_hash',$contact)) { if(! array_key_exists('hubloc_hash',$contact)) {
$c = q("select * from xchan left join hubloc on xchan_hash = hubloc_hash where xchan_hash = '%s' limit 1", $c = q("select * from xchan left join hubloc on xchan_hash = hubloc_hash where xchan_hash = '%s' limit 1",
@ -2588,11 +2592,11 @@ function diaspora_share($owner,$contact) {
function diaspora_unshare($owner,$contact) { function diaspora_unshare($owner,$contact) {
$a = get_app(); $a = get_app();
$myaddr = $owner['channel_address'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $myaddr = $owner['channel_address'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3);
$tpl = get_markup_template('diaspora_retract.tpl','addon/diaspora'); $tpl = get_markup_template('diaspora_retract.tpl','addon/diaspora');
$msg = replace_macros($tpl, array( $msg = replace_macros($tpl, array(
'$guid' => $owner['channel_guid'] . str_replace('.','',get_app()->get_hostname()), '$guid' => $owner['channel_guid'] . str_replace('.','',App::get_hostname()),
'$type' => 'Person', '$type' => 'Person',
'$handle' => $myaddr '$handle' => $myaddr
)); ));
@ -2606,7 +2610,7 @@ function diaspora_unshare($owner,$contact) {
function diaspora_send_status($item,$owner,$contact,$public_batch = false) { function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
$a = get_app(); $a = get_app();
$myaddr = $owner['channel_address'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $myaddr = $owner['channel_address'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3);
if(intval($item['id']) != intval($item['parent'])) { if(intval($item['id']) != intval($item['parent'])) {
logger('attempted to send a comment as a top-level post'); logger('attempted to send a comment as a top-level post');
@ -2769,7 +2773,7 @@ function diaspora_send_images($item,$owner,$contact,$images,$public_batch = fals
$a = get_app(); $a = get_app();
if(! count($images)) if(! count($images))
return; return;
$mysite = substr($a->get_baseurl(),strpos($a->get_baseurl(),'://') + 3) . '/photo'; $mysite = substr(z_root(),strpos(z_root(),'://') + 3) . '/photo';
$qi = array(); $qi = array();
@ -2810,7 +2814,7 @@ function diaspora_send_images($item,$owner,$contact,$images,$public_batch = fals
function diaspora_send_followup($item,$owner,$contact,$public_batch = false) { function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
$a = get_app(); $a = get_app();
$myaddr = $owner['channel_address'] . '@' . get_app()->get_hostname(); $myaddr = $owner['channel_address'] . '@' . App::get_hostname();
$theiraddr = $contact['xchan_addr']; $theiraddr = $contact['xchan_addr'];
// Diaspora doesn't support threaded comments, but some // Diaspora doesn't support threaded comments, but some
@ -2902,7 +2906,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$a = get_app(); $a = get_app();
$myaddr = $owner['channel_address'] . '@' . get_app()->get_hostname(); $myaddr = $owner['channel_address'] . '@' . App::get_hostname();
$text = bb2diaspora_itembody($item); $text = bb2diaspora_itembody($item);
@ -2995,7 +2999,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
// bug - nomadic identity may/will affect diaspora_handle_from_contact // bug - nomadic identity may/will affect diaspora_handle_from_contact
if(! $handle) { if(! $handle) {
if($item['author_xchan'] === $owner['channel_hash']) if($item['author_xchan'] === $owner['channel_hash'])
$handle = $owner['channel_address'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $handle = $owner['channel_address'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3);
else else
$handle = diaspora_handle_from_contact($item['author_xchan']); $handle = diaspora_handle_from_contact($item['author_xchan']);
} }
@ -3053,7 +3057,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
function diaspora_send_retraction($item,$owner,$contact,$public_batch = false) { function diaspora_send_retraction($item,$owner,$contact,$public_batch = false) {
$a = get_app(); $a = get_app();
$myaddr = $owner['channel_address'] . '@' . get_app()->get_hostname(); $myaddr = $owner['channel_address'] . '@' . App::get_hostname();
// Check whether the retraction is for a top-level post or whether it's a relayable // Check whether the retraction is for a top-level post or whether it's a relayable
if( $item['mid'] !== $item['parent_mid'] ) { if( $item['mid'] !== $item['parent_mid'] ) {
@ -3084,7 +3088,7 @@ function diaspora_send_retraction($item,$owner,$contact,$public_batch = false) {
function diaspora_send_mail($item,$owner,$contact) { function diaspora_send_mail($item,$owner,$contact) {
$a = get_app(); $a = get_app();
$myaddr = $owner['channel_address'] . '@' . get_app()->get_hostname(); $myaddr = $owner['channel_address'] . '@' . App::get_hostname();
$r = q("select * from conv where guid = '%s' and uid = %d limit 1", $r = q("select * from conv where guid = '%s' and uid = %d limit 1",
dbesc($item['conv_guid']), dbesc($item['conv_guid']),
@ -3503,7 +3507,7 @@ function diaspora_profile_change($channel,$recip,$public_batch = false) {
return; return;
$profile = $r[0]; $profile = $r[0];
$handle = xmlify($channel['channel_address'] . '@' . get_app()->get_hostname()); $handle = xmlify($channel['channel_address'] . '@' . App::get_hostname());
$first = xmlify(((strpos($profile['channel_name'],' ')) $first = xmlify(((strpos($profile['channel_name'],' '))
? trim(substr($profile['channel_name'],0,strpos($profile['channel_name'],' '))) : $profile['channel_name'])); ? trim(substr($profile['channel_name'],0,strpos($profile['channel_name'],' '))) : $profile['channel_name']));
$last = xmlify((($first === $profile['channel_name']) ? '' : trim(substr($profile['channel_name'],strlen($first))))); $last = xmlify((($first === $profile['channel_name']) ? '' : trim(substr($profile['channel_name'],strlen($first)))));

View file

@ -1,20 +1,20 @@
<?php <?php
; ;
$a->strings["\$projectname"] = "\$projectname"; App::$strings["\$projectname"] = "\$projectname";
$a->strings["photo"] = "foto"; App::$strings["photo"] = "foto";
$a->strings["status"] = "status"; App::$strings["status"] = "status";
$a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s vindt %2\$s's %3\$s leuk"; App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s vindt %2\$s's %3\$s leuk";
$a->strings["Please choose"] = "Maak een keuze"; App::$strings["Please choose"] = "Maak een keuze";
$a->strings["Agree"] = "Eens"; App::$strings["Agree"] = "Eens";
$a->strings["Disagree"] = "Oneens"; App::$strings["Disagree"] = "Oneens";
$a->strings["Abstain"] = "Onthouding"; App::$strings["Abstain"] = "Onthouding";
$a->strings["I will attend"] = "Aanwezig"; App::$strings["I will attend"] = "Aanwezig";
$a->strings["I will not attend"] = "Niet aanwezig"; App::$strings["I will not attend"] = "Niet aanwezig";
$a->strings["I may attend"] = "Mogelijk aanwezig"; App::$strings["I may attend"] = "Mogelijk aanwezig";
$a->strings["Diaspora Protocol Settings updated."] = "Diaspora-protocol-instellingen bijgewerkt."; App::$strings["Diaspora Protocol Settings updated."] = "Diaspora-protocol-instellingen bijgewerkt.";
$a->strings["Enable the (experimental) Diaspora protocol for this channel"] = "Het (experimentele) Diaspora-protocol voor dit kanaal inschakelen"; App::$strings["Enable the (experimental) Diaspora protocol for this channel"] = "Het (experimentele) Diaspora-protocol voor dit kanaal inschakelen";
$a->strings["Allow any Diaspora member to comment on your public posts"] = "Geef elk Diaspora-lid toestemming om op jouw openbare berichten te reageren"; App::$strings["Allow any Diaspora member to comment on your public posts"] = "Geef elk Diaspora-lid toestemming om op jouw openbare berichten te reageren";
$a->strings["Prevent your hashtags from being redirected to other sites"] = "Voorkom dat jouw hashtags naar andere websites worden doorverwezen"; App::$strings["Prevent your hashtags from being redirected to other sites"] = "Voorkom dat jouw hashtags naar andere websites worden doorverwezen";
$a->strings["Diaspora Protocol Settings"] = "Diaspora-protocol (compatibiliteit, incl Friendica)"; App::$strings["Diaspora Protocol Settings"] = "Diaspora-protocol (compatibiliteit, incl Friendica)";
$a->strings["Submit"] = "Opslaan"; App::$strings["Submit"] = "Opslaan";

View file

@ -28,7 +28,7 @@ function p_init(&$a) {
if(! $c) if(! $c)
http_status_exit(404); http_status_exit(404);
$myaddr = $c[0]['channel_address'] . '@' . $a->get_hostname(); $myaddr = $c[0]['channel_address'] . '@' . App::get_hostname();
$item = $r[0]; $item = $r[0];

View file

@ -12,7 +12,7 @@ function receive_post(&$a) {
$public = false; $public = false;
logger('diaspora_receive: ' . print_r($a->argv, true), LOGGER_DEBUG); logger('diaspora_receive: ' . print_r(App::$argv, true), LOGGER_DEBUG);
if((argc() == 2) && (argv(1) === 'public')) { if((argc() == 2) && (argv(1) === 'public')) {
$public = true; $public = true;
@ -23,7 +23,7 @@ function receive_post(&$a) {
http_status_exit(500); http_status_exit(500);
$guid = argv(2); $guid = argv(2);
$hn = str_replace('.','',$a->get_hostname()); $hn = str_replace('.','',App::get_hostname());
if(($x = strpos($guid,$hn)) > 0) if(($x = strpos($guid,$hn)) > 0)
$guid = substr($guid,0,$x); $guid = substr($guid,0,$x);

View file

@ -40,7 +40,7 @@ function diaspost_jot_nets(&$a,&$b) {
} }
function diaspost_queue_hook(&$a,&$b) { function diaspost_queue_hook(&$a,&$b) {
$hostname = $a->get_hostname(); $hostname = App::get_hostname();
$qi = q("SELECT * FROM `queue` WHERE `network` = '%s'", $qi = q("SELECT * FROM `queue` WHERE `network` = '%s'",
dbesc(NETWORK_DIASPORA2) dbesc(NETWORK_DIASPORA2)
@ -115,7 +115,7 @@ function diaspost_settings(&$a,&$s) {
/* Add our stylesheet to the page so we can make our settings look nice */ /* Add our stylesheet to the page so we can make our settings look nice */
//$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/diaspost/diaspost.css' . '" media="all" />' . "\r\n"; //App::$page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . z_root() . '/addon/diaspost/diaspost.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variables */ /* Get the current state of our config variables */
@ -228,7 +228,7 @@ function diaspost_post_local(&$a,&$b) {
function diaspost_send(&$a,&$b) { function diaspost_send(&$a,&$b) {
$hostname = 'hubzilla ' . '(' . $a->get_hostname() . ')'; $hostname = 'hubzilla ' . '(' . App::get_hostname() . ')';
logger('diaspost_send: invoked',LOGGER_DEBUG); logger('diaspost_send: invoked',LOGGER_DEBUG);
@ -328,11 +328,11 @@ function diaspost_send(&$a,&$b) {
// $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `self`", $b['uid']); // $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `self`", $b['uid']);
// if (count($r)) // if (count($r))
// $a->contact = $r[0]["id"]; // App::$contact = $r[0]["id"];
// $s = serialize(array('url' => $url, 'item' => $b['id'], 'post' => $body)); // $s = serialize(array('url' => $url, 'item' => $b['id'], 'post' => $body));
// require_once('include/queue_fn.php'); // require_once('include/queue_fn.php');
// add_to_queue($a->contact,NETWORK_DIASPORA2,$s); // add_to_queue(App::$contact,NETWORK_DIASPORA2,$s);
// notice(t('Diaspost post failed. Queued for retry.').EOL); // notice(t('Diaspost post failed. Queued for retry.').EOL);
} }
} }

View file

@ -46,7 +46,7 @@ function dirstats_content(&$a) {
$chatrooms = get_config('dirstats','chatrooms'); $chatrooms = get_config('dirstats','chatrooms');
$tags = get_config('dirstats','tags'); $tags = get_config('dirstats','tags');
$ob = $a->get_observer(); $ob = App::get_observer();
$observer = $ob['xchan_hash']; $observer = $ob['xchan_hash'];
// Requested by Martin // Requested by Martin
$fountainofyouth = get_xconfig($observer, 'dirstats', 'averageage'); $fountainofyouth = get_xconfig($observer, 'dirstats', 'averageage');

View file

@ -51,7 +51,7 @@ function dwpost_settings(&$a,&$s) {
/* Add our stylesheet to the page so we can make our settings look nice */ /* Add our stylesheet to the page so we can make our settings look nice */
//$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/dwpost/dwpost.css' . '" media="all" />' . "\r\n"; //App::$page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . z_root() . '/addon/dwpost/dwpost.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variables */ /* Get the current state of our config variables */

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "Missatge a Dreamwidth"; App::$strings["Post to Dreamwidth"] = "Missatge a Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = "Configuració d'enviaments a Dreamwidth"; App::$strings["Dreamwidth Post Settings"] = "Configuració d'enviaments a Dreamwidth";
$a->strings["Enable dreamwidth Post Plugin"] = "Habilitat el plugin d'enviaments a Dreamwidth"; App::$strings["Enable dreamwidth Post Plugin"] = "Habilitat el plugin d'enviaments a Dreamwidth";
$a->strings["dreamwidth username"] = "Nom d'usuari a Dreamwidth"; App::$strings["dreamwidth username"] = "Nom d'usuari a Dreamwidth";
$a->strings["dreamwidth password"] = "Contrasenya a Dreamwidth"; App::$strings["dreamwidth password"] = "Contrasenya a Dreamwidth";
$a->strings["Post to dreamwidth by default"] = "Enviar per defecte a Dreamwidth"; App::$strings["Post to dreamwidth by default"] = "Enviar per defecte a Dreamwidth";
$a->strings["Submit"] = "Enviar"; App::$strings["Submit"] = "Enviar";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "Poslat na Dreamwidth"; App::$strings["Post to Dreamwidth"] = "Poslat na Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = "Nastavení Dreamwidth příspěvků"; App::$strings["Dreamwidth Post Settings"] = "Nastavení Dreamwidth příspěvků";
$a->strings["Enable dreamwidth Post Plugin"] = "Povolit dreamwidth Plugin"; App::$strings["Enable dreamwidth Post Plugin"] = "Povolit dreamwidth Plugin";
$a->strings["dreamwidth username"] = "dreamwidth uživatelské jméno"; App::$strings["dreamwidth username"] = "dreamwidth uživatelské jméno";
$a->strings["dreamwidth password"] = "dreamwidth heslo"; App::$strings["dreamwidth password"] = "dreamwidth heslo";
$a->strings["Post to dreamwidth by default"] = "Defaultně umístit na dreamwidth"; App::$strings["Post to dreamwidth by default"] = "Defaultně umístit na dreamwidth";
$a->strings["Submit"] = "Odeslat"; App::$strings["Submit"] = "Odeslat";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "In Dreamwidth veröffentlichen"; App::$strings["Post to Dreamwidth"] = "In Dreamwidth veröffentlichen";
$a->strings["Dreamwidth Post Settings"] = "Dreamwidth Veröffentlichungs-Einstellungen"; App::$strings["Dreamwidth Post Settings"] = "Dreamwidth Veröffentlichungs-Einstellungen";
$a->strings["Enable dreamwidth Post Plugin"] = "Dreamwidth Post Plugin aktivieren"; App::$strings["Enable dreamwidth Post Plugin"] = "Dreamwidth Post Plugin aktivieren";
$a->strings["dreamwidth username"] = "Dreamwidth Benutzername"; App::$strings["dreamwidth username"] = "Dreamwidth Benutzername";
$a->strings["dreamwidth password"] = "Dreamwidth Passwort"; App::$strings["dreamwidth password"] = "Dreamwidth Passwort";
$a->strings["Post to dreamwidth by default"] = "Standardmäßig bei Dreamwidth veröffentlichen"; App::$strings["Post to dreamwidth by default"] = "Standardmäßig bei Dreamwidth veröffentlichen";
$a->strings["Submit"] = "Senden"; App::$strings["Submit"] = "Senden";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "Afiŝi al Dreamwidth"; App::$strings["Post to Dreamwidth"] = "Afiŝi al Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = "Agordoj por Afiŝoj al Dreamwidth"; App::$strings["Dreamwidth Post Settings"] = "Agordoj por Afiŝoj al Dreamwidth";
$a->strings["Enable dreamwidth Post Plugin"] = "Ŝalti la Dreamwidth Kromprogramon"; App::$strings["Enable dreamwidth Post Plugin"] = "Ŝalti la Dreamwidth Kromprogramon";
$a->strings["dreamwidth username"] = "Dreamwidth salutnomo"; App::$strings["dreamwidth username"] = "Dreamwidth salutnomo";
$a->strings["dreamwidth password"] = "Dreamwidth pasvorto"; App::$strings["dreamwidth password"] = "Dreamwidth pasvorto";
$a->strings["Post to dreamwidth by default"] = "Defaŭlte afiŝi al Dreamwidth"; App::$strings["Post to dreamwidth by default"] = "Defaŭlte afiŝi al Dreamwidth";
$a->strings["Submit"] = "Sendi"; App::$strings["Submit"] = "Sendi";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "Publicar en Dreamwidth"; App::$strings["Post to Dreamwidth"] = "Publicar en Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = "Configuración de las publicaciones en Dreamwidth"; App::$strings["Dreamwidth Post Settings"] = "Configuración de las publicaciones en Dreamwidth";
$a->strings["Enable dreamwidth Post Plugin"] = "Activar el módulo de publicación en Dreamwidth"; App::$strings["Enable dreamwidth Post Plugin"] = "Activar el módulo de publicación en Dreamwidth";
$a->strings["dreamwidth username"] = "Nombre de usuario de Dreamwidth"; App::$strings["dreamwidth username"] = "Nombre de usuario de Dreamwidth";
$a->strings["dreamwidth password"] = "Contraseña de Dreamwidth"; App::$strings["dreamwidth password"] = "Contraseña de Dreamwidth";
$a->strings["Post to dreamwidth by default"] = "Publicar en Dreamwidth por defecto"; App::$strings["Post to dreamwidth by default"] = "Publicar en Dreamwidth por defecto";
$a->strings["Submit"] = "Envíar"; App::$strings["Submit"] = "Envíar";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "Poster vers Dreamwidth"; App::$strings["Post to Dreamwidth"] = "Poster vers Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = "Réglages Dreamwidth"; App::$strings["Dreamwidth Post Settings"] = "Réglages Dreamwidth";
$a->strings["Enable dreamwidth Post Plugin"] = "Activer \"Poster vers Dreamwidth\""; App::$strings["Enable dreamwidth Post Plugin"] = "Activer \"Poster vers Dreamwidth\"";
$a->strings["dreamwidth username"] = "Nom d'utilisateur Dreamwidth"; App::$strings["dreamwidth username"] = "Nom d'utilisateur Dreamwidth";
$a->strings["dreamwidth password"] = "Mot de passe"; App::$strings["dreamwidth password"] = "Mot de passe";
$a->strings["Post to dreamwidth by default"] = "Poster vers Dreamwidth par défaut"; App::$strings["Post to dreamwidth by default"] = "Poster vers Dreamwidth par défaut";
$a->strings["Submit"] = "Envoyer"; App::$strings["Submit"] = "Envoyer";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = ""; App::$strings["Post to Dreamwidth"] = "";
$a->strings["Dreamwidth Post Settings"] = ""; App::$strings["Dreamwidth Post Settings"] = "";
$a->strings["Enable dreamwidth Post Plugin"] = ""; App::$strings["Enable dreamwidth Post Plugin"] = "";
$a->strings["dreamwidth username"] = ""; App::$strings["dreamwidth username"] = "";
$a->strings["dreamwidth password"] = ""; App::$strings["dreamwidth password"] = "";
$a->strings["Post to dreamwidth by default"] = ""; App::$strings["Post to dreamwidth by default"] = "";
$a->strings["Submit"] = "Senda inn"; App::$strings["Submit"] = "Senda inn";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "Posta su Dreamwidth"; App::$strings["Post to Dreamwidth"] = "Posta su Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = "Impostazioni post Dreamwidth"; App::$strings["Dreamwidth Post Settings"] = "Impostazioni post Dreamwidth";
$a->strings["Enable dreamwidth Post Plugin"] = "Abilita il plugin dreamwidth"; App::$strings["Enable dreamwidth Post Plugin"] = "Abilita il plugin dreamwidth";
$a->strings["dreamwidth username"] = "dreamwidth username"; App::$strings["dreamwidth username"] = "dreamwidth username";
$a->strings["dreamwidth password"] = "Password dreamwidth"; App::$strings["dreamwidth password"] = "Password dreamwidth";
$a->strings["Post to dreamwidth by default"] = "Invia a dreamwidth per impostazione predefinita"; App::$strings["Post to dreamwidth by default"] = "Invia a dreamwidth per impostazione predefinita";
$a->strings["Submit"] = "Invia"; App::$strings["Submit"] = "Invia";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = ""; App::$strings["Post to Dreamwidth"] = "";
$a->strings["Dreamwidth Post Settings"] = ""; App::$strings["Dreamwidth Post Settings"] = "";
$a->strings["Enable dreamwidth Post Plugin"] = ""; App::$strings["Enable dreamwidth Post Plugin"] = "";
$a->strings["dreamwidth username"] = ""; App::$strings["dreamwidth username"] = "";
$a->strings["dreamwidth password"] = ""; App::$strings["dreamwidth password"] = "";
$a->strings["Post to dreamwidth by default"] = ""; App::$strings["Post to dreamwidth by default"] = "";
$a->strings["Submit"] = "Lagre"; App::$strings["Submit"] = "Lagre";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "Opublikuj na Dreamwidth"; App::$strings["Post to Dreamwidth"] = "Opublikuj na Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = ""; App::$strings["Dreamwidth Post Settings"] = "";
$a->strings["Enable dreamwidth Post Plugin"] = ""; App::$strings["Enable dreamwidth Post Plugin"] = "";
$a->strings["dreamwidth username"] = ""; App::$strings["dreamwidth username"] = "";
$a->strings["dreamwidth password"] = ""; App::$strings["dreamwidth password"] = "";
$a->strings["Post to dreamwidth by default"] = ""; App::$strings["Post to dreamwidth by default"] = "";
$a->strings["Submit"] = "Potwierdź"; App::$strings["Submit"] = "Potwierdź";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "Publicar no Dreamwidth"; App::$strings["Post to Dreamwidth"] = "Publicar no Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = "Configurações de publicação no Dreamwidth"; App::$strings["Dreamwidth Post Settings"] = "Configurações de publicação no Dreamwidth";
$a->strings["Enable dreamwidth Post Plugin"] = "Habilitar o plugin de publicação no Dreamwidth"; App::$strings["Enable dreamwidth Post Plugin"] = "Habilitar o plugin de publicação no Dreamwidth";
$a->strings["dreamwidth username"] = "Nome de usuário do Dreamwidth"; App::$strings["dreamwidth username"] = "Nome de usuário do Dreamwidth";
$a->strings["dreamwidth password"] = "Senha do Dreamwidth"; App::$strings["dreamwidth password"] = "Senha do Dreamwidth";
$a->strings["Post to dreamwidth by default"] = "Publicar no Dreamwidth por padrão"; App::$strings["Post to dreamwidth by default"] = "Publicar no Dreamwidth por padrão";
$a->strings["Submit"] = "Enviar"; App::$strings["Submit"] = "Enviar";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = ""; App::$strings["Post to Dreamwidth"] = "";
$a->strings["Dreamwidth Post Settings"] = "Dreamwidth настройки сообщений"; App::$strings["Dreamwidth Post Settings"] = "Dreamwidth настройки сообщений";
$a->strings["Enable dreamwidth Post Plugin"] = "Включить dreamwidth плагин сообщений"; App::$strings["Enable dreamwidth Post Plugin"] = "Включить dreamwidth плагин сообщений";
$a->strings["dreamwidth username"] = "dreamwidth имя пользователя"; App::$strings["dreamwidth username"] = "dreamwidth имя пользователя";
$a->strings["dreamwidth password"] = "dreamwidth пароль"; App::$strings["dreamwidth password"] = "dreamwidth пароль";
$a->strings["Post to dreamwidth by default"] = ""; App::$strings["Post to dreamwidth by default"] = "";
$a->strings["Submit"] = "Подтвердить"; App::$strings["Submit"] = "Подтвердить";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Submit"] = "Spara"; App::$strings["Submit"] = "Spara";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Dreamwidth"] = "转播到Dreamwidth"; App::$strings["Post to Dreamwidth"] = "转播到Dreamwidth";
$a->strings["Dreamwidth Post Settings"] = "Dreamwidth转播设置"; App::$strings["Dreamwidth Post Settings"] = "Dreamwidth转播设置";
$a->strings["Enable dreamwidth Post Plugin"] = "使Dreamwidth转播插件可用"; App::$strings["Enable dreamwidth Post Plugin"] = "使Dreamwidth转播插件可用";
$a->strings["dreamwidth username"] = "Dreamwidth用户名"; App::$strings["dreamwidth username"] = "Dreamwidth用户名";
$a->strings["dreamwidth password"] = "Dreamwidth密码"; App::$strings["dreamwidth password"] = "Dreamwidth密码";
$a->strings["Post to dreamwidth by default"] = "默认地转播到Dreamwidth"; App::$strings["Post to dreamwidth by default"] = "默认地转播到Dreamwidth";
$a->strings["Submit"] = "提交"; App::$strings["Submit"] = "提交";

View file

@ -25,11 +25,11 @@ function flattrwidget_unload() {
function flattrwidget_construct_page(&$a,&$b) { function flattrwidget_construct_page(&$a,&$b) {
if (! $b['module']=='channel') if (! $b['module']=='channel')
return; return;
$id = $a->profile['profile_uid']; $id = App::$profile['profile_uid'];
$enable = intval(get_pconfig($id,'flattrwidget','enable')); $enable = intval(get_pconfig($id,'flattrwidget','enable'));
if (! $enable) if (! $enable)
return; return;
$a->page['htmlhead'] .= '<link rel="stylesheet" href="'.$a->get_baseurl().'/addon/flattrwidget/style.css'.'" media="all" />'; App::$page['htmlhead'] .= '<link rel="stylesheet" href="'.z_root().'/addon/flattrwidget/style.css'.'" media="all" />';
// get alignment and static/dynamic from the settings // get alignment and static/dynamic from the settings
// align is either "aside" or "right_aside" // align is either "aside" or "right_aside"
// sd is either static or dynamic // sd is either static or dynamic
@ -47,7 +47,7 @@ function flattrwidget_construct_page(&$a,&$b) {
$link = 'https://flattr.com/submit/auto?user_id='.$user.'&url=' . rawurlencode($thing).'&title='.rawurlencode($ftitle); $link = 'https://flattr.com/submit/auto?user_id='.$user.'&url=' . rawurlencode($thing).'&title='.rawurlencode($ftitle);
if ($sd == 'static') { if ($sd == 'static') {
// static button graphic from the img folder // static button graphic from the img folder
$img = $a->get_baseurl() .'/addon/flattrwidget/img/flattr-badge-large.png'; $img = z_root() .'/addon/flattrwidget/img/flattr-badge-large.png';
$code = '<a href="'.$link.'" target="_blank"><img src="'.$img.'" alt="'.$title.'" title="'.$title.'" border="0"></a>'; $code = '<a href="'.$link.'" target="_blank"><img src="'.$img.'" alt="'.$title.'" title="'.$title.'" border="0"></a>';
} else { } else {
$code = '<script id=\'fbdu5zs\'>(function(i){var f,s=document.getElementById(i);f=document.createElement(\'iframe\');f.src=\'//api.flattr.com/button/view/?uid='.$user.'&url='.rawurlencode($thing).'&title='.rawurlencode($ftitle).'\';f.title=\''.$title.'\';f.height=72;f.width=65;f.style.borderWidth=0;s.parentNode.insertBefore(f,s);})(\'fbdu5zs\');</script>'; $code = '<script id=\'fbdu5zs\'>(function(i){var f,s=document.getElementById(i);f=document.createElement(\'iframe\');f.src=\'//api.flattr.com/button/view/?uid='.$user.'&url='.rawurlencode($thing).'&title='.rawurlencode($ftitle).'\';f.title=\''.$title.'\';f.height=72;f.width=65;f.style.borderWidth=0;s.parentNode.insertBefore(f,s);})(\'fbdu5zs\');</script>';
@ -65,12 +65,12 @@ function flattrwidget_construct_page(&$a,&$b) {
function flattrwidget_settings_post($a,$s) { function flattrwidget_settings_post($a,$s) {
if(! local_channel() || (! x($_POST,'flattrwidget-submit'))) if(! local_channel() || (! x($_POST,'flattrwidget-submit')))
return; return;
$c = $a->get_channel(); $c = App::get_channel();
set_pconfig( local_channel(), 'flattrwidget', 'align', $_POST['flattrwidget-align'] ); set_pconfig( local_channel(), 'flattrwidget', 'align', $_POST['flattrwidget-align'] );
set_pconfig( local_channel(), 'flattrwidget', 'sd', $_POST['flattrwidget-static'] ); set_pconfig( local_channel(), 'flattrwidget', 'sd', $_POST['flattrwidget-static'] );
$thing = $_POST['flattrwidget-thing']; $thing = $_POST['flattrwidget-thing'];
if ($thing == '') { if ($thing == '') {
$thing = $a->get_baseurl().'/channel/'.$c['channel_address']; $thing = z_root().'/channel/'.$c['channel_address'];
} }
set_pconfig( local_channel(), 'flattrwidget', 'thing', $thing); set_pconfig( local_channel(), 'flattrwidget', 'thing', $thing);
set_pconfig( local_channel(), 'flattrwidget', 'user', $_POST['flattrwidget-user']); set_pconfig( local_channel(), 'flattrwidget', 'user', $_POST['flattrwidget-user']);
@ -87,7 +87,7 @@ function flattrwidget_settings(&$a,&$s) {
if (! $id) if (! $id)
return; return;
//$a->page['htmlhead'] .= '<link rel="stylesheet" href="'.$a->get_baseurl().'/addon/flattrwidget/style.css'.'" media="all" />'; //App::$page['htmlhead'] .= '<link rel="stylesheet" href="'.z_root().'/addon/flattrwidget/style.css'.'" media="all" />';
$lr = get_pconfig( $id, 'flattrwidget', 'align'); $lr = get_pconfig( $id, 'flattrwidget', 'align');
$sd = get_pconfig( $id, 'flattrwidget', 'sd'); $sd = get_pconfig( $id, 'flattrwidget', 'sd');
$thing = get_pconfig( $id, 'flattrwidget', 'thing'); $thing = get_pconfig( $id, 'flattrwidget', 'thing');

View file

@ -26,8 +26,8 @@ function fortunate_fetch(&$a,&$b) {
if(! $fort_server) if(! $fort_server)
return; return;
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' App::$page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'
. $a->get_baseurl() . '/addon/fortunate/fortunate.css' . '" media="all" />' . "\r\n"; . z_root() . '/addon/fortunate/fortunate.css' . '" media="all" />' . "\r\n";
$s = z_fetch_url('http://' . $fort_server . '/cookie.php?numlines=4&equal=1&rand=' . mt_rand()); $s = z_fetch_url('http://' . $fort_server . '/cookie.php?numlines=4&equal=1&rand=' . mt_rand());
if($s['success']) if($s['success'])

View file

@ -22,7 +22,7 @@ function frphotos_init(&$a) {
if(intval(get_pconfig(local_channel(),'frphotos','complete'))) if(intval(get_pconfig(local_channel(),'frphotos','complete')))
return; return;
$channel = $a->get_channel(); $channel = App::get_channel();
$fr_server = $_REQUEST['fr_server']; $fr_server = $_REQUEST['fr_server'];
$fr_username = $_REQUEST['fr_username']; $fr_username = $_REQUEST['fr_username'];

View file

@ -3,7 +3,7 @@
/** /**
* Name: GNU-Social Protocol * Name: GNU-Social Protocol
* Description: GNU-Social Protocol (Experimental, Not-finished, Unsupported) * Description: GNU-Social Protocol (Experimental, Unsupported)
* Version: 1.0 * Version: 1.0
* Author: Mike Macgirvin * Author: Mike Macgirvin
* Maintainer: none * Maintainer: none
@ -16,7 +16,6 @@ require_once('include/items.php');
require_once('include/bb2diaspora.php'); require_once('include/bb2diaspora.php');
require_once('include/contact_selectors.php'); require_once('include/contact_selectors.php');
require_once('include/queue_fn.php'); require_once('include/queue_fn.php');
require_once('include/salmon.php');
function gnusoc_load() { function gnusoc_load() {
@ -26,10 +25,15 @@ function gnusoc_load() {
register_hook('follow_allow', 'addon/gnusoc/gnusoc.php', 'gnusoc_follow_allow'); register_hook('follow_allow', 'addon/gnusoc/gnusoc.php', 'gnusoc_follow_allow');
register_hook('feature_settings_post', 'addon/gnusoc/gnusoc.php', 'gnusoc_feature_settings_post'); register_hook('feature_settings_post', 'addon/gnusoc/gnusoc.php', 'gnusoc_feature_settings_post');
register_hook('feature_settings', 'addon/gnusoc/gnusoc.php', 'gnusoc_feature_settings'); register_hook('feature_settings', 'addon/gnusoc/gnusoc.php', 'gnusoc_feature_settings');
register_hook('follow', 'addon/gnusoc/gnusoc.php', 'gnusoc_follow_local');
register_hook('permissions_create', 'addon/gnusoc/gnusoc.php', 'gnusoc_permissions_create');
register_hook('queue_deliver', 'addon/gnusoc/gnusoc.php', 'gnusoc_queue_deliver');
register_hook('notifier_process','addon/gnusoc/gnusoc.php','gnusoc_notifier_process');
register_hook('follow_from_feed','addon/gnusoc/gnusoc.php','gnusoc_follow_from_feed');
// register_hook('notifier_hub', 'addon/gnusoc/gnusoc.php', 'gnusoc_process_outbound'); // register_hook('notifier_hub', 'addon/gnusoc/gnusoc.php', 'gnusoc_process_outbound');
// register_hook('permissions_create', 'addon/gnusoc/gnusoc.php', 'gnusoc_permissions_create');
// register_hook('permissions_update', 'addon/gnusoc/gnusoc.php', 'gnusoc_permissions_update'); // register_hook('permissions_update', 'addon/gnusoc/gnusoc.php', 'gnusoc_permissions_update');
} }
@ -41,6 +45,11 @@ function gnusoc_unload() {
unregister_hook('follow_allow', 'addon/gnusoc/gnusoc.php', 'gnusoc_follow_allow'); unregister_hook('follow_allow', 'addon/gnusoc/gnusoc.php', 'gnusoc_follow_allow');
unregister_hook('feature_settings_post', 'addon/gnusoc/gnusoc.php', 'gnusoc_feature_settings_post'); unregister_hook('feature_settings_post', 'addon/gnusoc/gnusoc.php', 'gnusoc_feature_settings_post');
unregister_hook('feature_settings', 'addon/gnusoc/gnusoc.php', 'gnusoc_feature_settings'); unregister_hook('feature_settings', 'addon/gnusoc/gnusoc.php', 'gnusoc_feature_settings');
unregister_hook('follow', 'addon/gnusoc/gnusoc.php', 'gnusoc_follow_local');
unregister_hook('permissions_create', 'addon/gnusoc/gnusoc.php', 'gnusoc_permissions_create');
unregister_hook('queue_deliver', 'addon/gnusoc/gnusoc.php', 'gnusoc_queue_deliver');
unregister_hook('notifier_process','addon/gnusoc/gnusoc.php','gnusoc_notifier_process');
unregister_hook('follow_from_feed','addon/gnusoc/gnusoc.php','gnusoc_follow_from_feed');
} }
@ -58,11 +67,13 @@ function gnusoc_load_module(&$a, &$b) {
function gnusoc_webfinger(&$a,&$b) { function gnusoc_webfinger(&$a,&$b) {
$b['result']['links'][] = array('rel' => 'salmon', 'href' => z_root() . '/salmon/' . $b['channel']['channel_address']); $b['result']['links'][] = array('rel' => 'salmon', 'href' => z_root() . '/salmon/' . $b['channel']['channel_address']);
$b['result']['links'][] = array('rel' => 'http://salmon-protocol.org/ns/salmon-replies', 'href' => z_root() . '/salmon/' . $b['channel']['channel_address']);
$b['result']['links'][] = array('rel' => 'http://salmon-protocol.org/ns/salmon-mention', 'href' => z_root() . '/salmon/' . $b['channel']['channel_address']);
} }
function gnusoc_personal_xrd(&$a,&$b) { function gnusoc_personal_xrd(&$a,&$b) {
$b['xml'] = str_replace('</XRD>', $b['xml'] = str_replace('</XRD>',
'<Link rel="salmon" href="' . z_root() . '/salmon/' . $b['user']['channel_address'] . '" />' . "\r\n" . '</XRD>', $b['xml']); '<Link rel="salmon" href="' . z_root() . '/salmon/' . $b['user']['channel_address'] . '" />' . "\r\n" . '<Link rel="http://salmon-protocol.org/ns/salmon-replies" href="' . z_root() . '/salmon/' . $b['user']['channel_address'] . '" />' . "\r\n" . '<Link rel="http://salmon-protocol.org/ns/salmon-mention" href="' . z_root() . '/salmon/' . $b['user']['channel_address'] . '" />' . "\r\n" . '</XRD>', $b['xml']);
} }
@ -80,6 +91,19 @@ function gnusoc_follow_allow(&$a, &$b) {
} }
function gnusoc_follow_local(&$a,&$b) {
require_once('addon/pubsubhubbub/pubsubhubbub.php');
if($b['abook']['abook_xchan'] && $b['abook']['xchan_network'] === 'gnusoc') {
$hubs = get_xconfig($b['abook']['abook_xchan'],'system','push_hubs');
if($hubs) {
foreach($hubs as $hub) {
pubsubhubbub_subscribe($hub,$b['channel'],$b['abook'],'',$hubmode = 'subscribe');
}
}
}
}
function gnusoc_feature_settings_post(&$a,&$b) { function gnusoc_feature_settings_post(&$a,&$b) {
@ -109,3 +133,427 @@ function gnusoc_feature_settings(&$a,&$s) {
} }
function get_salmon_key($uri,$keyhash) {
$ret = array();
logger('Fetching salmon key for ' . $uri, LOGGER_DEBUG, LOG_INFO);
$x = webfinger_rfc7033($uri,true);
logger('webfinger returns: ' . print_r($x,true), LOGGER_DATA, LOG_DEBUG);
if($x && array_key_exists('links',$x) && $x['links']) {
foreach($x['links'] as $link) {
if(array_key_exists('rel',$link) && $link['rel'] === 'magic-public-key') {
$ret[] = $link['href'];
}
}
}
else {
$arr = old_webfinger($uri);
logger('old webfinger returns: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG);
if(is_array($arr)) {
foreach($arr as $a) {
if($a['@attributes']['rel'] === 'magic-public-key') {
$ret[] = $a['@attributes']['href'];
}
}
}
else {
return '';
}
}
// We have found at least one key URL
// If it's inline, parse it - otherwise get the key
if(count($ret)) {
for($x = 0; $x < count($ret); $x ++) {
if(substr($ret[$x],0,5) === 'data:') {
$ret[$x] = convert_salmon_key($ret[$x]);
}
}
}
logger('Key located: ' . print_r($ret,true), LOGGER_DEBUG, LOG_INFO);
if(count($ret) == 1) {
// We only found one one key so we don't care if the hash matches.
// If it's the wrong key we'll find out soon enough because
// message verification will fail. This also covers some older
// software which don't supply a keyhash. As long as they only
// have one key we'll be right.
return $ret[0];
}
else {
foreach($ret as $a) {
$hash = base64url_encode(hash('sha256',$a));
if($hash == $keyhash)
return $a;
}
}
return '';
}
function slapper($owner,$url,$slap) {
// does contact have a salmon endpoint?
if(! strlen($url))
return;
if(! $owner['channel_prvkey']) {
logger(sprintf("channel '%s' (%d) does not have a salmon private key. Send failed.",
$owner['channel_address'],$owner['channel_id']));
return;
}
logger('slapper called for ' .$url . '. Data: ' . $slap, LOGGER_DATA, LOG_DEBUG);
// create a magic envelope
$data = base64url_encode($slap, false); // do not strip padding
$data_type = 'application/atom+xml';
$encoding = 'base64url';
$algorithm = 'RSA-SHA256';
$keyhash = base64url_encode(hash('sha256',salmon_key($owner['channel_pubkey'])),true);
$data = str_replace(array(" ","\t","\r","\n"),array("","","",""),$data);
// precomputed base64url encoding of data_type, encoding, algorithm concatenated with periods
$precomputed = '.YXBwbGljYXRpb24vYXRvbSt4bWw=.YmFzZTY0dXJs.UlNBLVNIQTI1Ng==';
$signature = base64url_encode(rsa_sign($data . $precomputed,$owner['channel_prvkey']));
$salmon_tpl = get_markup_template('magicsig.tpl','addon/gnusoc/');
$salmon = replace_macros($salmon_tpl,array(
'$data' => $data,
'$encoding' => $encoding,
'$algorithm' => $algorithm,
'$keyhash' => $keyhash,
'$signature' => $signature
));
logger('salmon: ' . $salmon, LOGGER_DATA);
$hash = random_string();
queue_insert(array(
'hash' => $hash,
'account_id' => $owner['channel_account_id'],
'channel_id' => $owner['channel_id'],
'driver' => 'slap',
'posturl' => $url,
'notify' => '',
'msg' => $salmon,
));
return $hash;
}
function gnusoc_queue_deliver(&$a,&$b) {
$outq = $b['outq'];
if($outq['outq_driver'] !== 'slap')
return;
$b['handled'] = true;
$headers = array(
'Content-type: application/magic-envelope+xml',
'Content-length: ' . strlen($outq['outq_msg']));
$counter = 0;
$result = z_post_url($outq['outq_posturl'], $outq['outq_msg'], $counter, array('headers' => $headers, 'novalidate' => true));
if($result['success'] && $result['return_code'] < 300) {
logger('slap_deliver: queue post success to ' . $outq['outq_posturl'], LOGGER_DEBUG);
if($b['base']) {
q("update site set site_update = '%s', site_dead = 0 where site_url = '%s' ",
dbesc(datetime_convert()),
dbesc($b['base'])
);
}
q("update dreport set dreport_result = '%s', dreport_time = '%s' where dreport_queue = '%s' limit 1",
dbesc('accepted for delivery'),
dbesc(datetime_convert()),
dbesc($outq['outq_hash'])
);
remove_queue_item($outq['outq_hash']);
}
else {
logger('slap_deliver: queue post returned ' . $result['return_code']
. ' from ' . $outq['outq_posturl'],LOGGER_DEBUG);
update_queue_item($outq['outq_hash']);
}
return;
}
function gnusoc_remote_follow($channel,$xchan) {
$slap = replace_macros(get_markup_template('follow_slap.tpl','addon/gnusoc/'),array(
'$name' => xmlify($channel['channel_name']),
'$nick' => xmlify($channel['channel_address']),
'$profile_page' => xmlify(z_root() . '/channel/' . $channel['channel_address']),
'$thumb' => xmlify($channel['xchan_photo_l']),
'$item_id' => z_root() . '/display/' . xmlify(random_string()),
'$title' => xmlify(t('Follow')),
'$published' => datetime_convert('UTC','UTC','now',ATOM_TIME),
'$type' => 'html',
'$content' => xmlify(sprintf( t('%1$s is now following %2$s'),$channel['channel_name'],$xchan['xchan_name'])),
'$remote_profile' => xmlify($xchan['xchan_url']),
'$remote_photo' => xmlify($xchan['xchan_photo_l']),
'$remote_thumb' => xmlify($xchan['xchan_photo_m']),
'$remote_nick' => xmlify(substr($xchan['xchan_addr'],0,strpos($xchan['xchan_addr'],'@'))),
'$remote_name' => xmlify($xchan['xchan_name']),
'$verb' => xmlify(ACTIVITY_FOLLOW),
'$ostat_follow' => ''
));
logger('follow xml: ' . $slap, LOGGER_DATA);
$deliver = '';
$y = q("select * from hubloc where hubloc_hash = '%s'",
dbesc($xchan['xchan_hash'])
);
if($y) {
$deliver = slapper($channel,$y[0]['hubloc_callback'],$slap);
}
return $deliver;
}
function gnusoc_permissions_create(&$a,&$b) {
if($b['recipient']['xchan_network'] === 'gnusoc') {
$b['deliveries'] = gnusoc_remote_follow($b['sender'],$b['recipient']);
if($b['deliveries'])
$b['success'] = 1;
}
}
function gnusoc_notifier_process(&$a,&$b) {
logger('notifier process gnusoc');
if(! ($b['normal_mode'] || $b['relay_to_owner']))
return;
if($b['private'] || $b['packet_type'] || $b['mail'])
return;
if($b['target_item']['public_policy']) {
logger('non-public post');
return;
}
if($b['top_level_post']) {
// should have been processed by pubsubhubub
logger('not a comment');
return;
}
$channel = $b['channel'];
if(! perm_is_allowed($channel['channel_id'],'','view_stream'))
return;
// find gnusoc subscribers following this $owner
$r = q("select * from abook left join hubloc on abook_xchan = hubloc_hash where hubloc_network = 'gnusoc' and abook_channel = %d",
intval($channel['channel_id'])
);
if(! $r)
return;
$recips = array();
foreach($r as $rr) {
if(perm_is_allowed($channel['channel_id'],$rr['hubloc_hash'],'view_stream'))
$recips[] = $rr['hubloc_hash'];
}
if(! $recips)
return;
$slap = get_atom_entry($target_item,'html',null,null,false);
$slap = str_replace('<entry>','<entry xmlns="http://www.w3.org/2005/Atom"
xmlns:thr="http://purl.org/syndication/thread/1.0"
xmlns:at="http://purl.org/atompub/tombstones/1.0"
xmlns:media="http://purl.org/syndication/atommedia"
xmlns:dfrn="http://purl.org/macgirvin/dfrn/1.0"
xmlns:zot="http://purl.org/zot"
xmlns:as="http://activitystrea.ms/spec/1.0/"
xmlns:georss="http://www.georss.org/georss"
xmlns:poco="http://portablecontacts.net/spec/1.0"
xmlns:ostatus="http://ostatus.org/schema/1.0"
xmlns:statusnet="http://status.net/schema/api/1/" >',$slap);
foreach($recips as $recip) {
$h = slapper($channel,$recip['hubloc_callback'],$slap);
$b['queued'][] = $h;
}
}
function gnusoc_follow_from_feed(&$a,&$b) {
$item = $b['item'];
$importer = $b['channel'];
$xchan = $b['xchan'];
$author = $b['author'];
$b['caught'] = true;
logger('follow activity received');
if(($author) && (! $xchan)) {
$r = q("select * from xchan where xchan_guid = '%s' limit 1",
dbesc($author['author_link'])
);
if(! $r) {
if(discover_by_webbie($author['author_link'])) {
$r = q("select * from xchan where xchan_guid = '%s' limit 1",
dbesc($author['author_link'])
);
if(! $r) {
logger('discovery failed');
return;
}
}
$xchan = $r[0];
}
$r = q("select * from abook where abook_channel = %d and abook_xchan = '%s' limit 1",
intval($importer['channel_id']),
dbesc($xchan['xchan_hash'])
);
if($r) {
$contact = $r[0];
$newperms = PERMS_R_STREAM|PERMS_R_PROFILE|PERMS_R_PHOTOS|PERMS_R_ABOOK|PERMS_W_STREAM|PERMS_W_COMMENT|PERMS_W_MAIL|PERMS_W_CHAT|PERMS_R_STORAGE|PERMS_R_PAGES;
$abook_instance = $contact['abook_instance'];
if($abook_instance)
$abook_instance .= ',';
$abook_instance .= z_root();
$r = q("update abook set abook_their_perms = %d, abook_instance = '%s' where abook_id = %d and abook_channel = %d",
intval($newperms),
dbesc($abook_instance),
intval($contact['abook_id']),
intval($importer['channel_id'])
);
}
else {
$role = get_pconfig($importer['channel_id'],'system','permissions_role');
if($role) {
$x = get_role_perms($role);
if($x['perms_auto'])
$default_perms = $x['perms_accept'];
}
if(! $default_perms)
$default_perms = intval(get_pconfig($importer['channel_id'],'system','autoperms'));
$their_perms = PERMS_R_STREAM|PERMS_R_PROFILE|PERMS_R_PHOTOS|PERMS_R_ABOOK|PERMS_W_STREAM|PERMS_W_COMMENT|PERMS_W_MAIL|PERMS_W_CHAT|PERMS_R_STORAGE|PERMS_R_PAGES;
$closeness = get_pconfig($importer['channel_id'],'system','new_abook_closeness');
if($closeness === false)
$closeness = 80;
$r = q("insert into abook ( abook_account, abook_channel, abook_xchan, abook_my_perms, abook_their_perms, abook_closeness, abook_created, abook_updated, abook_connected, abook_dob, abook_pending, abook_instance ) values ( %d, %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', %d, '%s' )",
intval($importer['channel_account_id']),
intval($importer['channel_id']),
dbesc($xchan['xchan_hash']),
intval($default_perms),
intval($their_perms),
intval($closeness),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(NULL_DATE),
intval(($default_perms) ? 0 : 1),
dbesc(z_root())
);
if($r) {
logger("New GNU-Social follower received for {$importer['channel_name']}");
$new_connection = q("select * from abook left join xchan on abook_xchan = xchan_hash left join hubloc on hubloc_hash = xchan_hash where abook_channel = %d and abook_xchan = '%s' order by abook_created desc limit 1",
intval($importer['channel_id']),
dbesc($xchan['xchan_hash'])
);
if($new_connection) {
require_once('include/enotify.php');
notification(array(
'type' => NOTIFY_INTRO,
'from_xchan' => $xchan['xchan_hash'],
'to_xchan' => $importer['channel_hash'],
'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'],
));
if($default_perms) {
// Send back a sharing notification to them
$deliver = gnusoc_remote_follow($importer,$new_connection[0]);
if($deliver)
proc_run('php','include/deliver.php',$deliver);
}
$clone = array();
foreach($new_connection[0] as $k => $v) {
if(strpos($k,'abook_') === 0) {
$clone[$k] = $v;
}
}
unset($clone['abook_id']);
unset($clone['abook_account']);
unset($clone['abook_channel']);
$abconfig = load_abconfig($importer['channel_hash'],$clone['abook_xchan']);
if($abconfig)
$clone['abconfig'] = $abconfig;
build_sync_packet($importer['channel_id'], array('abook' => array($clone)));
}
}
}
return;
}
}

View file

@ -1,32 +1,41 @@
<?php <?php
require_once('include/salmon.php');
require_once('include/crypto.php'); require_once('include/crypto.php');
require_once('include/items.php'); require_once('include/items.php');
require_once('include/follow.php'); require_once('include/follow.php');
require_once('include/Contact.php'); require_once('include/Contact.php');
function salmon_return($val) { if(defined('SALMON_TEST')) {
function salmon_init(&$a) {
if($val >= 400) $testing = ((argc() > 1 && argv(1) === 'test') ? true : false);
$err = 'Error'; if($testing) {
if($val >= 200 && $val < 300) App::$data['salmon_test'] = true;
$err = 'OK'; salmon_post($a);
}
logger('mod-salmon returns ' . $val); }
header($_SERVER["SERVER_PROTOCOL"] . ' ' . $val . ' ' . $err);
killme();
} }
function salmon_post(&$a) { function salmon_post(&$a) {
$sys_disabled = true;
if(! get_config('system','disable_discover_tab')) {
$sys_disabled = get_config('system','disable_diaspora_discover_tab');
}
$sys = (($sys_disabled) ? null : get_sys_channel());
if(App::$data['salmon_test']) {
$xml = file_get_contents('test.xml');
App::$argv[1] = 'gnusoc';
}
else {
$xml = file_get_contents('php://input'); $xml = file_get_contents('php://input');
}
logger('mod-salmon: new salmon ' . $xml, LOGGER_DATA); logger('mod-salmon: new salmon ' . $xml, LOGGER_DATA);
$nick = ((argc() > 1) ? trim(argv(1)) : ''); $nick = ((argc() > 1) ? trim(argv(1)) : '');
// $mentions = (($a->argc > 2 && $a->argv[2] === 'mention') ? true : false); // $mentions = ((App::$argc > 2 && App::$argv[2] === 'mention') ? true : false);
$importer = channelx_by_nick($nick); $importer = channelx_by_nick($nick);
@ -59,9 +68,13 @@ function salmon_post(&$a) {
// Stash the signature away for now. We have to find their key or it won't be good for anything. // Stash the signature away for now. We have to find their key or it won't be good for anything.
logger('sig: ' . $base->sig);
$signature = base64url_decode($base->sig); $signature = base64url_decode($base->sig);
logger('sig: ' . $base->sig . ' decoded length: ' . strlen($signature));
// unpack the data // unpack the data
// strip whitespace so our data element will return to one big base64 blob // strip whitespace so our data element will return to one big base64 blob
@ -80,7 +93,7 @@ function salmon_post(&$a) {
$stnet_signed_data = $data; $stnet_signed_data = $data;
$signed_data = $data . '.' . base64url_encode($type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($alg); $signed_data = $data . '.' . base64url_encode($type, false) . '.' . base64url_encode($encoding, false) . '.' . base64url_encode($alg, false);
$compliant_format = str_replace('=','',$signed_data); $compliant_format = str_replace('=','',$signed_data);
@ -102,6 +115,7 @@ function salmon_post(&$a) {
$datarray = process_salmon_feed($data,$importer); $datarray = process_salmon_feed($data,$importer);
$author_link = $datarray['author']['author_link']; $author_link = $datarray['author']['author_link'];
$item = $datarray['item'];
if(! $author_link) { if(! $author_link) {
logger('mod-salmon: Could not retrieve author URI.'); logger('mod-salmon: Could not retrieve author URI.');
@ -121,30 +135,26 @@ function salmon_post(&$a) {
logger('mod-salmon: Fetching key for ' . $author_link); logger('mod-salmon: Fetching key for ' . $author_link);
$key = get_salmon_key($author_link,$keyhash); $pubkey = get_salmon_key($author_link,$keyhash);
if(! $key) { if(! $pubkey) {
logger('mod-salmon: Could not retrieve author key.'); logger('mod-salmon: Could not retrieve author key.');
http_status_exit(400); http_status_exit(400);
} }
$key_info = explode('.',$key); logger('mod-salmon: key details: ' . print_r($pubkey,true), LOGGER_DEBUG);
$m = base64url_decode($key_info[1]);
$e = base64url_decode($key_info[2]);
logger('mod-salmon: key details: ' . print_r($key_info,true), LOGGER_DEBUG);
$pubkey = metopem($m,$e);
} }
$pubkey = rtrim($pubkey);
// We should have everything we need now. Let's see if it verifies. // We should have everything we need now. Let's see if it verifies.
$verify = rsa_verify($compliant_format,$signature,$pubkey); $verify = rsa_verify($signed_data,$signature,$pubkey);
if(! $verify) { if(! $verify) {
logger('mod-salmon: message did not verify using protocol. Trying padding hack.'); logger('mod-salmon: message did not verify using protocol. Trying padding hack.');
$verify = rsa_verify($signed_data,$signature,$pubkey); $verify = rsa_verify($compliant_format,$signature,$pubkey);
} }
if(! $verify) { if(! $verify) {
@ -159,10 +169,9 @@ function salmon_post(&$a) {
logger('mod-salmon: Message verified.'); logger('mod-salmon: Message verified.');
/* lookup the author */ /* lookup the author */
if(! $datarray['author']['author_link']) if(! $datarray['author']['author_link']) {
logger('unable to probe - no author identifier'); logger('unable to probe - no author identifier');
http_status_exit(400); http_status_exit(400);
} }
@ -172,7 +181,7 @@ function salmon_post(&$a) {
); );
if(! $r) { if(! $r) {
if(discover_by_webbie($datarray['author']['author_link'])) { if(discover_by_webbie($datarray['author']['author_link'])) {
$r = q("select xchan_hash from xchan where xchan_guid = '%s' limit 1", $r = q("select * from xchan where xchan_guid = '%s' limit 1",
dbesc($datarray['author']['author_link']) dbesc($datarray['author']['author_link'])
); );
if(! $r) { if(! $r) {
@ -180,6 +189,7 @@ function salmon_post(&$a) {
http_status_exit(400); http_status_exit(400);
} }
} }
}
$xchan = $r[0]; $xchan = $r[0];
@ -192,161 +202,98 @@ function salmon_post(&$a) {
// First check for and process follow activity // First check for and process follow activity
if(activity_match($datarray['verb'],ACTIVITY_FOLLOW) && $datarray['obj_type'] === ACTIVITY_OBJ_PERSON) { if(activity_match($item['verb'],ACTIVITY_FOLLOW) && $item['obj_type'] === ACTIVITY_OBJ_PERSON) {
$r = q("select * from abook where abook_channel = %d and abook_hash = '%s' limit 1",
intval($importer['channel_id']),
dbesc($xchan['xchan_hash'])
);
if($r) {
$contact = $r[0];
$newperms = PERMS_R_STREAM|PERMS_R_PROFILE|PERMS_R_PHOTOS|PERMS_R_ABOOK|PERMS_W_STREAM|PERMS_W_COMMENT|PERMS_W_MAIL|PERMS_W_CHAT|PERMS_R_STORAGE|PERMS_R_PAGES;
$abook_instance = $contact['abook_instance'];
if($abook_instance)
$abook_instance .= ',';
$abook_instance .= z_root();
$r = q("update abook set abook_their_perms = %d, abook_instance = '%s' where abook_id = %d and abook_channel = %d",
intval($newperms),
dbesc($abook_instance),
intval($contact['abook_id']),
intval($importer['channel_id'])
);
}
else {
$role = get_pconfig($importer['channel_id'],'system','permissions_role');
if($role) {
$x = get_role_perms($role);
if($x['perms_auto'])
$default_perms = $x['perms_accept'];
}
if(! $default_perms)
$default_perms = intval(get_pconfig($importer['channel_id'],'system','autoperms'));
$their_perms = PERMS_R_STREAM|PERMS_R_PROFILE|PERMS_R_PHOTOS|PERMS_R_ABOOK|PERMS_W_STREAM|PERMS_W_COMMENT|PERMS_W_MAIL|PERMS_W_CHAT|PERMS_R_STORAGE|PERMS_R_PAGES;
$closeness = get_pconfig($importer['channel_id'],'system','new_abook_closeness');
if($closeness === false)
$closeness = 80;
$r = q("insert into abook ( abook_account, abook_channel, abook_xchan, abook_my_perms, abook_their_perms, abook_closeness, abook_created, abook_updated, abook_connected, abook_dob, abook_pending, abook_instance ) values ( %d, %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', %d, '%s' )",
intval($importer['channel_account_id']),
intval($importer['channel_id']),
dbesc($contact['xchan_hash']),
intval($default_perms),
intval($their_perms),
intval($closeness),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(NULL_DATE),
intval(($default_perms) ? 0 : 1),
dbesc(z_root())
);
if($r) {
logger("New GNU-Social follower received for {$importer['channel_name']}");
$new_connection = q("select * from abook left join xchan on abook_xchan = xchan_hash left join hubloc on hubloc_hash = xchan_hash where abook_channel = %d and abook_xchan = '%s' order by abook_created desc limit 1",
intval($importer['channel_id']),
dbesc($xchan['xchan_hash'])
);
if($new_connection) {
require_once('include/enotify.php');
notification(array(
'type' => NOTIFY_INTRO,
'from_xchan' => $xchan['xchan_hash'],
'to_xchan' => $importer['channel_hash'],
'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'],
));
if($default_perms) {
// @fixme!!!
// Send back a sharing notification to them
$x = gnusoc_follow($importer,$new_connection[0]);
if($x)
proc_run('php','include/deliver.php',$x);
}
$clone = array();
foreach($new_connection[0] as $k => $v) {
if(strpos($k,'abook_') === 0) {
$clone[$k] = $v;
}
}
unset($clone['abook_id']);
unset($clone['abook_account']);
unset($clone['abook_channel']);
$abconfig = load_abconfig($importer['channel_hash'],$clone['abook_xchan']);
if($abconfig)
$clone['abconfig'] = $abconfig;
build_sync_packet($importer['channel_id'], array('abook' => array($clone)));
}
$cb = array('item' => $item,'channel' => $importer, 'xchan' => $xchan, 'author' => $datarray['author'], 'caught' => false);
call_hooks('follow_from_feed',$cb);
if($cb['caught'])
http_status_exit(200); http_status_exit(200);
}
$m = parse_url($xchan['xchan_url']);
if($m) {
$host = $m['scheme'] . '://' . $m['host'];
q("update site set site_dead = 0, site_update = '%s' where site_type = %d and site_url = '%s'",
dbesc(datetime_convert()),
intval(SITE_TYPE_NOTZOT),
dbesc($url)
);
if(! check_siteallowed($host)) {
logger('blacklisted site: ' . $host);
http_status_exit(403, 'permission denied.');
} }
} }
$importer_arr = array($importer);
if(! $sys_disabled) {
$sys['system'] = true;
$importer_arr[] = $sys;
}
unset($datarray['author']);
// we will only set and return the status code for operations
// on an importer channel and not for the sys channel
$status = 200;
foreach($importer_arr as $importer) {
if(! $importer['system']) {
$allowed = get_pconfig($importer['channel_id'],'system','gnusoc_allowed');
if(! intval($allowed)) {
logger('mod-salmon: disallowed for channel ' . $importer['channel_name']);
$status = 202;
continue;
}
} }
//
// ... fixme
// Otherwise check general permissions // Otherwise check general permissions
if(! perm_is_allowed($importer['channel_id'],$xchan['xchan_hash'],'send_stream')) { if((! perm_is_allowed($importer['channel_id'],$xchan['xchan_hash'],'send_stream')) && (! $importer['system'])) {
// check for and process ostatus autofriend // check for and process ostatus autofriend
// ... fixme // ... fixme
// otherwise // otherwise
logger('mod-salmon: Ignoring this author.'); logger('mod-salmon: Ignoring this author.');
http_status_exit(202); $status = 202;
// NOTREACHED continue;
} }
unset($datarray['author']);
$parent_item = null; $parent_item = null;
if($datarray['parent_mid']) { if($item['parent_mid']) {
$r = q("select * from item where mid = '%s' and uid = %d limit 1", $r = q("select * from item where mid = '%s' and uid = %d limit 1",
dbesc($datarray['parent_mid']), dbesc($item['parent_mid']),
intval($importer['channel_id']) intval($importer['channel_id'])
); );
if(! $r) { if(! $r) {
logger('mod-salmon: parent item not found.'); logger('mod-salmon: parent item not found.');
http_status_exit(202); if(! $importer['system'])
$status = 202;
continue;
} }
$parent_item = $r[0]; $parent_item = $r[0];
} }
if(! $item['author_xchan'])
$item['author_xchan'] = $xchan['xchan_hash'];
$item['owner_xchan'] = (($parent_item) ? $parent_item['owner_xchan'] : $xchan['xchan_hash']);
if(! $datarray['author_xchan'])
$datarray['author_xchan'] = $xchan['xchan_hash'];
$datarray['owner_xchan'] = (($parent_item) ? $parent_item['owner_xchan'] : $xchan['xchan_hash']);
$r = q("SELECT edited FROM item WHERE mid = '%s' AND uid = %d LIMIT 1", $r = q("SELECT edited FROM item WHERE mid = '%s' AND uid = %d LIMIT 1",
dbesc($datarray['mid']), dbesc($item['mid']),
intval($importer['channel_id']) intval($importer['channel_id'])
); );
@ -355,33 +302,35 @@ function salmon_post(&$a) {
// currently a no-op @fixme // currently a no-op @fixme
if($r) { if($r) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) { if((x($item,'edited') !== false)
&& (datetime_convert('UTC','UTC',$item['edited']) !== $r[0]['edited'])) {
// do not accept (ignore) an earlier edit than one we currently have. // do not accept (ignore) an earlier edit than one we currently have.
if(datetime_convert('UTC','UTC',$datarray['edited']) > $r[0]['edited']) if(datetime_convert('UTC','UTC',$item['edited']) > $r[0]['edited'])
update_feed_item($importer['channel_id'],$datarray); update_feed_item($importer['channel_id'],$item);
} }
http_status_exit(200); if(! $importer['system'])
$status = 200;
continue;
} }
if(! $datarray['parent_mid']) if(! $item['parent_mid'])
$datarray['parent_mid'] = $datarray['mid']; $item['parent_mid'] = $item['mid'];
$datarray['aid'] = $importer['channel_account_id']; $item['aid'] = $importer['channel_account_id'];
$datarray['uid'] = $importer['channel_id']; $item['uid'] = $importer['channel_id'];
logger('consume_feed: ' . print_r($datarray,true),LOGGER_DATA); logger('consume_feed: ' . print_r($item,true),LOGGER_DATA);
$xx = item_store($datarray); $xx = item_store($item);
$r = $xx['item_id']; $r = $xx['item_id'];
// if this is a reply, do a relay? if(! $importer['system'])
$status = 200;
http_status_exit(200); continue;
}
function gnusoc_follow($importer,$xchan) {
}
http_status_exit($status);
} }

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:statusnet="http://status.net/schema/api/1/">
<author>
<name>{{$name}}</name>
<uri>{{$profile_page}}</uri>
<link rel="photo" type="image/jpeg" media:width="300" media:height="300" href="{{$thumb}}" />
<link rel="avatar" type="image/jpeg" media:width="300" media:height="300" href="{{$thumb}}" />
<poco:preferredUsername>{{$nick}}</poco:preferredUsername>
<poco:displayName>{{$name}}</poco:displayName>
</author>
<id>{{$item_id}}</id>
<title>{{$title}}</title>
<published>{{$published}}</published>
<content type="{{$type}}" >{{$content}}</content>
<as:verb>{{$verb}}</as:verb>
<as:object>
<as:object-type>http://activitystrea.ms/schema/1.0/person</as:object-type>
<id>{{$remote_profile}}</id>
<title>{{$remote_name}}</title>
<link rel="avatar" type="image/jpeg" media:width="175" media:height="175" href="{{$remote_photo}}"/>
<link rel="avatar" type="image/jpeg" media:width="80" media:height="80" href="{{$remote_thumb}}"/>
<poco:preferredUsername>{{$remote_nick}}</poco:preferredUsername>
<poco:displayName>{{$remote_name}}</poco:displayName>
</as:object>
</entry>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<me:env xmlns:me="http://salmon-protocol.org/ns/magic-env">
<me:data type="application/atom+xml">
{{$data}}
</me:data>
<me:encoding>{{$encoding}}</me:encoding>
<me:alg>{{$algorithm}}</me:alg>
<me:sig key_id="{{$keyhash}}">{{$signature}}</me:sig>
</me:env>

View file

@ -3,18 +3,29 @@
/** /**
* *
* Name: Hubwall * Name: Hubwall
* Description: Send admin email message to all account holders * Description: Send admin email message to all account holders. <b>-><a href=/hubwall TARGET = "_blank">send now!</a><-</b>
* Version: 1.0 * Version: 1.0
* Author: Mike Macgirvin * Author: Mike Macgirvin
* Maintainer: none * Maintainer: none
*/ */
require_once('include/enotify.php'); require_once('include/enotify.php');
function hubwall_module() {} function hubwall_module() {}
function hubwall_plugin_admin(&$a, &$o) {
$o = '<div></div>&nbsp;&nbsp;&nbsp;&nbsp;<a href="' . z_root() . '/hubwall">' . t('Send email to all members') . '</a></br/>';
}
function hubwall_post(&$a) { function hubwall_post(&$a) {
if(! is_site_admin()) if(! is_site_admin())
return; return;
@ -24,7 +35,7 @@ function hubwall_post(&$a) {
return; return;
$sender_name = t('Hub Administrator'); $sender_name = t('Hub Administrator');
$sender_email = 'sys@' . $a->get_hostname(); $sender_email = 'sys@' . App::get_hostname();
$subject = $_REQUEST['subject']; $subject = $_REQUEST['subject'];

View file

@ -51,7 +51,7 @@ function ijpost_settings(&$a,&$s) {
/* Add our stylesheet to the page so we can make our settings look nice */ /* Add our stylesheet to the page so we can make our settings look nice */
//$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/ijpost/ijpost.css' . '" media="all" />' . "\r\n"; //App::$page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . z_root() . '/addon/ijpost/ijpost.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variables */ /* Get the current state of our config variables */

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Enviament a Insanejournal"; App::$strings["Post to Insanejournal"] = "Enviament a Insanejournal";
$a->strings["InsaneJournal Post Settings"] = "Ajustos d'Enviament a Insanejournal"; App::$strings["InsaneJournal Post Settings"] = "Ajustos d'Enviament a Insanejournal";
$a->strings["Enable InsaneJournal Post Plugin"] = "Habilita el Plugin d'Enviaments a Insanejournal"; App::$strings["Enable InsaneJournal Post Plugin"] = "Habilita el Plugin d'Enviaments a Insanejournal";
$a->strings["InsaneJournal username"] = "Nom d'usuari de Insanejournal"; App::$strings["InsaneJournal username"] = "Nom d'usuari de Insanejournal";
$a->strings["InsaneJournal password"] = "Contrasenya de Insanejournal"; App::$strings["InsaneJournal password"] = "Contrasenya de Insanejournal";
$a->strings["Post to InsaneJournal by default"] = "Enviar per defecte a Insanejournal"; App::$strings["Post to InsaneJournal by default"] = "Enviar per defecte a Insanejournal";
$a->strings["Submit"] = "Enviar"; App::$strings["Submit"] = "Enviar";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Odeslat na Insanejournal"; App::$strings["Post to Insanejournal"] = "Odeslat na Insanejournal";
$a->strings["InsaneJournal Post Settings"] = "Nastavení příspěvků pro InsaneJournal"; App::$strings["InsaneJournal Post Settings"] = "Nastavení příspěvků pro InsaneJournal";
$a->strings["Enable InsaneJournal Post Plugin"] = "Povolit Insanejournal plugin"; App::$strings["Enable InsaneJournal Post Plugin"] = "Povolit Insanejournal plugin";
$a->strings["InsaneJournal username"] = "Insanejournal uživatelské jméno"; App::$strings["InsaneJournal username"] = "Insanejournal uživatelské jméno";
$a->strings["InsaneJournal password"] = "Insanejournal heslo"; App::$strings["InsaneJournal password"] = "Insanejournal heslo";
$a->strings["Post to InsaneJournal by default"] = "Defaultně zasílat příspěvky na InsaneJournal"; App::$strings["Post to InsaneJournal by default"] = "Defaultně zasílat příspěvky na InsaneJournal";
$a->strings["Submit"] = "Odeslat"; App::$strings["Submit"] = "Odeslat";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Auf InsaneJournal posten."; App::$strings["Post to Insanejournal"] = "Auf InsaneJournal posten.";
$a->strings["InsaneJournal Post Settings"] = "InsaneJournal Beitrags-Einstellungen"; App::$strings["InsaneJournal Post Settings"] = "InsaneJournal Beitrags-Einstellungen";
$a->strings["Enable InsaneJournal Post Plugin"] = "InsaneJournal Plugin aktivieren"; App::$strings["Enable InsaneJournal Post Plugin"] = "InsaneJournal Plugin aktivieren";
$a->strings["InsaneJournal username"] = "InsaneJournal Benutzername"; App::$strings["InsaneJournal username"] = "InsaneJournal Benutzername";
$a->strings["InsaneJournal password"] = "InsaneJournal Passwort"; App::$strings["InsaneJournal password"] = "InsaneJournal Passwort";
$a->strings["Post to InsaneJournal by default"] = "Standardmäßig auf InsaneJournal posten."; App::$strings["Post to InsaneJournal by default"] = "Standardmäßig auf InsaneJournal posten.";
$a->strings["Submit"] = "Senden"; App::$strings["Submit"] = "Senden";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Afiŝi al Insanejournal"; App::$strings["Post to Insanejournal"] = "Afiŝi al Insanejournal";
$a->strings["InsaneJournal Post Settings"] = "Agordoj pri Insaenejournal Afiŝoj"; App::$strings["InsaneJournal Post Settings"] = "Agordoj pri Insaenejournal Afiŝoj";
$a->strings["Enable InsaneJournal Post Plugin"] = "Ŝalti la InsaneJournal afiŝo kromprogramon."; App::$strings["Enable InsaneJournal Post Plugin"] = "Ŝalti la InsaneJournal afiŝo kromprogramon.";
$a->strings["InsaneJournal username"] = "Salutnomo ĉe InsaneJournal"; App::$strings["InsaneJournal username"] = "Salutnomo ĉe InsaneJournal";
$a->strings["InsaneJournal password"] = "Pasvorto ĉe InsaneJournal"; App::$strings["InsaneJournal password"] = "Pasvorto ĉe InsaneJournal";
$a->strings["Post to InsaneJournal by default"] = "Defaŭlte afiŝi ĉe InsaneJournal"; App::$strings["Post to InsaneJournal by default"] = "Defaŭlte afiŝi ĉe InsaneJournal";
$a->strings["Submit"] = "Sendi"; App::$strings["Submit"] = "Sendi";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Publicar en Insanejournal"; App::$strings["Post to Insanejournal"] = "Publicar en Insanejournal";
$a->strings["InsaneJournal Post Settings"] = "Configuración de publicación en Insanejournal"; App::$strings["InsaneJournal Post Settings"] = "Configuración de publicación en Insanejournal";
$a->strings["Enable InsaneJournal Post Plugin"] = "Activar el módulo de publicación en Insanejournal"; App::$strings["Enable InsaneJournal Post Plugin"] = "Activar el módulo de publicación en Insanejournal";
$a->strings["InsaneJournal username"] = "Nombre de usuario de Insanejournal"; App::$strings["InsaneJournal username"] = "Nombre de usuario de Insanejournal";
$a->strings["InsaneJournal password"] = "Contraseña de Insanejournal"; App::$strings["InsaneJournal password"] = "Contraseña de Insanejournal";
$a->strings["Post to InsaneJournal by default"] = "Publicar en Insanejournal por defecto"; App::$strings["Post to InsaneJournal by default"] = "Publicar en Insanejournal por defecto";
$a->strings["Submit"] = "Envíar"; App::$strings["Submit"] = "Envíar";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Publier vers InsaneJournal"; App::$strings["Post to Insanejournal"] = "Publier vers InsaneJournal";
$a->strings["InsaneJournal Post Settings"] = "Réglages InsaneJournal"; App::$strings["InsaneJournal Post Settings"] = "Réglages InsaneJournal";
$a->strings["Enable InsaneJournal Post Plugin"] = "Activer le connecteur InsaneJournal"; App::$strings["Enable InsaneJournal Post Plugin"] = "Activer le connecteur InsaneJournal";
$a->strings["InsaneJournal username"] = "Utilisateur InsaneJournal"; App::$strings["InsaneJournal username"] = "Utilisateur InsaneJournal";
$a->strings["InsaneJournal password"] = "Mot de passe InsaneJournal"; App::$strings["InsaneJournal password"] = "Mot de passe InsaneJournal";
$a->strings["Post to InsaneJournal by default"] = "Publier sur InsaneJournal par défaut"; App::$strings["Post to InsaneJournal by default"] = "Publier sur InsaneJournal par défaut";
$a->strings["Submit"] = "Envoyer"; App::$strings["Submit"] = "Envoyer";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = ""; App::$strings["Post to Insanejournal"] = "";
$a->strings["InsaneJournal Post Settings"] = ""; App::$strings["InsaneJournal Post Settings"] = "";
$a->strings["Enable InsaneJournal Post Plugin"] = ""; App::$strings["Enable InsaneJournal Post Plugin"] = "";
$a->strings["InsaneJournal username"] = ""; App::$strings["InsaneJournal username"] = "";
$a->strings["InsaneJournal password"] = ""; App::$strings["InsaneJournal password"] = "";
$a->strings["Post to InsaneJournal by default"] = ""; App::$strings["Post to InsaneJournal by default"] = "";
$a->strings["Submit"] = "Senda inn"; App::$strings["Submit"] = "Senda inn";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Invia a Insanejournal"; App::$strings["Post to Insanejournal"] = "Invia a Insanejournal";
$a->strings["InsaneJournal Post Settings"] = "Impostazioni Invio a InsaneJournal "; App::$strings["InsaneJournal Post Settings"] = "Impostazioni Invio a InsaneJournal ";
$a->strings["Enable InsaneJournal Post Plugin"] = "Abilita il plugin Invio a InsaneJournal"; App::$strings["Enable InsaneJournal Post Plugin"] = "Abilita il plugin Invio a InsaneJournal";
$a->strings["InsaneJournal username"] = "Nome utente InsaneJournal"; App::$strings["InsaneJournal username"] = "Nome utente InsaneJournal";
$a->strings["InsaneJournal password"] = "Password InsaneJournal"; App::$strings["InsaneJournal password"] = "Password InsaneJournal";
$a->strings["Post to InsaneJournal by default"] = "Invia sempre a InsaneJournal"; App::$strings["Post to InsaneJournal by default"] = "Invia sempre a InsaneJournal";
$a->strings["Submit"] = "Invia"; App::$strings["Submit"] = "Invia";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = ""; App::$strings["Post to Insanejournal"] = "";
$a->strings["InsaneJournal Post Settings"] = ""; App::$strings["InsaneJournal Post Settings"] = "";
$a->strings["Enable InsaneJournal Post Plugin"] = ""; App::$strings["Enable InsaneJournal Post Plugin"] = "";
$a->strings["InsaneJournal username"] = ""; App::$strings["InsaneJournal username"] = "";
$a->strings["InsaneJournal password"] = ""; App::$strings["InsaneJournal password"] = "";
$a->strings["Post to InsaneJournal by default"] = ""; App::$strings["Post to InsaneJournal by default"] = "";
$a->strings["Submit"] = "Lagre"; App::$strings["Submit"] = "Lagre";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Doorplaatsen naar InsaneJournal"; App::$strings["Post to Insanejournal"] = "Doorplaatsen naar InsaneJournal";
$a->strings["InsaneJournal Post Settings"] = "InsaneJournal (berichten doorplaatsen)"; App::$strings["InsaneJournal Post Settings"] = "InsaneJournal (berichten doorplaatsen)";
$a->strings["Enable InsaneJournal Post Plugin"] = "Doorplaatsen naar InsaneJournal inschakelen"; App::$strings["Enable InsaneJournal Post Plugin"] = "Doorplaatsen naar InsaneJournal inschakelen";
$a->strings["InsaneJournal username"] = "Gebruikersnaam InsaneJournal"; App::$strings["InsaneJournal username"] = "Gebruikersnaam InsaneJournal";
$a->strings["InsaneJournal password"] = "Wachtwoord InsaneJournal"; App::$strings["InsaneJournal password"] = "Wachtwoord InsaneJournal";
$a->strings["Post to InsaneJournal by default"] = "Berichten standaard naar InsaneJournal doorplaatsen"; App::$strings["Post to InsaneJournal by default"] = "Berichten standaard naar InsaneJournal doorplaatsen";
$a->strings["Submit"] = "Opslaan"; App::$strings["Submit"] = "Opslaan";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Opublikuj na Insanejournal"; App::$strings["Post to Insanejournal"] = "Opublikuj na Insanejournal";
$a->strings["InsaneJournal Post Settings"] = ""; App::$strings["InsaneJournal Post Settings"] = "";
$a->strings["Enable InsaneJournal Post Plugin"] = ""; App::$strings["Enable InsaneJournal Post Plugin"] = "";
$a->strings["InsaneJournal username"] = ""; App::$strings["InsaneJournal username"] = "";
$a->strings["InsaneJournal password"] = ""; App::$strings["InsaneJournal password"] = "";
$a->strings["Post to InsaneJournal by default"] = ""; App::$strings["Post to InsaneJournal by default"] = "";
$a->strings["Submit"] = "Potwierdź"; App::$strings["Submit"] = "Potwierdź";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "Publicar no InsaneJournal"; App::$strings["Post to Insanejournal"] = "Publicar no InsaneJournal";
$a->strings["InsaneJournal Post Settings"] = "Configurações da publicação no InsaneJournal"; App::$strings["InsaneJournal Post Settings"] = "Configurações da publicação no InsaneJournal";
$a->strings["Enable InsaneJournal Post Plugin"] = "Habilitar o plugin de publicação no InsaneJournal"; App::$strings["Enable InsaneJournal Post Plugin"] = "Habilitar o plugin de publicação no InsaneJournal";
$a->strings["InsaneJournal username"] = "Nome de usuário do InsaneJournal"; App::$strings["InsaneJournal username"] = "Nome de usuário do InsaneJournal";
$a->strings["InsaneJournal password"] = "Senha do InsaneJournal"; App::$strings["InsaneJournal password"] = "Senha do InsaneJournal";
$a->strings["Post to InsaneJournal by default"] = "Publicar no InsaneJournal por padrão"; App::$strings["Post to InsaneJournal by default"] = "Publicar no InsaneJournal por padrão";
$a->strings["Submit"] = "Enviar"; App::$strings["Submit"] = "Enviar";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = ""; App::$strings["Post to Insanejournal"] = "";
$a->strings["InsaneJournal Post Settings"] = ""; App::$strings["InsaneJournal Post Settings"] = "";
$a->strings["Enable InsaneJournal Post Plugin"] = "Включить InsaneJournal плагин сообщений"; App::$strings["Enable InsaneJournal Post Plugin"] = "Включить InsaneJournal плагин сообщений";
$a->strings["InsaneJournal username"] = ""; App::$strings["InsaneJournal username"] = "";
$a->strings["InsaneJournal password"] = ""; App::$strings["InsaneJournal password"] = "";
$a->strings["Post to InsaneJournal by default"] = ""; App::$strings["Post to InsaneJournal by default"] = "";
$a->strings["Submit"] = "Подтвердить"; App::$strings["Submit"] = "Подтвердить";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Submit"] = "Spara"; App::$strings["Submit"] = "Spara";

View file

@ -1,9 +1,9 @@
<?php <?php
$a->strings["Post to Insanejournal"] = "转播到Insanejournal"; App::$strings["Post to Insanejournal"] = "转播到Insanejournal";
$a->strings["InsaneJournal Post Settings"] = "Insanejournal转播设置"; App::$strings["InsaneJournal Post Settings"] = "Insanejournal转播设置";
$a->strings["Enable InsaneJournal Post Plugin"] = "使InsaneJournal转播插件可用"; App::$strings["Enable InsaneJournal Post Plugin"] = "使InsaneJournal转播插件可用";
$a->strings["InsaneJournal username"] = "InsaneJournal用户名"; App::$strings["InsaneJournal username"] = "InsaneJournal用户名";
$a->strings["InsaneJournal password"] = "InsaneJournal密码"; App::$strings["InsaneJournal password"] = "InsaneJournal密码";
$a->strings["Post to InsaneJournal by default"] = "默认地转播到InsaneJournal"; App::$strings["Post to InsaneJournal by default"] = "默认地转播到InsaneJournal";
$a->strings["Submit"] = "提交"; App::$strings["Submit"] = "提交";

View file

@ -35,7 +35,7 @@ function irc_addon_settings(&$a,&$s) {
/* Add our stylesheet to the page so we can make our settings look nice */ /* Add our stylesheet to the page so we can make our settings look nice */
//$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/irc/irc.css' . '" media="all" />' . "\r\n"; //App::$page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . z_root() . '/addon/irc/irc.css' . '" media="all" />' . "\r\n";
/* setting popular channels, auto connect channels */ /* setting popular channels, auto connect channels */
$sitechats = get_config('irc','sitechats'); /* popular channels */ $sitechats = get_config('irc','sitechats'); /* popular channels */
@ -82,7 +82,7 @@ return;
function irc_content(&$a) { function irc_content(&$a) {
$baseurl = $a->get_baseurl() . '/addon/irc'; $baseurl = z_root() . '/addon/irc';
$o = ''; $o = '';
/* set the list of popular channels */ /* set the list of popular channels */
@ -93,11 +93,11 @@ function irc_content(&$a) {
$chats = array('hubzilla','friendica','chat','chatback','hottub','ircbar','dateroom','debian'); $chats = array('hubzilla','friendica','chat','chatback','hottub','ircbar','dateroom','debian');
$a->page['aside'] .= '<div class="widget"><h3>' . t('Popular Channels') . '</h3><ul>'; App::$page['aside'] .= '<div class="widget"><h3>' . t('Popular Channels') . '</h3><ul>';
foreach($chats as $chat) { foreach($chats as $chat) {
$a->page['aside'] .= '<li><a href="' . $a->get_baseurl() . '/irc?channels=' . $chat . '" >' . '#' . $chat . '</a></li>'; App::$page['aside'] .= '<li><a href="' . z_root() . '/irc?channels=' . $chat . '" >' . '#' . $chat . '</a></li>';
} }
$a->page['aside'] .= '</ul></div>'; App::$page['aside'] .= '</ul></div>';
/* setting the channel(s) to auto connect */ /* setting the channel(s) to auto connect */
$autochans = get_config('irc','autochans'); $autochans = get_config('irc','autochans');

View file

@ -274,7 +274,7 @@ function jappixmini_settings(&$a, &$s) {
$server = get_config("jappixmini", "default_server"); $server = get_config("jappixmini", "default_server");
if (($username == "") and get_config("jappixmini", "default_user")) if (($username == "") and get_config("jappixmini", "default_user"))
$username = $a->user["nickname"]; $username = App::$user["nickname"];
$info_text = get_config("jappixmini", "infotext"); $info_text = get_config("jappixmini", "infotext");
$info_text = htmlentities($info_text); $info_text = htmlentities($info_text);
@ -297,9 +297,9 @@ function jappixmini_settings(&$a, &$s) {
if (!$activate) { if (!$activate) {
// load scripts if not yet activated so that password can be saved // load scripts if not yet activated so that password can be saved
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;g=mini.xml"></script>'."\r\n"; App::$page['htmlhead'] .= '<script type="text/javascript" src="' . z_root() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;g=mini.xml"></script>'."\r\n";
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=presence.js~caps.js~name.js~roster.js"></script>'."\r\n"; App::$page['htmlhead'] .= '<script type="text/javascript" src="' . z_root() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=presence.js~caps.js~name.js~roster.js"></script>'."\r\n";
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/lib.js"></script>'."\r\n"; App::$page['htmlhead'] .= '<script type="text/javascript" src="' . z_root() . '/addon/jappixmini/lib.js"></script>'."\r\n";
} }
$sc .= '<div class="section-content-info-wrapper form-group">'; $sc .= '<div class="section-content-info-wrapper form-group">';
@ -373,7 +373,7 @@ function jappixmini_settings(&$a, &$s) {
'$content' => $sc '$content' => $sc
)); ));
$a->page['htmlhead'] .= "<script type=\"text/javascript\"> App::$page['htmlhead'] .= "<script type=\"text/javascript\">
function jappixmini_set_password() { function jappixmini_set_password() {
encrypt = document.getElementById('id_jappixmini-encrypt').checked; encrypt = document.getElementById('id_jappixmini-encrypt').checked;
password = document.getElementById('jappixmini-password'); password = document.getElementById('jappixmini-password');
@ -490,10 +490,10 @@ function jappixmini_script(&$a,&$s) {
if (!$activate or $dontinsertchat) { if (!$activate or $dontinsertchat) {
return; return;
} }
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;g=mini.xml"></script>'."\r\n"; App::$page['htmlhead'] .= '<script type="text/javascript" src="' . z_root() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;g=mini.xml"></script>'."\r\n";
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=presence.js~caps.js~name.js~roster.js"></script>'."\r\n"; App::$page['htmlhead'] .= '<script type="text/javascript" src="' . z_root() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=presence.js~caps.js~name.js~roster.js"></script>'."\r\n";
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/lib.js"></script>'."\r\n"; App::$page['htmlhead'] .= '<script type="text/javascript" src="' . z_root() . '/addon/jappixmini/lib.js"></script>'."\r\n";
$username = get_pconfig(local_channel(),'jappixmini','username'); $username = get_pconfig(local_channel(),'jappixmini','username');
$username = str_replace("'", "\\'", $username); $username = str_replace("'", "\\'", $username);
@ -514,7 +514,7 @@ function jappixmini_script(&$a,&$s) {
// set proxy if necessary // set proxy if necessary
$use_proxy = get_config('jappixmini','bosh_proxy'); $use_proxy = get_config('jappixmini','bosh_proxy');
if ($use_proxy) { if ($use_proxy) {
$proxy = $a->get_baseurl().'/addon/jappixmini/proxy.php'; $proxy = z_root().'/addon/jappixmini/proxy.php';
} }
else { else {
$proxy = ""; $proxy = "";
@ -555,7 +555,7 @@ function jappixmini_script(&$a,&$s) {
} }
// add javascript to start Jappix Mini // add javascript to start Jappix Mini
$a->page['htmlhead'] .= "<script type=\"text/javascript\"> App::$page['htmlhead'] .= "<script type=\"text/javascript\">
jQuery(document).ready(function() { jQuery(document).ready(function() {
jappixmini_addon_start('$server', '$username', '$proxy', '$bosh', $encrypt, '$password', $nickname, $contacts_json, '$contacts_hash', $autoapprove, $autosubscribe, $groupchats); jappixmini_addon_start('$server', '$username', '$proxy', '$bosh', $encrypt, '$password', $nickname, $contacts_json, '$contacts_hash', $autoapprove, $autosubscribe, $groupchats);
}); });
@ -568,10 +568,10 @@ function jappixmini_login(&$a, &$o) {
// create client secret on login to be able to encrypt jabber passwords // create client secret on login to be able to encrypt jabber passwords
// for setDB and str_sha1, needed by jappixmini_addon_set_client_secret // for setDB and str_sha1, needed by jappixmini_addon_set_client_secret
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=datastore.js~jsjac.js"></script>'."\r\n"; App::$page['htmlhead'] .= '<script type="text/javascript" src="' . z_root() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=datastore.js~jsjac.js"></script>'."\r\n";
// for jappixmini_addon_set_client_secret // for jappixmini_addon_set_client_secret
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/lib.js"></script>'."\r\n"; App::$page['htmlhead'] .= '<script type="text/javascript" src="' . z_root() . '/addon/jappixmini/lib.js"></script>'."\r\n";
// save hash of password // save hash of password
$o = str_replace("<form ", "<form onsubmit=\"jappixmini_addon_set_client_secret(this.elements['id_password'].value);return true;\" ", $o); $o = str_replace("<form ", "<form onsubmit=\"jappixmini_addon_set_client_secret(this.elements['id_password'].value);return true;\" ", $o);
@ -699,6 +699,6 @@ function jappixmini_download_source(&$a,&$b) {
// Jappix Mini source download link on About page // Jappix Mini source download link on About page
$b .= '<h1>Jappix Mini</h1>'; $b .= '<h1>Jappix Mini</h1>';
$b .= '<p>This site uses the jappixmini addon, which includes Jappix Mini by the <a href="'.$a->get_baseurl().'/addon/jappixmini/jappix/AUTHORS">Jappix authors</a> and is distributed under the terms of the <a href="'.$a->get_baseurl().'/addon/jappixmini/jappix/COPYING">GNU Affero General Public License</a>.</p>'; $b .= '<p>This site uses the jappixmini addon, which includes Jappix Mini by the <a href="'.z_root().'/addon/jappixmini/jappix/AUTHORS">Jappix authors</a> and is distributed under the terms of the <a href="'.z_root().'/addon/jappixmini/jappix/COPYING">GNU Affero General Public License</a>.</p>';
$b .= '<p>You can download the <a href="'.$a->get_baseurl().'/addon/jappixmini.tgz">source code of the addon</a>. The rest of Hubzilla is distributed under compatible licenses and can be retrieved from <a href="https://github.com/friendica/red">https://github.com/friendica/red</a> and <a href="https://github.com/friendica/red-addons">https://github.com/friendica/red-addons</a></p>'; $b .= '<p>You can download the <a href="'.z_root().'/addon/jappixmini.tgz">source code of the addon</a>. The rest of Hubzilla is distributed under compatible licenses and can be retrieved from <a href="https://github.com/friendica/red">https://github.com/friendica/red</a> and <a href="https://github.com/friendica/red-addons">https://github.com/friendica/red-addons</a></p>';
} }

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = ""; App::$strings["Jappix Mini addon settings"] = "";
$a->strings["Activate addon"] = ""; App::$strings["Activate addon"] = "";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = ""; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "";
$a->strings["Jabber username"] = ""; App::$strings["Jabber username"] = "";
$a->strings["Jabber server"] = ""; App::$strings["Jabber server"] = "";
$a->strings["Jabber BOSH host"] = ""; App::$strings["Jabber BOSH host"] = "";
$a->strings["Jabber password"] = ""; App::$strings["Jabber password"] = "";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = ""; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "";
$a->strings["Friendica password"] = ""; App::$strings["Friendica password"] = "";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = ""; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "";
$a->strings["Subscribe to Friendica contacts automatically"] = ""; App::$strings["Subscribe to Friendica contacts automatically"] = "";
$a->strings["Purge internal list of jabber addresses of contacts"] = ""; App::$strings["Purge internal list of jabber addresses of contacts"] = "";
$a->strings["Submit"] = "Enviar"; App::$strings["Submit"] = "Enviar";
$a->strings["Add contact"] = ""; App::$strings["Add contact"] = "";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = "Nastavení rozšíření Jappix Mini"; App::$strings["Jappix Mini addon settings"] = "Nastavení rozšíření Jappix Mini";
$a->strings["Activate addon"] = "Aktivovat rozšíření"; App::$strings["Activate addon"] = "Aktivovat rozšíření";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "<em>Nevlkádejte</em> Jappixmini Chat-Widget do webového rozhraní"; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "<em>Nevlkádejte</em> Jappixmini Chat-Widget do webového rozhraní";
$a->strings["Jabber username"] = "Jabber uživatelské jméno"; App::$strings["Jabber username"] = "Jabber uživatelské jméno";
$a->strings["Jabber server"] = "Jabber server"; App::$strings["Jabber server"] = "Jabber server";
$a->strings["Jabber BOSH host"] = "Jabber BOSH host"; App::$strings["Jabber BOSH host"] = "Jabber BOSH host";
$a->strings["Jabber password"] = "Jabber heslo"; App::$strings["Jabber password"] = "Jabber heslo";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = "Zašifrovat Jabber heslo s heslem Friendica (doporučeno)"; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "Zašifrovat Jabber heslo s heslem Friendica (doporučeno)";
$a->strings["Friendica password"] = "Friendica heslo"; App::$strings["Friendica password"] = "Friendica heslo";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = "Automaticky schválit požadavek na členství od Friedica kontaktů."; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "Automaticky schválit požadavek na členství od Friedica kontaktů.";
$a->strings["Subscribe to Friendica contacts automatically"] = "Automaticky zaslat požadavek na členství Friedica kontaktům."; App::$strings["Subscribe to Friendica contacts automatically"] = "Automaticky zaslat požadavek na členství Friedica kontaktům.";
$a->strings["Purge internal list of jabber addresses of contacts"] = "Očistit interní seznam jabber adres kontaktů"; App::$strings["Purge internal list of jabber addresses of contacts"] = "Očistit interní seznam jabber adres kontaktů";
$a->strings["Submit"] = "Odeslat"; App::$strings["Submit"] = "Odeslat";
$a->strings["Add contact"] = "Přidat kontakt"; App::$strings["Add contact"] = "Přidat kontakt";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = "Jappix Mini Addon Einstellungen"; App::$strings["Jappix Mini addon settings"] = "Jappix Mini Addon Einstellungen";
$a->strings["Activate addon"] = "Addon aktivieren"; App::$strings["Activate addon"] = "Addon aktivieren";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "Füge das Jappix Mini Chat Widget <em>nicht</em> zum Webinterface hinzu"; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "Füge das Jappix Mini Chat Widget <em>nicht</em> zum Webinterface hinzu";
$a->strings["Jabber username"] = "Jabber Nutzername"; App::$strings["Jabber username"] = "Jabber Nutzername";
$a->strings["Jabber server"] = "Jabber Server"; App::$strings["Jabber server"] = "Jabber Server";
$a->strings["Jabber BOSH host"] = "Jabber BOSH Host"; App::$strings["Jabber BOSH host"] = "Jabber BOSH Host";
$a->strings["Jabber password"] = "Japper Passwort"; App::$strings["Jabber password"] = "Japper Passwort";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = "Verschlüssele das Jabber Passwort mit dem Friendica Passwort (empfohlen)"; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "Verschlüssele das Jabber Passwort mit dem Friendica Passwort (empfohlen)";
$a->strings["Friendica password"] = "Friendica Passwort"; App::$strings["Friendica password"] = "Friendica Passwort";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = "Kontaktanfragen von Friendica Kontakten automatisch akzeptieren"; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "Kontaktanfragen von Friendica Kontakten automatisch akzeptieren";
$a->strings["Subscribe to Friendica contacts automatically"] = "Automatisch Friendica Kontakten bei Jabber folgen"; App::$strings["Subscribe to Friendica contacts automatically"] = "Automatisch Friendica Kontakten bei Jabber folgen";
$a->strings["Purge internal list of jabber addresses of contacts"] = "Lösche die interne Liste der Jabber Adressen der Kontakte"; App::$strings["Purge internal list of jabber addresses of contacts"] = "Lösche die interne Liste der Jabber Adressen der Kontakte";
$a->strings["Submit"] = "Senden"; App::$strings["Submit"] = "Senden";
$a->strings["Add contact"] = "Kontakt hinzufügen"; App::$strings["Add contact"] = "Kontakt hinzufügen";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = ""; App::$strings["Jappix Mini addon settings"] = "";
$a->strings["Activate addon"] = ""; App::$strings["Activate addon"] = "";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = ""; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "";
$a->strings["Jabber username"] = ""; App::$strings["Jabber username"] = "";
$a->strings["Jabber server"] = ""; App::$strings["Jabber server"] = "";
$a->strings["Jabber BOSH host"] = ""; App::$strings["Jabber BOSH host"] = "";
$a->strings["Jabber password"] = ""; App::$strings["Jabber password"] = "";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = ""; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "";
$a->strings["Friendica password"] = ""; App::$strings["Friendica password"] = "";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = ""; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "";
$a->strings["Subscribe to Friendica contacts automatically"] = ""; App::$strings["Subscribe to Friendica contacts automatically"] = "";
$a->strings["Purge internal list of jabber addresses of contacts"] = ""; App::$strings["Purge internal list of jabber addresses of contacts"] = "";
$a->strings["Submit"] = "Sendi"; App::$strings["Submit"] = "Sendi";
$a->strings["Add contact"] = ""; App::$strings["Add contact"] = "";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = "Ajustes de complemento Jappix Mini"; App::$strings["Jappix Mini addon settings"] = "Ajustes de complemento Jappix Mini";
$a->strings["Activate addon"] = "Activar complemento"; App::$strings["Activate addon"] = "Activar complemento";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "<em>No</em> insertar la aplicación de chat Jappixmini en la interfaz web"; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "<em>No</em> insertar la aplicación de chat Jappixmini en la interfaz web";
$a->strings["Jabber username"] = "Nombre de usuario de Jabber"; App::$strings["Jabber username"] = "Nombre de usuario de Jabber";
$a->strings["Jabber server"] = "Servidor de Jabber"; App::$strings["Jabber server"] = "Servidor de Jabber";
$a->strings["Jabber BOSH host"] = "Anfitrión BOSH de Jabber"; App::$strings["Jabber BOSH host"] = "Anfitrión BOSH de Jabber";
$a->strings["Jabber password"] = "Contraseña de Jabber"; App::$strings["Jabber password"] = "Contraseña de Jabber";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = "Encriptar contraseña de Jabber con la contraseña de Friendica (recomendado)"; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "Encriptar contraseña de Jabber con la contraseña de Friendica (recomendado)";
$a->strings["Friendica password"] = "Contraseña de Friendica"; App::$strings["Friendica password"] = "Contraseña de Friendica";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = "Aprobar peticiones de suscripción de contactos de Friendica automáticamente"; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "Aprobar peticiones de suscripción de contactos de Friendica automáticamente";
$a->strings["Subscribe to Friendica contacts automatically"] = "Suscribirse a contactos de Friendica automáticamente"; App::$strings["Subscribe to Friendica contacts automatically"] = "Suscribirse a contactos de Friendica automáticamente";
$a->strings["Purge internal list of jabber addresses of contacts"] = "Purgar los contactos de la lista interna de direcciones de Jabber"; App::$strings["Purge internal list of jabber addresses of contacts"] = "Purgar los contactos de la lista interna de direcciones de Jabber";
$a->strings["Submit"] = "Envíar"; App::$strings["Submit"] = "Envíar";
$a->strings["Add contact"] = "Añadir contacto"; App::$strings["Add contact"] = "Añadir contacto";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = "Jappix Mini"; App::$strings["Jappix Mini addon settings"] = "Jappix Mini";
$a->strings["Activate addon"] = "Activer"; App::$strings["Activate addon"] = "Activer";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "Ne <em>pas</em> insérer le widget JappixMini dans l'interface web"; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "Ne <em>pas</em> insérer le widget JappixMini dans l'interface web";
$a->strings["Jabber username"] = "Utilisateur Jabber"; App::$strings["Jabber username"] = "Utilisateur Jabber";
$a->strings["Jabber server"] = "Serveur Jabber"; App::$strings["Jabber server"] = "Serveur Jabber";
$a->strings["Jabber BOSH host"] = "Hôte BOSH (proxy) Jabber"; App::$strings["Jabber BOSH host"] = "Hôte BOSH (proxy) Jabber";
$a->strings["Jabber password"] = "Mot de passe Jabber"; App::$strings["Jabber password"] = "Mot de passe Jabber";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = "Chiffrer le mot de passe Jabber avec le mot de passe Friendica (recommandé)"; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "Chiffrer le mot de passe Jabber avec le mot de passe Friendica (recommandé)";
$a->strings["Friendica password"] = "Mot de passe Friendica"; App::$strings["Friendica password"] = "Mot de passe Friendica";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = "Approuver les contacts Friendica automatiquement"; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "Approuver les contacts Friendica automatiquement";
$a->strings["Subscribe to Friendica contacts automatically"] = "S'inscrire aux contacts Friendica automatiquement"; App::$strings["Subscribe to Friendica contacts automatically"] = "S'inscrire aux contacts Friendica automatiquement";
$a->strings["Purge internal list of jabber addresses of contacts"] = "Purger la liste interne d'adresses Jabber"; App::$strings["Purge internal list of jabber addresses of contacts"] = "Purger la liste interne d'adresses Jabber";
$a->strings["Submit"] = "Envoyer"; App::$strings["Submit"] = "Envoyer";
$a->strings["Add contact"] = "Ajouter un contact"; App::$strings["Add contact"] = "Ajouter un contact";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = ""; App::$strings["Jappix Mini addon settings"] = "";
$a->strings["Activate addon"] = ""; App::$strings["Activate addon"] = "";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = ""; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "";
$a->strings["Jabber username"] = ""; App::$strings["Jabber username"] = "";
$a->strings["Jabber server"] = ""; App::$strings["Jabber server"] = "";
$a->strings["Jabber BOSH host"] = ""; App::$strings["Jabber BOSH host"] = "";
$a->strings["Jabber password"] = ""; App::$strings["Jabber password"] = "";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = ""; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "";
$a->strings["Friendica password"] = ""; App::$strings["Friendica password"] = "";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = ""; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "";
$a->strings["Subscribe to Friendica contacts automatically"] = ""; App::$strings["Subscribe to Friendica contacts automatically"] = "";
$a->strings["Purge internal list of jabber addresses of contacts"] = ""; App::$strings["Purge internal list of jabber addresses of contacts"] = "";
$a->strings["Submit"] = "Senda inn"; App::$strings["Submit"] = "Senda inn";
$a->strings["Add contact"] = ""; App::$strings["Add contact"] = "";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = ""; App::$strings["Jappix Mini addon settings"] = "";
$a->strings["Activate addon"] = ""; App::$strings["Activate addon"] = "";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = ""; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "";
$a->strings["Jabber username"] = ""; App::$strings["Jabber username"] = "";
$a->strings["Jabber server"] = ""; App::$strings["Jabber server"] = "";
$a->strings["Jabber BOSH host"] = ""; App::$strings["Jabber BOSH host"] = "";
$a->strings["Jabber password"] = ""; App::$strings["Jabber password"] = "";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = ""; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "";
$a->strings["Friendica password"] = ""; App::$strings["Friendica password"] = "";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = ""; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "";
$a->strings["Subscribe to Friendica contacts automatically"] = ""; App::$strings["Subscribe to Friendica contacts automatically"] = "";
$a->strings["Purge internal list of jabber addresses of contacts"] = ""; App::$strings["Purge internal list of jabber addresses of contacts"] = "";
$a->strings["Submit"] = "Invia"; App::$strings["Submit"] = "Invia";
$a->strings["Add contact"] = ""; App::$strings["Add contact"] = "";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = ""; App::$strings["Jappix Mini addon settings"] = "";
$a->strings["Activate addon"] = ""; App::$strings["Activate addon"] = "";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = ""; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "";
$a->strings["Jabber username"] = ""; App::$strings["Jabber username"] = "";
$a->strings["Jabber server"] = ""; App::$strings["Jabber server"] = "";
$a->strings["Jabber BOSH host"] = ""; App::$strings["Jabber BOSH host"] = "";
$a->strings["Jabber password"] = ""; App::$strings["Jabber password"] = "";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = ""; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "";
$a->strings["Friendica password"] = ""; App::$strings["Friendica password"] = "";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = ""; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "";
$a->strings["Subscribe to Friendica contacts automatically"] = ""; App::$strings["Subscribe to Friendica contacts automatically"] = "";
$a->strings["Purge internal list of jabber addresses of contacts"] = ""; App::$strings["Purge internal list of jabber addresses of contacts"] = "";
$a->strings["Submit"] = "Lagre"; App::$strings["Submit"] = "Lagre";
$a->strings["Add contact"] = ""; App::$strings["Add contact"] = "";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = ""; App::$strings["Jappix Mini addon settings"] = "";
$a->strings["Activate addon"] = ""; App::$strings["Activate addon"] = "";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = ""; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "";
$a->strings["Jabber username"] = ""; App::$strings["Jabber username"] = "";
$a->strings["Jabber server"] = ""; App::$strings["Jabber server"] = "";
$a->strings["Jabber BOSH host"] = ""; App::$strings["Jabber BOSH host"] = "";
$a->strings["Jabber password"] = "Hasło Jabber"; App::$strings["Jabber password"] = "Hasło Jabber";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = ""; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "";
$a->strings["Friendica password"] = "Hasło Friendica"; App::$strings["Friendica password"] = "Hasło Friendica";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = ""; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "";
$a->strings["Subscribe to Friendica contacts automatically"] = ""; App::$strings["Subscribe to Friendica contacts automatically"] = "";
$a->strings["Purge internal list of jabber addresses of contacts"] = ""; App::$strings["Purge internal list of jabber addresses of contacts"] = "";
$a->strings["Submit"] = "Potwierdź"; App::$strings["Submit"] = "Potwierdź";
$a->strings["Add contact"] = "Dodaj kontakt"; App::$strings["Add contact"] = "Dodaj kontakt";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = ""; App::$strings["Jappix Mini addon settings"] = "";
$a->strings["Activate addon"] = ""; App::$strings["Activate addon"] = "";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = ""; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "";
$a->strings["Jabber username"] = ""; App::$strings["Jabber username"] = "";
$a->strings["Jabber server"] = ""; App::$strings["Jabber server"] = "";
$a->strings["Jabber BOSH host"] = ""; App::$strings["Jabber BOSH host"] = "";
$a->strings["Jabber password"] = ""; App::$strings["Jabber password"] = "";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = ""; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "";
$a->strings["Friendica password"] = ""; App::$strings["Friendica password"] = "";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = ""; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "";
$a->strings["Subscribe to Friendica contacts automatically"] = ""; App::$strings["Subscribe to Friendica contacts automatically"] = "";
$a->strings["Purge internal list of jabber addresses of contacts"] = ""; App::$strings["Purge internal list of jabber addresses of contacts"] = "";
$a->strings["Submit"] = "Enviar"; App::$strings["Submit"] = "Enviar";
$a->strings["Add contact"] = ""; App::$strings["Add contact"] = "";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = ""; App::$strings["Jappix Mini addon settings"] = "";
$a->strings["Activate addon"] = ""; App::$strings["Activate addon"] = "";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = ""; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "";
$a->strings["Jabber username"] = ""; App::$strings["Jabber username"] = "";
$a->strings["Jabber server"] = ""; App::$strings["Jabber server"] = "";
$a->strings["Jabber BOSH host"] = ""; App::$strings["Jabber BOSH host"] = "";
$a->strings["Jabber password"] = ""; App::$strings["Jabber password"] = "";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = ""; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "";
$a->strings["Friendica password"] = ""; App::$strings["Friendica password"] = "";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = ""; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "";
$a->strings["Subscribe to Friendica contacts automatically"] = ""; App::$strings["Subscribe to Friendica contacts automatically"] = "";
$a->strings["Purge internal list of jabber addresses of contacts"] = ""; App::$strings["Purge internal list of jabber addresses of contacts"] = "";
$a->strings["Submit"] = "Подтвердить"; App::$strings["Submit"] = "Подтвердить";
$a->strings["Add contact"] = ""; App::$strings["Add contact"] = "";

View file

@ -1,3 +1,3 @@
<?php <?php
$a->strings["Submit"] = "Spara"; App::$strings["Submit"] = "Spara";

View file

@ -1,16 +1,16 @@
<?php <?php
$a->strings["Jappix Mini addon settings"] = "Jappix Mini加件设置"; App::$strings["Jappix Mini addon settings"] = "Jappix Mini加件设置";
$a->strings["Activate addon"] = "使加件可用"; App::$strings["Activate addon"] = "使加件可用";
$a->strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "<em>别</em>把Jappixmini聊小窗插入网用户界面"; App::$strings["Do <em>not</em> insert the Jappixmini Chat-Widget into the webinterface"] = "<em>别</em>把Jappixmini聊小窗插入网用户界面";
$a->strings["Jabber username"] = "Jabber用户名"; App::$strings["Jabber username"] = "Jabber用户名";
$a->strings["Jabber server"] = "Jabber服务器"; App::$strings["Jabber server"] = "Jabber服务器";
$a->strings["Jabber BOSH host"] = "Jabber BOSH主机"; App::$strings["Jabber BOSH host"] = "Jabber BOSH主机";
$a->strings["Jabber password"] = "Jabber密码"; App::$strings["Jabber password"] = "Jabber密码";
$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = "把Jabber密码跟Friendica密码加密推荐的"; App::$strings["Encrypt Jabber password with Friendica password (recommended)"] = "把Jabber密码跟Friendica密码加密推荐的";
$a->strings["Friendica password"] = "Friendica密码"; App::$strings["Friendica password"] = "Friendica密码";
$a->strings["Approve subscription requests from Friendica contacts automatically"] = "自动地批准从Friendica熟人的订阅要求"; App::$strings["Approve subscription requests from Friendica contacts automatically"] = "自动地批准从Friendica熟人的订阅要求";
$a->strings["Subscribe to Friendica contacts automatically"] = "自动地订阅Friendica熟人"; App::$strings["Subscribe to Friendica contacts automatically"] = "自动地订阅Friendica熟人";
$a->strings["Purge internal list of jabber addresses of contacts"] = "把熟人jabber地址从内部单"; App::$strings["Purge internal list of jabber addresses of contacts"] = "把熟人jabber地址从内部单";
$a->strings["Submit"] = "提交"; App::$strings["Submit"] = "提交";
$a->strings["Add contact"] = "加熟人"; App::$strings["Add contact"] = "加熟人";

View file

@ -38,8 +38,8 @@ function js_upload_form(&$a,&$b) {
$b['default_upload'] = false; $b['default_upload'] = false;
$b['addon_text'] .= '<link href="' . $a->get_baseurl() . '/addon/js_upload/file-uploader/client/fileuploader.css" rel="stylesheet" type="text/css">'; $b['addon_text'] .= '<link href="' . z_root() . '/addon/js_upload/file-uploader/client/fileuploader.css" rel="stylesheet" type="text/css">';
$b['addon_text'] .= '<script src="' . $a->get_baseurl() . '/addon/js_upload/file-uploader/client/fileuploader.js" type="text/javascript"></script>'; $b['addon_text'] .= '<script src="' . z_root() . '/addon/js_upload/file-uploader/client/fileuploader.js" type="text/javascript"></script>';
$upload_msg = t('Upload a file'); $upload_msg = t('Upload a file');
$drop_msg = t('Drop files here to upload'); $drop_msg = t('Drop files here to upload');
@ -143,7 +143,7 @@ function js_upload_post_init(&$a,&$b) {
if((! array_key_exists('source',$_REQUEST)) || ($_REQUEST['source'] != 'photos')) if((! array_key_exists('source',$_REQUEST)) || ($_REQUEST['source'] != 'photos'))
return; return;
// $a->data['upload_plugin'] = $b['source']; // App::$data['upload_plugin'] = $b['source'];
// list of valid extensions, ex. array("jpeg", "xml", "bmp") // list of valid extensions, ex. array("jpeg", "xml", "bmp")
@ -159,7 +159,7 @@ function js_upload_post_init(&$a,&$b) {
// to pass data through iframe you will need to encode all html tags // to pass data through iframe you will need to encode all html tags
$a->data['upload_jsonresponse'] = htmlspecialchars(json_encode($result), ENT_NOQUOTES); App::$data['upload_jsonresponse'] = htmlspecialchars(json_encode($result), ENT_NOQUOTES);
if(isset($result['error'])) { if(isset($result['error'])) {
logger('mod/photos.php: photos_post(): error uploading photo: ' . $result['error'] , 'LOGGER_DEBUG'); logger('mod/photos.php: photos_post(): error uploading photo: ' . $result['error'] , 'LOGGER_DEBUG');
@ -167,7 +167,7 @@ function js_upload_post_init(&$a,&$b) {
killme(); killme();
} }
$a->data['upload_result'] = $result; App::$data['upload_result'] = $result;
} }
@ -176,7 +176,7 @@ function js_upload_post_file(&$a,&$b) {
if((! array_key_exists('source',$_REQUEST)) || ($_REQUEST['source'] != 'photos')) if((! array_key_exists('source',$_REQUEST)) || ($_REQUEST['source'] != 'photos'))
return; return;
$result = $a->data['upload_result']; $result = App::$data['upload_result'];
$b['src'] = $result['path']; $b['src'] = $result['path'];
$b['filename'] = $result['filename']; $b['filename'] = $result['filename'];
@ -190,8 +190,8 @@ function js_upload_post_end(&$a,&$b) {
if((! array_key_exists('source',$_REQUEST)) || ($_REQUEST['source'] != 'photos')) if((! array_key_exists('source',$_REQUEST)) || ($_REQUEST['source'] != 'photos'))
return; return;
if(x($a->data,'upload_jsonresponse')) { if(x(App::$data,'upload_jsonresponse')) {
echo $a->data['upload_jsonresponse']; echo App::$data['upload_jsonresponse'];
killme(); killme();
} }

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Carrega un arxiu"; App::$strings["Upload a file"] = "Carrega un arxiu";
$a->strings["Drop files here to upload"] = "Deixa aquí el arxiu a carregar"; App::$strings["Drop files here to upload"] = "Deixa aquí el arxiu a carregar";
$a->strings["Cancel"] = "Cancel·lar"; App::$strings["Cancel"] = "Cancel·lar";
$a->strings["Failed"] = "Fracassar"; App::$strings["Failed"] = "Fracassar";
$a->strings["No files were uploaded."] = "No hi ha arxius carregats."; App::$strings["No files were uploaded."] = "No hi ha arxius carregats.";
$a->strings["Uploaded file is empty"] = "L'arxiu carregat està buit"; App::$strings["Uploaded file is empty"] = "L'arxiu carregat està buit";
$a->strings["Image exceeds size limit of "] = "La imatge excedeix el límit de "; App::$strings["Image exceeds size limit of "] = "La imatge excedeix el límit de ";
$a->strings["File has an invalid extension, it should be one of "] = "Arxiu té una extensió no vàlida, ha de ser una de"; App::$strings["File has an invalid extension, it should be one of "] = "Arxiu té una extensió no vàlida, ha de ser una de";
$a->strings["Upload was cancelled, or server error encountered"] = "La pujada va ser cancel.lada, o es va trobar un error de servidor"; App::$strings["Upload was cancelled, or server error encountered"] = "La pujada va ser cancel.lada, o es va trobar un error de servidor";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Nahrát soubor"; App::$strings["Upload a file"] = "Nahrát soubor";
$a->strings["Drop files here to upload"] = "Přeneste sem soubory k nahrání"; App::$strings["Drop files here to upload"] = "Přeneste sem soubory k nahrání";
$a->strings["Cancel"] = "Zrušit"; App::$strings["Cancel"] = "Zrušit";
$a->strings["Failed"] = "Neúspěch"; App::$strings["Failed"] = "Neúspěch";
$a->strings["No files were uploaded."] = "Žádné soubory nebyly nahrány."; App::$strings["No files were uploaded."] = "Žádné soubory nebyly nahrány.";
$a->strings["Uploaded file is empty"] = "Nahraný soubor je prázdný"; App::$strings["Uploaded file is empty"] = "Nahraný soubor je prázdný";
$a->strings["Image exceeds size limit of "] = "Velikost obrázku překračuje limit velikosti"; App::$strings["Image exceeds size limit of "] = "Velikost obrázku překračuje limit velikosti";
$a->strings["File has an invalid extension, it should be one of "] = "Soubor má neplatnou příponu, ta by měla být jednou z"; App::$strings["File has an invalid extension, it should be one of "] = "Soubor má neplatnou příponu, ta by měla být jednou z";
$a->strings["Upload was cancelled, or server error encountered"] = "Nahrávání bylo zrušeno nebo došlo k chybě na serveru"; App::$strings["Upload was cancelled, or server error encountered"] = "Nahrávání bylo zrušeno nebo došlo k chybě na serveru";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Datei hochladen"; App::$strings["Upload a file"] = "Datei hochladen";
$a->strings["Drop files here to upload"] = "Ziehe Dateien hierher, um sie hochzuladen"; App::$strings["Drop files here to upload"] = "Ziehe Dateien hierher, um sie hochzuladen";
$a->strings["Cancel"] = "Abbrechen"; App::$strings["Cancel"] = "Abbrechen";
$a->strings["Failed"] = "Fehlgeschlagen"; App::$strings["Failed"] = "Fehlgeschlagen";
$a->strings["No files were uploaded."] = "Keine Dateien hochgeladen."; App::$strings["No files were uploaded."] = "Keine Dateien hochgeladen.";
$a->strings["Uploaded file is empty"] = "Hochgeladene Datei ist leer"; App::$strings["Uploaded file is empty"] = "Hochgeladene Datei ist leer";
$a->strings["Image exceeds size limit of "] = "Die Bildgröße übersteigt das Limit von "; App::$strings["Image exceeds size limit of "] = "Die Bildgröße übersteigt das Limit von ";
$a->strings["File has an invalid extension, it should be one of "] = "Die Dateierweiterung ist nicht erlaubt, sie muss eine der folgenden sein "; App::$strings["File has an invalid extension, it should be one of "] = "Die Dateierweiterung ist nicht erlaubt, sie muss eine der folgenden sein ";
$a->strings["Upload was cancelled, or server error encountered"] = "Upload abgebrochen oder Serverfehler aufgetreten"; App::$strings["Upload was cancelled, or server error encountered"] = "Upload abgebrochen oder Serverfehler aufgetreten";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Alŝuti dosieron"; App::$strings["Upload a file"] = "Alŝuti dosieron";
$a->strings["Drop files here to upload"] = "Ŝovmeti dosierojn ĉi tie por alŝuti ilin."; App::$strings["Drop files here to upload"] = "Ŝovmeti dosierojn ĉi tie por alŝuti ilin.";
$a->strings["Cancel"] = "Nuligi"; App::$strings["Cancel"] = "Nuligi";
$a->strings["Failed"] = "Malsukcesi"; App::$strings["Failed"] = "Malsukcesi";
$a->strings["No files were uploaded."] = "Neniom da dosieroj alŝutita."; App::$strings["No files were uploaded."] = "Neniom da dosieroj alŝutita.";
$a->strings["Uploaded file is empty"] = "Alŝutita dosiero estas malplena."; App::$strings["Uploaded file is empty"] = "Alŝutita dosiero estas malplena.";
$a->strings["Image exceeds size limit of "] = "Bildo estas pli granda ol la limito de"; App::$strings["Image exceeds size limit of "] = "Bildo estas pli granda ol la limito de";
$a->strings["File has an invalid extension, it should be one of "] = "Dosiero havas nevalidan sufikson. Ĝi estu unu de "; App::$strings["File has an invalid extension, it should be one of "] = "Dosiero havas nevalidan sufikson. Ĝi estu unu de ";
$a->strings["Upload was cancelled, or server error encountered"] = "Alŝutado estas nuligita aŭ okazis eraro sur la servilo"; App::$strings["Upload was cancelled, or server error encountered"] = "Alŝutado estas nuligita aŭ okazis eraro sur la servilo";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Subir un archivo"; App::$strings["Upload a file"] = "Subir un archivo";
$a->strings["Drop files here to upload"] = "Arrastra los archivos aquí para subirlos"; App::$strings["Drop files here to upload"] = "Arrastra los archivos aquí para subirlos";
$a->strings["Cancel"] = "Cancelar"; App::$strings["Cancel"] = "Cancelar";
$a->strings["Failed"] = "Falló"; App::$strings["Failed"] = "Falló";
$a->strings["No files were uploaded."] = "No se han subido archivos aún."; App::$strings["No files were uploaded."] = "No se han subido archivos aún.";
$a->strings["Uploaded file is empty"] = "El archivo subido está vacío"; App::$strings["Uploaded file is empty"] = "El archivo subido está vacío";
$a->strings["Image exceeds size limit of "] = "La imagen supera tamaño límite de "; App::$strings["Image exceeds size limit of "] = "La imagen supera tamaño límite de ";
$a->strings["File has an invalid extension, it should be one of "] = "El archivo tiene una extensión no válida, debería ser una de "; App::$strings["File has an invalid extension, it should be one of "] = "El archivo tiene una extensión no válida, debería ser una de ";
$a->strings["Upload was cancelled, or server error encountered"] = "La subida ha sido cancelada, o se encontró un error del servidor"; App::$strings["Upload was cancelled, or server error encountered"] = "La subida ha sido cancelada, o se encontró un error del servidor";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Téléverser un fichier"; App::$strings["Upload a file"] = "Téléverser un fichier";
$a->strings["Drop files here to upload"] = "Déposer des fichiers ici pour les téléverser"; App::$strings["Drop files here to upload"] = "Déposer des fichiers ici pour les téléverser";
$a->strings["Cancel"] = "Annuler"; App::$strings["Cancel"] = "Annuler";
$a->strings["Failed"] = "Échec"; App::$strings["Failed"] = "Échec";
$a->strings["No files were uploaded."] = "Aucun fichier n'a été téléversé."; App::$strings["No files were uploaded."] = "Aucun fichier n'a été téléversé.";
$a->strings["Uploaded file is empty"] = "Le fichier téléversé est vide"; App::$strings["Uploaded file is empty"] = "Le fichier téléversé est vide";
$a->strings["Image exceeds size limit of "] = "L'image dépasse la taille maximale de "; App::$strings["Image exceeds size limit of "] = "L'image dépasse la taille maximale de ";
$a->strings["File has an invalid extension, it should be one of "] = "Le fichier a une extension invalide, elle devrait être parmi "; App::$strings["File has an invalid extension, it should be one of "] = "Le fichier a une extension invalide, elle devrait être parmi ";
$a->strings["Upload was cancelled, or server error encountered"] = "Téléversement annulé, ou erreur de serveur"; App::$strings["Upload was cancelled, or server error encountered"] = "Téléversement annulé, ou erreur de serveur";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Hlaða upp skrá"; App::$strings["Upload a file"] = "Hlaða upp skrá";
$a->strings["Drop files here to upload"] = "Slepptu skrám hér til að hala upp"; App::$strings["Drop files here to upload"] = "Slepptu skrám hér til að hala upp";
$a->strings["Cancel"] = "Hætta við"; App::$strings["Cancel"] = "Hætta við";
$a->strings["Failed"] = "Mistókst"; App::$strings["Failed"] = "Mistókst";
$a->strings["No files were uploaded."] = "Engum skráð hlaðið upp."; App::$strings["No files were uploaded."] = "Engum skráð hlaðið upp.";
$a->strings["Uploaded file is empty"] = "Skrá sem var hlaðið upp er tóm"; App::$strings["Uploaded file is empty"] = "Skrá sem var hlaðið upp er tóm";
$a->strings["Image exceeds size limit of "] = "Mynd er yfir stærðamörkum"; App::$strings["Image exceeds size limit of "] = "Mynd er yfir stærðamörkum";
$a->strings["File has an invalid extension, it should be one of "] = "Skrá hefur ógilda skránafnsendingu, ætti að vera eitt af"; App::$strings["File has an invalid extension, it should be one of "] = "Skrá hefur ógilda skránafnsendingu, ætti að vera eitt af";
$a->strings["Upload was cancelled, or server error encountered"] = "Hætt var við upphal eða kerfisvilla kom upp"; App::$strings["Upload was cancelled, or server error encountered"] = "Hætt var við upphal eða kerfisvilla kom upp";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Carica un file"; App::$strings["Upload a file"] = "Carica un file";
$a->strings["Drop files here to upload"] = "Trascina un file qui per caricarlo"; App::$strings["Drop files here to upload"] = "Trascina un file qui per caricarlo";
$a->strings["Cancel"] = "Annulla"; App::$strings["Cancel"] = "Annulla";
$a->strings["Failed"] = "Caricamento fallito"; App::$strings["Failed"] = "Caricamento fallito";
$a->strings["No files were uploaded."] = "Nessun file è stato caricato."; App::$strings["No files were uploaded."] = "Nessun file è stato caricato.";
$a->strings["Uploaded file is empty"] = "Il file caricato è vuoto"; App::$strings["Uploaded file is empty"] = "Il file caricato è vuoto";
$a->strings["Image exceeds size limit of "] = "L'immagine supera il limite di"; App::$strings["Image exceeds size limit of "] = "L'immagine supera il limite di";
$a->strings["File has an invalid extension, it should be one of "] = "Il file ha un'estensione non valida, dovrebbe essere una tra "; App::$strings["File has an invalid extension, it should be one of "] = "Il file ha un'estensione non valida, dovrebbe essere una tra ";
$a->strings["Upload was cancelled, or server error encountered"] = "Il caricamento è stato cancellato, o si è verificato un errore sul server"; App::$strings["Upload was cancelled, or server error encountered"] = "Il caricamento è stato cancellato, o si è verificato un errore sul server";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Last opp en fil"; App::$strings["Upload a file"] = "Last opp en fil";
$a->strings["Drop files here to upload"] = "Slipp filer her for å laste de opp"; App::$strings["Drop files here to upload"] = "Slipp filer her for å laste de opp";
$a->strings["Cancel"] = "Avbryt"; App::$strings["Cancel"] = "Avbryt";
$a->strings["Failed"] = "Mislyktes"; App::$strings["Failed"] = "Mislyktes";
$a->strings["No files were uploaded."] = "Ingen filer ble lastet opp."; App::$strings["No files were uploaded."] = "Ingen filer ble lastet opp.";
$a->strings["Uploaded file is empty"] = "Opplastet fil er tom"; App::$strings["Uploaded file is empty"] = "Opplastet fil er tom";
$a->strings["Image exceeds size limit of "] = "Bilde overstiger størrelsesbegrensningen på "; App::$strings["Image exceeds size limit of "] = "Bilde overstiger størrelsesbegrensningen på ";
$a->strings["File has an invalid extension, it should be one of "] = "Filen har en ugyldig endelse, den må være en av "; App::$strings["File has an invalid extension, it should be one of "] = "Filen har en ugyldig endelse, den må være en av ";
$a->strings["Upload was cancelled, or server error encountered"] = "Opplasting avbrutt, eller det oppstod en feil på tjeneren"; App::$strings["Upload was cancelled, or server error encountered"] = "Opplasting avbrutt, eller det oppstod en feil på tjeneren";

View file

@ -1,11 +1,11 @@
<?php <?php
$a->strings["Upload a file"] = "Bestand uploaden"; App::$strings["Upload a file"] = "Bestand uploaden";
$a->strings["Drop files here to upload"] = "Sleep bestanden hier naartoe om te uploaden"; App::$strings["Drop files here to upload"] = "Sleep bestanden hier naartoe om te uploaden";
$a->strings["Cancel"] = "Annuleren"; App::$strings["Cancel"] = "Annuleren";
$a->strings["Failed"] = "Mislukt"; App::$strings["Failed"] = "Mislukt";
$a->strings["No files were uploaded."] = "Er zijn geen bestanden geüpload."; App::$strings["No files were uploaded."] = "Er zijn geen bestanden geüpload.";
$a->strings["Uploaded file is empty"] = "Geüpload bestand is leeg"; App::$strings["Uploaded file is empty"] = "Geüpload bestand is leeg";
$a->strings["Image exceeds size limit of "] = "Bestandsgrootte afbeelding overschrijdt limiet van "; App::$strings["Image exceeds size limit of "] = "Bestandsgrootte afbeelding overschrijdt limiet van ";
$a->strings["File has an invalid extension, it should be one of "] = "Het bestand heeft een ongeldige bestandsextensie, geldig zijn "; App::$strings["File has an invalid extension, it should be one of "] = "Het bestand heeft een ongeldige bestandsextensie, geldig zijn ";
$a->strings["Upload was cancelled, or server error encountered"] = "Uploaden is geannuleerd of er is sprake van een serverfout"; App::$strings["Upload was cancelled, or server error encountered"] = "Uploaden is geannuleerd of er is sprake van een serverfout";

Some files were not shown because too many files have changed in this diff Show more