Merge branch 'master' into tres

This commit is contained in:
redmatrix 2015-05-17 19:49:36 -07:00
commit 7c7a5cba8f
31 changed files with 612 additions and 421 deletions

View file

@ -1,6 +1,9 @@
Hubzilla - Hub Deployment Platform Hubzilla
================================== ========
###Websites. Redefined.
![Hubzilla](images/ghash-32.png) ![Hubzilla](images/ghash-32.png)

View file

@ -605,6 +605,7 @@ class App {
public $observer = null; // xchan record of the page observer public $observer = null; // xchan record of the page observer
public $profile_uid = 0; // If applicable, the channel_id of the "page owner" public $profile_uid = 0; // If applicable, the channel_id of the "page owner"
public $poi = null; // "person of interest", generally a referenced connection public $poi = null; // "person of interest", generally a referenced connection
private $oauth_key = null; // consumer_id of oauth request, if used
public $layout = array(); // Comanche parsed template public $layout = array(); // Comanche parsed template
public $pdl = null; public $pdl = null;
private $perms = null; // observer permissions private $perms = null; // observer permissions
@ -888,6 +889,7 @@ class App {
$this->observer = $xchan; $this->observer = $xchan;
} }
function get_observer() { function get_observer() {
return $this->observer; return $this->observer;
} }
@ -900,6 +902,14 @@ class App {
return $this->perms; return $this->perms;
} }
function set_oauth_key($consumer_id) {
$this->oauth_key = $consumer_id;
}
function get_oauth_key() {
return $this->oauth_key;
}
function get_apps() { function get_apps() {
return $this->apps; return $this->apps;
} }
@ -2093,7 +2103,9 @@ function construct_page(&$a) {
} }
// And a couple of convenience macros // And a couple of convenience macros
if(strpos($v, '$htmlhead') !== false) {
$v = str_replace('$htmlhead', $a->page['htmlhead'], $v);
}
if(strpos($v, '$nav') !== false) { if(strpos($v, '$nav') !== false) {
$v = str_replace('$nav', $a->page['nav'], $v); $v = str_replace('$nav', $a->page['nav'], $v);
} }

View file

@ -1,10 +1,12 @@
Hubzilla - Hub Deployment Platform Hubzilla
================================== ========
###Websites. Redefined.
![Hubzilla](images/ghash-32.png) ![Hubzilla](images/ghash-32.png)
**What are Hubs?** **What are Hubs?**
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. 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.
@ -34,4 +36,3 @@ Possible website applications include
* forums * forums
* dating websites * dating websites
* pretty much anything you can do on a traditional blog or community website, but that you could do better if you could easily connect it with other websites or privately share things across website boundaries. * pretty much anything you can do on a traditional blog or community website, but that you could do better if you could easily connect it with other websites or privately share things across website boundaries.

View file

@ -14,6 +14,7 @@ We need much more than this, but here are areas where developers can help. Pleas
[li]Integrate the "open site" list with the register page[/li] [li]Integrate the "open site" list with the register page[/li]
[li]implement oembed provider interface[/li] [li]implement oembed provider interface[/li]
[li]refactor the oembed client interface so that we can safely sandbox remote content[/li] [li]refactor the oembed client interface so that we can safely sandbox remote content[/li]
[li]Many modern social apps now have both a profile photo and a "cover photo". Add support for this.
[li]Write more webpage layouts[/li] [li]Write more webpage layouts[/li]
[li]Write more webpage widgets[/li] [li]Write more webpage widgets[/li]
[li]restricted access OAuth clients[/li] [li]restricted access OAuth clients[/li]

View file

