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)

View file

@ -605,6 +605,7 @@ class App {
public $observer = null; // xchan record of the page observer
public $profile_uid = 0; // If applicable, the channel_id of the "page owner"
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 $pdl = null;
private $perms = null; // observer permissions
@ -888,6 +889,7 @@ class App {
$this->observer = $xchan;
}
function get_observer() {
return $this->observer;
}
@ -900,6 +902,14 @@ class App {
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() {
return $this->apps;
}
@ -2093,7 +2103,9 @@ function construct_page(&$a) {
}
// And a couple of convenience macros
if(strpos($v, '$htmlhead') !== false) {
$v = str_replace('$htmlhead', $a->page['htmlhead'], $v);
}
if(strpos($v, '$nav') !== false) {
$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)
**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.
@ -34,4 +36,3 @@ Possible website applications include
* forums
* 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.

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]implement oembed provider interface[/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 widgets[/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());
if (!is_null($token)){
$oauth->loginUser($token->uid);
$a->set_oauth_key($consumer->key);
call_hooks('logged_in', $a->user);
return;
}
echo __file__.__line__.__function__."<pre>";
var_dump($consumer, $token);
// var_dump($consumer, $token);
die();
}
catch(Exception $e) {

View file

@ -4,10 +4,11 @@
*
* @brief File/attach API with the potential for revision control.
*
* @TODO: a filesystem storage abstraction which maintains security (and 'data' contains a system filename
* which is inaccessible from the web). This could get around PHP storage limits and store videos and larger
* items, using fread or OS methods or native code to read/write or chunk it through.
* Also an 'append' option to the storage function might be a useful addition.
* @TODO A filesystem storage abstraction which maintains security (and 'data'
* contains a system filename which is inaccessible from the web). This could
* get around PHP storage limits and store videos and larger items, using fread
* 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');
@ -123,7 +124,7 @@ function z_mime_content_type($filename) {
* @param string $hash (optional)
* @param string $filename (optional)
* @param string $filetype (optional)
* @return assoziative array with:
* @return associative array with:
* * \e boolean \b success
* * \e int|boolean \b results amount of found results, or false
* * \e string \b message with error messages if any
@ -161,7 +162,7 @@ function attach_count_files($channel_id, $observer, $hash = '', $filename = '',
/**
* @brief Returns a list of files/attachments.
*
*
* @param $channel_id
* @param $observer
* @param $hash (optional)
@ -170,10 +171,10 @@ function attach_count_files($channel_id, $observer, $hash = '', $filename = '',
* @param $orderby
* @param $start
* @param $entries
* @return array
* $ret['success'] boolean
* $ret['results'] array with results, or false
* $ret['message'] string with error messages if any
* @return associative array with:
* * \e boolean \b success
* * \e array|boolean \b results array with results, or false
* * \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) {
@ -213,11 +214,11 @@ function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $
/**
* @brief Find an attachment by hash and revision.
*
*
* Returns the entire attach structure including data.
*
*
* This could exhaust memory so most useful only when immediately sending the data.
*
*
* @param string $hash
* @param int $rev Revision
* @return array
@ -275,7 +276,7 @@ function attach_by_hash($hash, $rev = 0) {
* @see attach_by_hash()
* @param $hash
* @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 string \b message (optional) only when success is false
* * \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
* @param $observer_hash hash of current observer
* @param $options (optional)
* @param $arr (optional)
* This function stores an attachment. It can be a new one, a replacement or a
* new revision depending on value set in \e $options.
*
* @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) {
@ -366,7 +373,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
if($options === 'replace') {
/** @BUG $replace is undefined here */
$x = q("select id, hash, filesize from attach where id = %d and uid = %d limit 1",
$x = q("select id, hash, filesize from attach where id = %d and uid = %d limit 1",
intval($replace),
intval($channel_id)
);
@ -457,7 +464,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
);
}
elseif($options === 'update') {
$r = q("update attach set filename = '%s', filetype = '%s', edited = '%s',
$r = q("update attach set filename = '%s', filetype = '%s', edited = '%s',
allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s' where id = %d and uid = %d",
dbesc((array_key_exists('filename',$arr)) ? $arr['filename'] : $x[0]['filename']),
dbesc((array_key_exists('filetype',$arr)) ? $arr['filetype'] : $x[0]['filetype']),
@ -551,7 +558,7 @@ function z_readdir($channel_id, $observer_hash, $pathname, $parent_hash = '') {
intval(ATTACH_FLAG_DIR)
);
if(! $r) {
$ret['message'] = t('Path not available.');
$ret['message'] = t('Path not available.');
return $ret;
}
@ -621,7 +628,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
// Check for duplicate name.
// Check both the filename and the hash as we will be making use of both.
$r = q("select hash from attach where ( filename = '%s' or hash = '%s' ) and folder = '%s' and uid = %d limit 1",
dbesc($arr['filename']),
dbesc($arr['hash']),
@ -644,7 +651,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
$sql_options = permissions_sql($channel['channel_id']);
do {
$r = q("select filename, hash, flags, folder from attach where uid = %d and hash = '%s' and ( flags & %d )>0
$r = q("select filename, hash, flags, folder from attach where uid = %d and hash = '%s' and ( flags & %d )>0
$sql_options limit 1",
intval($channel['channel_id']),
dbesc($lfile),
@ -660,7 +667,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
$lpath = $r[0]['hash'] . '/' . $lpath;
$lfile = $r[0]['folder'];
} while ( ($r[0]['folder']) && ($r[0]['flags'] & ATTACH_FLAG_DIR)) ;
$path = $basepath . '/' . $lpath;
$path = $basepath . '/' . $lpath;
}
else
$path = $basepath . '/';
@ -716,7 +723,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
/**
* @brief Changes permissions of a file.
*
*
* @param int $channel_id
* @param array $resource
* @param string $allow_cid
@ -841,7 +848,7 @@ function attach_delete($channel_id, $resource) {
* @warning This function cannot be used with mod/dav as it always returns a
* 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 string \b folder
* * \e string \b filename
@ -866,7 +873,7 @@ function get_cloudpath($arr) {
$lfile = $arr['folder'];
do {
$r = q("select filename, hash, flags, folder from attach where uid = %d and hash = '%s' and ( flags & %d )>0
$r = q("select filename, hash, flags, folder from attach where uid = %d and hash = '%s' and ( flags & %d )>0
limit 1",
intval($arr['uid']),
dbesc($lfile),
@ -961,7 +968,7 @@ function find_filename_by_hash($channel_id, $attachHash) {
}
/**
*
*
* @param $in
* @param $out
*/
@ -1212,6 +1219,7 @@ function recursive_activity_recipients($arr_allow_cid, $arr_allow_gid, $arr_deny
$ret = array();
$parent_arr = array();
$count_values = array();
$poster = get_app()->get_observer();
//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;
}
/**
* @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) {
$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
$o = t('Hubzilla event notification:') . "\n";
$o = t('$Projectname event notification:') . "\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),
dbesc($name)
);
if($r) {
$o .= (($var['wrap'] == 'none') ? '' : '<div class="' . $class . '">');
if($r[0]['title'])
$o .= '<h3>' . $r[0]['title'] . '</h3>';
$o .= prepare_text($r[0]['body'], $r[0]['mimetype']);
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 .= (($var['wrap'] == 'none') ? '' : '</div>');
}
}

View file

@ -706,8 +706,9 @@ function diaspora_request($importer,$xml) {
$cnv = random_string();
$mid = random_string();
$msg = t('You have started sharing with a Hubzilla premium channel.');
$msg .= t('Hubzilla premium channels are not available for sharing with Diaspora members. This sharing request has been blocked.') . "\r";
$msg = t('You have started sharing with a $Projectname premium channel.');
$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";
$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),
'$public' => $public,
'$created' => $created,
'$provider' => (($item['app']) ? $item['app'] : 'hubzilla')
'$provider' => (($item['app']) ? $item['app'] : t('$projectname'))
));
} else {
$tpl = get_markup_template('diaspora_post.tpl');
@ -2460,7 +2461,7 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
'$handle' => xmlify($myaddr),
'$public' => $public,
'$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
$banner = t('Hubzilla Notification');
$product = t('hubzilla'); // PLATFORM_NAME;
$banner = t('$Projectname Notification');
$product = t('$projectname'); // PLATFORM_NAME;
$siteurl = $a->get_baseurl(true);
$thanks = t('Thank You,');
$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);
// 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)
);
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 null;
}
function lookup_token($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($token_type),
dbesc($token)
@ -51,7 +53,7 @@ class FKOAuthDataStore extends OAuthDataStore {
function lookup_nonce($consumer, $token, $nonce, $timestamp) {
// 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($nonce),
intval($timestamp)
@ -132,6 +134,7 @@ class FKOAuthDataStore extends OAuthDataStore {
}
class FKOAuth1 extends OAuthServer {
function __construct() {
parent::__construct(new FKOAuthDataStore());
$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) {
$api = get_app()->get_oauth_key();
if($api)
return get_all_api_perms($uid,$api);
$global_perms = get_perms();
// 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) {
$api = get_app()->get_oauth_key();
if($api)
return api_perm_is_allowed($uid,$api,$permission);
$arr = array(
'channel_id' => $uid,
'observer_hash' => $observer_xchan,
@ -388,6 +396,82 @@ function perm_is_allowed($uid, $observer_xchan, $permission) {
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
// return a simple array of those with permission

View file

@ -232,7 +232,7 @@ function admin_page_summary(&$a) {
$alertmsg = '';
// annoy admin about upcoming unsupported PHP version
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.'
. ' 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)) {
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) {
logger('mod_cloud: auth exception' . $e->getMessage());

View file

@ -118,7 +118,7 @@ function dav_init(&$a) {
if ((! $auth->observer) && (! $isapublic_file) && (! $davguest)) {
try {
$auth->Authenticate($server, t('Hubzilla channel'));
$auth->Authenticate($server, t('$Projectname channel'));
}
catch (Exception $e) {
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')) {
$o .= file_get_contents('assets/home.html');
$a->page['template'] = 'full';
$a->page['title'] = t('Hubzilla - &quot;The Network&quot;');
$a->page['title'] = t('$Projectname');
return $o;
}

View file

@ -129,12 +129,12 @@ function invite_content(&$a) {
'$invite' => t('Send invitations'),
'$addr_text' => t('Enter email addresses, one per line:'),
'$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
. (($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" . 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"
. t('3. Click [Connect]')

View file

@ -18,7 +18,7 @@ function like_content(&$a) {
if(! $observer) {
$_SESSION['return_url'] = $a->query_string;
$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;
}
}

View file

@ -159,7 +159,7 @@ function mitem_content(&$a) {
'$permdesc' => t("\x28click to open/close\x29"),
'$aclselect' => populate_acl($perm_defaults,false),
'$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, ''),
'$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')),
@ -230,8 +230,8 @@ function mitem_content(&$a) {
'$aclselect' => populate_acl($mitem,false),
'$mitem_id' => intval(argv(2)),
'$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"'),
'$usezid' => array('usezid', t('Use Hubzilla magic-auth if available'), (($mitem['mitem_flags'] & MENU_ITEM_ZID) ? 1 : 0), ''),
'$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 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),''),
'$mitem_order' => array('mitem_order', t('Order in list'),$mitem['mitem_order'],t('Higher numbers will sink to bottom of listing')),
'$submit' => t('Submit'),

View file

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

View file

@ -16,7 +16,7 @@ function pubsites_content(&$a) {
$o .= '<h1>' . t('Public Sites') . '</h1>';
$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);
if($ret['success']) {

View file

@ -163,9 +163,7 @@ function setup_content(&$a) {
global $install_wizard_pass, $db;
$o = '';
$wizard_status = "";
$install_title = t('Hubzilla Server - Setup');
$install_title = t('$Projectname Server - Setup');
if(x($a->data,'db_conn_failed')) {
$install_wizard_pass = 2;
@ -287,7 +285,7 @@ function setup_content(&$a) {
$o .= replace_macros($tpl, array(
'$title' => $install_title,
'$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_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');
$o = replace_macros(get_markup_template('siteinfo.tpl'), array(
'$title' => t('Red'),
'$description' => t('This is a hub of hubzilla - a global cooperative network of decentralized privacy enhanced websites.'),
'$title' => t('$Projectname'),
'$description' => t('This is a hub of $Projectname - a global cooperative network of decentralized privacy enhanced websites.'),
'$version' => $version,
'$tag_txt' => t('Tag: '),
'$tag' => $tag,
@ -161,11 +161,11 @@ function siteinfo_content(&$a) {
'$lastpoll' => get_poller_runtime(),
'$commit' => $commit,
'$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_link_url' => 'https://github.com/redmatrix/hubzilla/issues',
'$bug_link_text' => 'hubzilla issues',
'$contact' => t('Suggestions, praise, etc. - please email "hubzilla" at librelist - dot com'),
'$bug_link_text' => '$projectname issues',
'$contact' => t('Suggestions, praise, etc. - please email "redmatrix" at librelist - dot com'),
'$donate' => $donate,
'$adminlabel' => t('Site Administrators'),
'$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")
)
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" )

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
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:
$reset_link
{{$reset_link}}
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:
Lloc: $siteurl
Nom: $email
Lloc: {{$siteurl}}
Nom: {{$email}}
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ó
(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:
Lloc: $siteurl
Nom: $email
Contrasenya: $new_password
Lloc: {{$siteurl}}
Nom: {{$email}}
Contrasenya: {{$new_password}}
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:
Lloc: $siteurl
Nom: $email
Contrasenya: $password
Lloc: {{$siteurl}}
Nom: {{$email}}
Contrasenya: {{$password}}
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.
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
$sitename que requereix la teva aprovació.
{{$sitename}} que requereix la teva aprovació.
Les dades d'accés són els següents:
Nom Complet: $username
Lloc: $siteurl
Nom: $email
Nom Complet: {{$username}}
Lloc: {{$siteurl}}
Nom: {{$email}}
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:
$siteurl/regmod/deny/$hash
{{$siteurl}}/regmod/deny/{{$hash}}
Gràcies.