@ -78,11 +78,14 @@ require_once('include/items.php');
// list($consumer,$token) = $oauth->verify_request(OAuthRequest::from_request()); // list($consumer,$token) = $oauth->verify_request(OAuthRequest::from_request());
if (!is_null($token)){ if (!is_null($token)){
$oauth->loginUser($token->uid); $oauth->loginUser($token->uid);
$a->set_oauth_key($consumer->key);
call_hooks('logged_in', $a->user); call_hooks('logged_in', $a->user);
return; return;
} }
echo __file__.__line__.__function__."<pre>"; echo __file__.__line__.__function__."<pre>";
var_dump($consumer, $token); // var_dump($consumer, $token);
die(); die();
} }
catch(Exception $e) { catch(Exception $e) {

View file

@ -4,10 +4,11 @@
* *
* @brief File/attach API with the potential for revision control. * @brief File/attach API with the potential for revision control.
* *
* @TODO: a filesystem storage abstraction which maintains security (and 'data' contains a system filename * @TODO A filesystem storage abstraction which maintains security (and 'data'
* which is inaccessible from the web). This could get around PHP storage limits and store videos and larger * contains a system filename which is inaccessible from the web). This could
* items, using fread or OS methods or native code to read/write or chunk it through. * get around PHP storage limits and store videos and larger items, using fread
* Also an 'append' option to the storage function might be a useful addition. * or OS methods or native code to read/write or chunk it through.
* @todo Also an 'append' option to the storage function might be a useful addition.
*/ */
require_once('include/permissions.php'); require_once('include/permissions.php');
@ -123,7 +124,7 @@ function z_mime_content_type($filename) {
* @param string $hash (optional) * @param string $hash (optional)
* @param string $filename (optional) * @param string $filename (optional)
* @param string $filetype (optional) * @param string $filetype (optional)
* @return assoziative array with: * @return associative array with:
* * \e boolean \b success * * \e boolean \b success
* * \e int|boolean \b results amount of found results, or false * * \e int|boolean \b results amount of found results, or false
* * \e string \b message with error messages if any * * \e string \b message with error messages if any
@ -170,10 +171,10 @@ function attach_count_files($channel_id, $observer, $hash = '', $filename = '',
* @param $orderby * @param $orderby
* @param $start * @param $start
* @param $entries * @param $entries
* @return array * @return associative array with:
* $ret['success'] boolean * * \e boolean \b success
* $ret['results'] array with results, or false * * \e array|boolean \b results array with results, or false
* $ret['message'] string with error messages if any * * \e string \b message with error messages if any
*/ */
function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $filetype = '', $orderby = 'created desc', $start = 0, $entries = 0) { function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $filetype = '', $orderby = 'created desc', $start = 0, $entries = 0) {
@ -275,7 +276,7 @@ function attach_by_hash($hash, $rev = 0) {
* @see attach_by_hash() * @see attach_by_hash()
* @param $hash * @param $hash
* @param $rev revision default 0 * @param $rev revision default 0
* @return array Everything except data. * @return associative array with everything except data
* * \e boolean \b success boolean true or false * * \e boolean \b success boolean true or false
* * \e string \b message (optional) only when success is false * * \e string \b message (optional) only when success is false
* * \e array \b data array of attach DB entry without data component * * \e array \b data array of attach DB entry without data component
@ -326,12 +327,18 @@ function attach_by_hash_nodata($hash, $rev = 0) {
} }
/** /**
* @brief * @brief Stores an attachment from a POST file upload.
* *
* @param $channel channel array of owner * This function stores an attachment. It can be a new one, a replacement or a
* @param $observer_hash hash of current observer * new revision depending on value set in \e $options.
* @param $options (optional) *
* @param $arr (optional) * @note Requires an input field \e userfile and does not accept multiple files
* in one request.
*
* @param array $channel channel array of owner
* @param string $observer_hash hash of current observer
* @param string $options (optional) one of update, replace, revision
* @param array $arr (optional) associative array
*/ */
function attach_store($channel, $observer_hash, $options = '', $arr = null) { function attach_store($channel, $observer_hash, $options = '', $arr = null) {
@ -841,7 +848,7 @@ function attach_delete($channel_id, $resource) {
* @warning This function cannot be used with mod/dav as it always returns a * @warning This function cannot be used with mod/dav as it always returns a
* path valid under mod/cloud. * path valid under mod/cloud.
* *
* @param array $arr assoziative array with: * @param array $arr associative array with:
* * \e int \b uid the channel's uid * * \e int \b uid the channel's uid
* * \e string \b folder * * \e string \b folder
* * \e string \b filename * * \e string \b filename
@ -1212,6 +1219,7 @@ function recursive_activity_recipients($arr_allow_cid, $arr_allow_gid, $arr_deny
$ret = array(); $ret = array();
$parent_arr = array(); $parent_arr = array();
$count_values = array();
$poster = get_app()->get_observer(); $poster = get_app()->get_observer();
//turn allow_gid into allow_cid's //turn allow_gid into allow_cid's
@ -1319,11 +1327,10 @@ function recursive_activity_recipients($arr_allow_cid, $arr_allow_gid, $arr_deny
return $ret; return $ret;
} }
/** /**
* @brief Returns members of a group * @brief Returns members of a group.
* *
* @param $group_id * @param int $group_id id of the group to look up
*/ */
function in_group($group_id) { function in_group($group_id) {
$group_members = array(); $group_members = array();

View file

@ -450,7 +450,7 @@ function format_event_diaspora($ev) {
$bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM $bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM
$o = t('Hubzilla event notification:') . "\n"; $o = t('$Projectname event notification:') . "\n";
$o .= '**' . (($ev['summary']) ? bb2diaspora($ev['summary']) : bb2diaspora($ev['desc'])) . '**' . "\n"; $o .= '**' . (($ev['summary']) ? bb2diaspora($ev['summary']) : bb2diaspora($ev['desc'])) . '**' . "\n";

View file

@ -166,12 +166,19 @@ function comanche_block($s, $class = '') {
intval($channel_id), intval($channel_id),
dbesc($name) dbesc($name)
); );
if($r) { if($r) {
$o .= (($var['wrap'] == 'none') ? '' : '<div class="' . $class . '">'); $o .= (($var['wrap'] == 'none') ? '' : '<div class="' . $class . '">');
if($r[0]['title']) if($r[0]['title'])
$o .= '<h3>' . $r[0]['title'] . '</h3>'; $o .= '<h3>' . $r[0]['title'] . '</h3>';
if($r[0]['body'] === '$content') {
$o .= prepare_text(get_app()->data['webpage'][0]['body'], get_app()->data['webpage'][0]['mimetype']);
}
else {
$o .= prepare_text($r[0]['body'], $r[0]['mimetype']); $o .= prepare_text($r[0]['body'], $r[0]['mimetype']);
}
$o .= (($var['wrap'] == 'none') ? '' : '</div>'); $o .= (($var['wrap'] == 'none') ? '' : '</div>');
} }
} }

View file

@ -706,8 +706,9 @@ function diaspora_request($importer,$xml) {
$cnv = random_string(); $cnv = random_string();
$mid = random_string(); $mid = random_string();
$msg = t('You have started sharing with a Hubzilla premium channel.'); $msg = t('You have started sharing with a $Projectname premium channel.');
$msg .= t('Hubzilla premium channels are not available for sharing with Diaspora members. This sharing request has been blocked.') . "\r"; $msg .= t('$Projectname premium channels are not available for sharing with Diaspora members. This sharing request has been blocked.') . "\r";
$msg .= t('Please do not reply to this message, as this channel is not sharing with you and any reply will not be seen by the recipient.') . "\r"; $msg .= t('Please do not reply to this message, as this channel is not sharing with you and any reply will not be seen by the recipient.') . "\r";
$created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d H:i:s \U\T\C'); $created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d H:i:s \U\T\C');
@ -2449,7 +2450,7 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
'$handle' => xmlify($myaddr), '$handle' => xmlify($myaddr),
'$public' => $public, '$public' => $public,
'$created' => $created, '$created' => $created,
'$provider' => (($item['app']) ? $item['app'] : 'hubzilla') '$provider' => (($item['app']) ? $item['app'] : t('$projectname'))
)); ));
} else { } else {
$tpl = get_markup_template('diaspora_post.tpl'); $tpl = get_markup_template('diaspora_post.tpl');
@ -2460,7 +2461,7 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
'$handle' => xmlify($myaddr), '$handle' => xmlify($myaddr),
'$public' => $public, '$public' => $public,
'$created' => $created, '$created' => $created,
'$provider' => (($item['app']) ? $item['app'] : 'hubzilla') '$provider' => (($item['app']) ? $item['app'] : t('$projectname'))
)); ));
} }

View file

@ -55,8 +55,8 @@ function notification($params) {
push_lang($recip['account_language']); // should probably have a channel language push_lang($recip['account_language']); // should probably have a channel language
$banner = t('Hubzilla Notification'); $banner = t('$Projectname Notification');
$product = t('hubzilla'); // PLATFORM_NAME; $product = t('$projectname'); // PLATFORM_NAME;
$siteurl = $a->get_baseurl(true); $siteurl = $a->get_baseurl(true);
$thanks = t('Thank You,'); $thanks = t('Thank You,');
$sitename = get_config('system','sitename'); $sitename = get_config('system','sitename');

66
include/environment.php Normal file
View file

@ -0,0 +1,66 @@
<?php
/**
* @file include/environment.php
* @brief Functions related to system/environment tasks.
*
* This file contains some functions to check the environment/system.
*/
/**
* @brief Get some upload related limits from php.ini.
*
* This function returns values from php.ini like \b post_max_size,
* \b max_file_uploads, \b upload_max_filesize.
*
* @return array associative array
* * \e int \b post_max_size the maximum size of a complete POST in bytes
* * \e int \b upload_max_filesize the maximum size of one file in bytes
* * \e int \b max_file_uploads maximum number of files in one POST
* * \e int \b max_upload_filesize min(post_max_size, upload_max_filesize)
*/
function getPhpiniUploadLimits() {
$ret = array();
// max size of the complete POST
$ret['post_max_size'] = phpiniSizeToBytes(ini_get('post_max_size'));
// max size of one file
$ret['upload_max_filesize'] = phpiniSizeToBytes(ini_get('upload_max_filesize'));
// catch a configuration error where post_max_size < upload_max_filesize
$ret['max_upload_filesize'] = min(
$ret['post_max_size'],
$ret['upload_max_filesize']
);
// maximum number of files in one POST
$ret['max_file_uploads'] = intval(ini_get('max_file_uploads'));
return $ret;
}
/**
* @brief Parses php_ini size settings to bytes.
*
* This function parses common size setting from php.ini files to bytes.
* e.g. post_max_size = 8M ==> 8388608
*
* \note This method does not recognise other human readable formats like
* 8MB, etc.
*
* @todo Make this function more universal useable. MB, T, etc.
*
* @param string $val value from php.ini e.g. 2M, 8M
* @return int size in bytes
*/
function phpiniSizeToBytes($val) {
$val = trim($val);
$unit = strtolower($val[strlen($val)-1]);
switch($unit) {
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return (int)$val;
}

View file

@ -20,19 +20,21 @@ class FKOAuthDataStore extends OAuthDataStore {
logger(__function__.":".$consumer_key); logger(__function__.":".$consumer_key);
// echo "<pre>"; var_dump($consumer_key); killme(); // echo "<pre>"; var_dump($consumer_key); killme();
$r = q("SELECT client_id, pw, redirect_uri FROM clients WHERE client_id='%s'", $r = q("SELECT client_id, pw, redirect_uri FROM clients WHERE client_id = '%s'",
dbesc($consumer_key) dbesc($consumer_key)
); );
if (count($r)) if($r) {
get_app()->set_oauth_key($consumer_key);
return new OAuthConsumer($r[0]['client_id'],$r[0]['pw'],$r[0]['redirect_uri']); return new OAuthConsumer($r[0]['client_id'],$r[0]['pw'],$r[0]['redirect_uri']);
}
return null; return null;
} }
function lookup_token($consumer, $token_type, $token) { function lookup_token($consumer, $token_type, $token) {
logger(__function__.":".$consumer.", ". $token_type.", ".$token); logger(__function__.":".$consumer.", ". $token_type.", ".$token);
$r = q("SELECT id, secret,scope, expires, uid FROM tokens WHERE client_id='%s' AND scope='%s' AND id='%s'", $r = q("SELECT id, secret, scope, expires, uid FROM tokens WHERE client_id = '%s' AND scope = '%s' AND id = '%s'",
dbesc($consumer->key), dbesc($consumer->key),
dbesc($token_type), dbesc($token_type),
dbesc($token) dbesc($token)
@ -51,7 +53,7 @@ class FKOAuthDataStore extends OAuthDataStore {
function lookup_nonce($consumer, $token, $nonce, $timestamp) { function lookup_nonce($consumer, $token, $nonce, $timestamp) {
// echo __file__.":".__line__."<pre>"; var_dump($consumer,$key); killme(); // echo __file__.":".__line__."<pre>"; var_dump($consumer,$key); killme();
$r = q("SELECT id, secret FROM tokens WHERE client_id='%s' AND id='%s' AND expires=%d", $r = q("SELECT id, secret FROM tokens WHERE client_id = '%s' AND id = '%s' AND expires = %d",
dbesc($consumer->key), dbesc($consumer->key),
dbesc($nonce), dbesc($nonce),
intval($timestamp) intval($timestamp)
@ -132,6 +134,7 @@ class FKOAuthDataStore extends OAuthDataStore {
} }
class FKOAuth1 extends OAuthServer { class FKOAuth1 extends OAuthServer {
function __construct() { function __construct() {
parent::__construct(new FKOAuthDataStore()); parent::__construct(new FKOAuthDataStore());
$this->add_signature_method(new OAuthSignatureMethod_PLAINTEXT()); $this->add_signature_method(new OAuthSignatureMethod_PLAINTEXT());

View file

@ -65,6 +65,10 @@ function get_perms() {
*/ */
function get_all_perms($uid, $observer_xchan, $internal_use = true) { function get_all_perms($uid, $observer_xchan, $internal_use = true) {
$api = get_app()->get_oauth_key();
if($api)
return get_all_api_perms($uid,$api);
$global_perms = get_perms(); $global_perms = get_perms();
// Save lots of individual lookups // Save lots of individual lookups
@ -265,6 +269,10 @@ function get_all_perms($uid, $observer_xchan, $internal_use = true) {
*/ */
function perm_is_allowed($uid, $observer_xchan, $permission) { function perm_is_allowed($uid, $observer_xchan, $permission) {
$api = get_app()->get_oauth_key();
if($api)
return api_perm_is_allowed($uid,$api,$permission);
$arr = array( $arr = array(
'channel_id' => $uid, 'channel_id' => $uid,
'observer_hash' => $observer_xchan, 'observer_hash' => $observer_xchan,
@ -388,6 +396,82 @@ function perm_is_allowed($uid, $observer_xchan, $permission) {
return false; return false;
} }
function get_all_api_perms($uid,$api) {
$global_perms = get_perms();
$ret = array();
$r = q("select * from xperm where xp_client = '%s' and xp_channel = %d",
dbesc($api),
intval($uid)
);
if(! $r)
return false;
$allow_all = false;
$allowed = array();
foreach($r as $rr) {
if($rr['xp_perm'] === 'all')
$allow_all = true;
if(! in_array($rr['xp_perm'],$allowed))
$allowed[] = $rr['xp_perm'];
}
foreach($global_perms as $perm_name => $permission) {
if($allow_all || in_array($perm_name,$allowed))
$ret[$perm_name] = true;
else
$ret[$perm_name] = false;
}
$arr = array(
'channel_id' => $uid,
'observer_hash' => $observer_xchan,
'permissions' => $ret);
call_hooks('get_all_api_perms',$arr);
return $arr['permissions'];
}
function api_perm_is_allowed($uid,$api,$permission) {
$arr = array(
'channel_id' => $uid,
'observer_hash' => $observer_xchan,
'permission' => $permission,
'result' => false
);
call_hooks('api_perm_is_allowed', $arr);
if($arr['result'])
return true;
$r = q("select * from xperm where xp_client = '%s' and xp_channel = %d and ( xp_perm = 'all' OR xp_perm = '%s' )",
dbesc($api),
intval($uid),
dbesc($permission)
);
if(! $r)
return false;
foreach($r as $rr) {
if($rr['xp_perm'] === 'all' || $rr['xp_perm'] === $permission)
return true;
}
return false;
}
// Check a simple array of observers against a permissions // Check a simple array of observers against a permissions
// return a simple array of those with permission // return a simple array of those with permission

View file

@ -232,7 +232,7 @@ function admin_page_summary(&$a) {
$alertmsg = ''; $alertmsg = '';
// annoy admin about upcoming unsupported PHP version // annoy admin about upcoming unsupported PHP version
if (version_compare(PHP_VERSION, '5.4', '<')) { if (version_compare(PHP_VERSION, '5.4', '<')) {
$alertmsg = 'Your PHP version ' . PHP_VERSION . ' will not be supported with the next major release of Hubzilla. You are strongly urged to upgrade to a current version.' $alertmsg = 'Your PHP version ' . PHP_VERSION . ' will not be supported with the next major release of $Projectname. You are strongly urged to upgrade to a current version.'
. '<br>PHP 5.3 has reached its <a href="http://php.net/eol.php" class="alert-link">End of Life (EOL)</a> in August 2014.' . '<br>PHP 5.3 has reached its <a href="http://php.net/eol.php" class="alert-link">End of Life (EOL)</a> in August 2014.'
. ' A list about current PHP versions can be found <a href="http://php.net/supported-versions.php" class="alert-link">here</a>.'; . ' A list about current PHP versions can be found <a href="http://php.net/supported-versions.php" class="alert-link">here</a>.';
} }

View file

@ -117,7 +117,7 @@ function cloud_init(&$a) {
if ((! $auth->observer) && (! $isapublic_file) && (! $davguest)) { if ((! $auth->observer) && (! $isapublic_file) && (! $davguest)) {
try { try {
$auth->Authenticate($server, t('Hubzilla - Guests: Username: {your email address}, Password: +++')); $auth->Authenticate($server, t('$Projectname - Guests: Username: {your email address}, Password: +++'));
} }
catch (Exception $e) { catch (Exception $e) {
logger('mod_cloud: auth exception' . $e->getMessage()); logger('mod_cloud: auth exception' . $e->getMessage());

View file

@ -118,7 +118,7 @@ function dav_init(&$a) {
if ((! $auth->observer) && (! $isapublic_file) && (! $davguest)) { if ((! $auth->observer) && (! $isapublic_file) && (! $davguest)) {
try { try {
$auth->Authenticate($server, t('Hubzilla channel')); $auth->Authenticate($server, t('$Projectname channel'));
} }
catch (Exception $e) { catch (Exception $e) {
logger('mod_cloud: auth exception' . $e->getMessage()); logger('mod_cloud: auth exception' . $e->getMessage());

View file

@ -50,7 +50,7 @@ function home_content(&$a, $update = 0, $load = false) {
if(get_config('system','projecthome')) { if(get_config('system','projecthome')) {
$o .= file_get_contents('assets/home.html'); $o .= file_get_contents('assets/home.html');
$a->page['template'] = 'full'; $a->page['template'] = 'full';
$a->page['title'] = t('Hubzilla - &quot;The Network&quot;'); $a->page['title'] = t('$Projectname');
return $o; return $o;
} }

View file

@ -129,12 +129,12 @@ function invite_content(&$a) {
'$invite' => t('Send invitations'), '$invite' => t('Send invitations'),
'$addr_text' => t('Enter email addresses, one per line:'), '$addr_text' => t('Enter email addresses, one per line:'),
'$msg_text' => t('Your message:'), '$msg_text' => t('Your message:'),
'$default_message' => t('Please join my community on Hubzilla.') . "\r\n" . "\r\n" '$default_message' => t('Please join my community on $Projectname.') . "\r\n" . "\r\n"
. $linktxt . $linktxt
. (($invonly) ? "\r\n" . "\r\n" . t('You will need to supply this invitation code: ') . $invite_code . "\r\n" . "\r\n" : '') . (($invonly) ? "\r\n" . "\r\n" . t('You will need to supply this invitation code: ') . $invite_code . "\r\n" . "\r\n" : '')
. t('1. Register at any Hubzilla location (they are all inter-connected)') . t('1. Register at any $Projectname location (they are all inter-connected)')
. "\r\n" . "\r\n" . z_root() . '/register' . "\r\n" . "\r\n" . z_root() . '/register'
. "\r\n" . "\r\n" . t('2. Enter my Hubzilla network address into the site searchbar.') . "\r\n" . "\r\n" . t('2. Enter my $Projectname network address into the site searchbar.')
. "\r\n" . "\r\n" . $ob['xchan_addr'] . ' (' . t('or visit ') . z_root() . '/channel/' . $channel['channel_address'] . ')' . "\r\n" . "\r\n" . $ob['xchan_addr'] . ' (' . t('or visit ') . z_root() . '/channel/' . $channel['channel_address'] . ')'
. "\r\n" . "\r\n" . "\r\n" . "\r\n"
. t('3. Click [Connect]') . t('3. Click [Connect]')

View file

@ -18,7 +18,7 @@ function like_content(&$a) {
if(! $observer) { if(! $observer) {
$_SESSION['return_url'] = $a->query_string; $_SESSION['return_url'] = $a->query_string;
$o .= t('This action is restricted to members.') . EOL; $o .= t('This action is restricted to members.') . EOL;
$o .= t('Please <a href="rmagic">login with your Hubzilla ID</a> or <a href="register">register as a new Redmatrix.member</a> to continue.') . EOL; $o .= t('Please <a href="rmagic">login with your $Projectname ID</a> or <a href="register">register as a new $Projectname member</a> to continue.') . EOL;
return $o; return $o;
} }
} }

View file

@ -159,7 +159,7 @@ function mitem_content(&$a) {
'$permdesc' => t("\x28click to open/close\x29"), '$permdesc' => t("\x28click to open/close\x29"),
'$aclselect' => populate_acl($perm_defaults,false), '$aclselect' => populate_acl($perm_defaults,false),
'$mitem_desc' => array('mitem_desc', t('Link Name'), '', 'Visible name of the link','*'), '$mitem_desc' => array('mitem_desc', t('Link Name'), '', 'Visible name of the link','*'),
'$mitem_link' => array('mitem_link', t('Link or Submenu Target'), '', 'Enter URL of the link or select a menu name to create a submenu', '*', 'list="menu-names"'), '$mitem_link' => array('mitem_link', t('Link or Submenu Target'), '', t('Enter URL of the link or select a menu name to create a submenu'), '*', 'list="menu-names"'),
'$usezid' => array('usezid', t('Use magic-auth if available'), true, ''), '$usezid' => array('usezid', t('Use magic-auth if available'), true, ''),
'$newwin' => array('newwin', t('Open link in new window'), false,''), '$newwin' => array('newwin', t('Open link in new window'), false,''),
'$mitem_order' => array('mitem_order', t('Order in list'),'0',t('Higher numbers will sink to bottom of listing')), '$mitem_order' => array('mitem_order', t('Order in list'),'0',t('Higher numbers will sink to bottom of listing')),
@ -230,8 +230,8 @@ function mitem_content(&$a) {
'$aclselect' => populate_acl($mitem,false), '$aclselect' => populate_acl($mitem,false),
'$mitem_id' => intval(argv(2)), '$mitem_id' => intval(argv(2)),
'$mitem_desc' => array('mitem_desc', t('Link text'), $mitem['mitem_desc'], '','*'), '$mitem_desc' => array('mitem_desc', t('Link text'), $mitem['mitem_desc'], '','*'),
'$mitem_link' => array('mitem_link', t('Link or Submenu Target'), $mitem['mitem_link'], t('Enter URL of the link or select a menu name to create a submenu'), '*', 'list="menu-name"'), '$mitem_link' => array('mitem_link', t('Link or Submenu Target'), $mitem['mitem_link'], 'Enter URL of the link or select a menu name to create a submenu', '*', 'list="menu-names"'),
'$usezid' => array('usezid', t('Use Hubzilla magic-auth if available'), (($mitem['mitem_flags'] & MENU_ITEM_ZID) ? 1 : 0), ''), '$usezid' => array('usezid', t('Use magic-auth if available'), (($mitem['mitem_flags'] & MENU_ITEM_ZID) ? 1 : 0), ''),
'$newwin' => array('newwin', t('Open link in new window'), (($mitem['mitem_flags'] & MENU_ITEM_NEWWIN) ? 1 : 0),''), '$newwin' => array('newwin', t('Open link in new window'), (($mitem['mitem_flags'] & MENU_ITEM_NEWWIN) ? 1 : 0),''),
'$mitem_order' => array('mitem_order', t('Order in list'),$mitem['mitem_order'],t('Higher numbers will sink to bottom of listing')), '$mitem_order' => array('mitem_order', t('Order in list'),$mitem['mitem_order'],t('Higher numbers will sink to bottom of listing')),
'$submit' => t('Submit'), '$submit' => t('Submit'),

View file

@ -42,7 +42,7 @@ function p_init(&$a) {
'$handle' => xmlify($myaddr), '$handle' => xmlify($myaddr),
'$public' => 'true', '$public' => 'true',
'$created' => $created, '$created' => $created,
'$provider' => (($item['app']) ? $item['app'] : 'hubzilla') '$provider' => (($item['app']) ? $item['app'] : t('$projectname'))
)); ));
header('Content-type: text/xml'); header('Content-type: text/xml');

View file

@ -16,7 +16,7 @@ function pubsites_content(&$a) {
$o .= '<h1>' . t('Public Sites') . '</h1>'; $o .= '<h1>' . t('Public Sites') . '</h1>';
$o .= '<div class="descriptive-text">' . $o .= '<div class="descriptive-text">' .
t('The listed sites allow public registration into the Hubzilla. All sites in the matrix are interlinked so membership on any of them conveys membership in the matrix as a whole. Some sites may require subscription or provide tiered service plans. The provider links <strong>may</strong> provide additional details.') . '</div>' . EOL; t('The listed sites allow public registration for the $Projectname network. All sites in the network are interlinked so membership on any of them conveys membership in the network as a whole. Some sites may require subscription or provide tiered service plans. The provider links <strong>may</strong> provide additional details.') . '</div>' . EOL;
$ret = z_fetch_url($url); $ret = z_fetch_url($url);
if($ret['success']) { if($ret['success']) {

View file

@ -163,9 +163,7 @@ function setup_content(&$a) {
global $install_wizard_pass, $db; global $install_wizard_pass, $db;
$o = ''; $o = '';
$wizard_status = ""; $wizard_status = "";
$install_title = t('Hubzilla Server - Setup'); $install_title = t('$Projectname Server - Setup');
if(x($a->data,'db_conn_failed')) { if(x($a->data,'db_conn_failed')) {
$install_wizard_pass = 2; $install_wizard_pass = 2;
@ -287,7 +285,7 @@ function setup_content(&$a) {
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
'$title' => $install_title, '$title' => $install_title,
'$pass' => t('Database connection'), '$pass' => t('Database connection'),
'$info_01' => t('In order to install Hubzilla we need to know how to connect to your database.'), '$info_01' => t('In order to install $Projectname we need to know how to connect to your database.'),
'$info_02' => t('Please contact your hosting provider or site administrator if you have questions about these settings.'), '$info_02' => t('Please contact your hosting provider or site administrator if you have questions about these settings.'),
'$info_03' => t('The database you specify below should already exist. If it does not, please create it before continuing.'), '$info_03' => t('The database you specify below should already exist. If it does not, please create it before continuing.'),

View file

@ -152,8 +152,8 @@ function siteinfo_content(&$a) {
$donate .= file_get_contents('doc/site_donate.html'); $donate .= file_get_contents('doc/site_donate.html');
$o = replace_macros(get_markup_template('siteinfo.tpl'), array( $o = replace_macros(get_markup_template('siteinfo.tpl'), array(
'$title' => t('Red'), '$title' => t('$Projectname'),
'$description' => t('This is a hub of hubzilla - a global cooperative network of decentralized privacy enhanced websites.'), '$description' => t('This is a hub of $Projectname - a global cooperative network of decentralized privacy enhanced websites.'),
'$version' => $version, '$version' => $version,
'$tag_txt' => t('Tag: '), '$tag_txt' => t('Tag: '),
'$tag' => $tag, '$tag' => $tag,
@ -161,11 +161,11 @@ function siteinfo_content(&$a) {
'$lastpoll' => get_poller_runtime(), '$lastpoll' => get_poller_runtime(),
'$commit' => $commit, '$commit' => $commit,
'$web_location' => t('Running at web location') . ' ' . z_root(), '$web_location' => t('Running at web location') . ' ' . z_root(),
'$visit' => t('Please visit <a href="https://redmatrix.me">redmatrix.me</a> to learn more about the Hubzilla.'), '$visit' => t('Please visit <a href="https://redmatrix.me">redmatrix.me</a> to learn more about $Projectname.'),
'$bug_text' => t('Bug reports and issues: please visit'), '$bug_text' => t('Bug reports and issues: please visit'),
'$bug_link_url' => 'https://github.com/redmatrix/hubzilla/issues', '$bug_link_url' => 'https://github.com/redmatrix/hubzilla/issues',
'$bug_link_text' => 'hubzilla issues', '$bug_link_text' => '$projectname issues',
'$contact' => t('Suggestions, praise, etc. - please email "hubzilla" at librelist - dot com'), '$contact' => t('Suggestions, praise, etc. - please email "redmatrix" at librelist - dot com'),
'$donate' => $donate, '$donate' => $donate,
'$adminlabel' => t('Site Administrators'), '$adminlabel' => t('Site Administrators'),
'$admininfo' => $admininfo, '$admininfo' => $admininfo,

File diff suppressed because it is too large Load diff

View file

@ -128,7 +128,7 @@ FO_statuses_update () {
$(OAuth_param 'status' "$2") $(OAuth_param 'status' "$2")
) )
params[${#params[@]}]=$(OAuth_param 'source' "shred") params[${#params[@]}]=$(OAuth_param 'source' "shredder")
[[ "$3" != "" ]] && params[${#params[@]}]=$(OAuth_param 'in_reply_to_status_id' "$3") && local in_reply_to_status_id=( '--data-urlencode' "in_reply_to_status_id=$3" ) [[ "$3" != "" ]] && params[${#params[@]}]=$(OAuth_param 'in_reply_to_status_id' "$3") && local in_reply_to_status_id=( '--data-urlencode' "in_reply_to_status_id=$3" )

View file

@ -1 +1 @@
2015-05-14.1032 2015-05-17.1035

View file

@ -1,7 +1,7 @@
Apreciat/da $username, Apreciat/da {{$username}},
S'ha rebut una sol·licitud en $sitename recentment per restablir S'ha rebut una sol·licitud en {{$sitename}} recentment per restablir
la teva contrasenya. Per confirmar aquesta sol·licitud, per favor seleccioni l'enllaç de la teva contrasenya. Per confirmar aquesta sol·licitud, per favor seleccioni l'enllaç de
verificació sota o copia-ho i pega-ho en la barra d'adreces del teu navegador. verificació sota o copia-ho i pega-ho en la barra d'adreces del teu navegador.
@ -13,7 +13,7 @@ va emetre aquesta sol·licitud.
Segueix aquest enllaç per verificar la teva identitat: Segueix aquest enllaç per verificar la teva identitat:
$reset_link {{$reset_link}}
A continuació rebràs un missatge amb la nova contrasenya. A continuació rebràs un missatge amb la nova contrasenya.
@ -23,13 +23,13 @@ configuració.
Les dades d'accés són els següents: Les dades d'accés són els següents:
Lloc: $siteurl Lloc: {{$siteurl}}
Nom: $email Nom: {{$email}}
Salutacions, Salutacions,
L'administració de $sitename L'administració de {{$sitename}}

View file

@ -1,5 +1,5 @@
Apreciat/da $username, Apreciat/da {{$username}},
La teva contrasenya ha estat modificada com has sol·licitat. Pren nota d'aquesta informació La teva contrasenya ha estat modificada com has sol·licitat. Pren nota d'aquesta informació
(o canvía immediatament la contrasenya amb quelcom que recordis). (o canvía immediatament la contrasenya amb quelcom que recordis).
@ -7,13 +7,13 @@ Apreciat/da $username,
Les teves dades d'accés son les següents: Les teves dades d'accés son les següents:
Lloc: $siteurl Lloc: {{$siteurl}}
Nom: $email Nom: {{$email}}
Contrasenya: $new_password Contrasenya: {{$new_password}}
Després d'accedir pots canviar la contrasenya des de la pàgina de configuració del teu perfil. Després d'accedir pots canviar la contrasenya des de la pàgina de configuració del teu perfil.
$sitename {{$sitename}}

View file

@ -1,15 +1,15 @@
Apreciat/da $username, Apreciat/da {{$username}},
Gràcies per registrar-te en $sitename. El teu compte ha estat creat. Gràcies per registrar-te en {{$sitename}}. El teu compte ha estat creat.
Les dades d'accés són les següents: Les dades d'accés són les següents:
Lloc: $siteurl Lloc: {{$siteurl}}
Nom: $email Nom: {{$email}}
Contrasenya: $password Contrasenya: {{$password}}
Després d'accedir pots canviar la teva contrasenya a la pàgina de "Configuració". Després d'accedir pots canviar la teva contrasenya a la pàgina de "Configuració".
@ -17,6 +17,6 @@ Després d'accedir pots canviar la teva contrasenya a la pàgina de "Configuraci
Pren un moment per revisar les altres configuracions del compte en aquesta pàgina. Pren un moment per revisar les altres configuracions del compte en aquesta pàgina.
Gràcies i benvingut/da $sitename. Gràcies i benvingut/da {{$sitename}}.

View file

@ -1,21 +1,21 @@
S'ha rebut la sol·licitud de registre d'un nou usuari en S'ha rebut la sol·licitud de registre d'un nou usuari en
$sitename que requereix la teva aprovació. {{$sitename}} que requereix la teva aprovació.
Les dades d'accés són els següents: Les dades d'accés són els següents:
Nom Complet: $username Nom Complet: {{$username}}
Lloc: $siteurl Lloc: {{$siteurl}}
Nom: $email Nom: {{$email}}
Per aprovar aquesta sol·licitud, visita el següent enllaç: Per aprovar aquesta sol·licitud, visita el següent enllaç:
$siteurl/regmod/allow/$hash {{$siteurl}}/regmod/allow/{{$hash}}
Per denegar la sol·licitud i eliminar el compte, per favor visita: Per denegar la sol·licitud i eliminar el compte, per favor visita:
$siteurl/regmod/deny/$hash {{$siteurl}}/regmod/deny/{{$hash}}
Gràcies. Gràcies.